[ 
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

Reply via email to