[
https://issues.apache.org/jira/browse/DBCP-333?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12965312#action_12965312
]
Sebb commented on DBCP-333:
---------------------------
What about the line a bit earlier which is called if driverClassLoader == null:
Class.forName(driverClassName);
In that case, driverFromCCL won't be initialised either.
It's not clear to me what the code is trying to achieve, but at least at
present it is self-consistent.
Replacing only one of the Class.forName() calls does not seem correct to me.
==
Also, why not replace:
Class.forName(driverClassName, true, driverClassLoader);
with
driverFromCCL = Class.forName(driverClassName, true, driverClassLoader);
Would that not work just as well? Similarly for
Class.forName(driverClassName);
==
The method could do with some Javadoc TLC to explain when the URL is used, and
when the classname is used.
> 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
> 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.
-
You can reply to this email to add a comment to the issue online.