commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mark Thomas (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (DBCP-333) Unable to create a JDBC driver using custom class loader
Date Tue, 22 Mar 2011 20:48:05 GMT

     [ https://issues.apache.org/jira/browse/DBCP-333?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Mark Thomas resolved DBCP-333.
------------------------------

    Resolution: Fixed

> Unable to create a JDBC driver using custom class loader
> --------------------------------------------------------
>
>                 Key: DBCP-333
>                 URL: https://issues.apache.org/jira/browse/DBCP-333
>             Project: Commons Dbcp
>          Issue Type: Bug
>    Affects Versions: 1.3, 1.4
>            Reporter: Krasimir Nedkov
>            Assignee: Mark Thomas
>             Fix For: 1.3.1, 1.4.1
>
>
> Hello,
> I'm unable to instantiate my JDBC driver using a custom class loader:
>         BasicDataSource ds = new BasicDataSource();
>         String connectURL = "jdbc:mysql://"+config.getHost()+"/"+config.getDatabaseName();
>         ds.setDriverClassName(MySQLStore.MYSQL_DRIVER);
>         ds.setDriverClassLoader(config.getClass().getClassLoader());
>         .....
> Having a look at the org.apache.commons.dbcp.BasicDataSource.createConnectionFactory()
method implementation, I found that the class loader is actually ignored. In the first part
of the method there is an attempt to load the class that seems to pass successfully, but the
loaded class is not assigned to the driverFromCCL variable:
>             if (driverClassLoader == null) {
>                  Class.forName(driverClassName);
>             } else {
>                  Class.forName(driverClassName, true, driverClassLoader);
>             }
> Then in the second part of the method driverFromCCL is still null and instead of instantiating
the driver directly, DriverManager.getDriver(url) is called, which fails:
>             if (driverFromCCL == null) {
>                 driver = DriverManager.getDriver(url);
>             } else {
>                 // Usage of DriverManager is not possible, as it does not
>                 // respect the ContextClassLoader
>                 driver = (Driver) driverFromCCL.newInstance();
>                 if (!driver.acceptsURL(url)) {
>                     throw new SQLException("No suitable driver", "08001"); 
>                 }
>             }
> Kind regards,
> Krasimir

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message