[
https://issues.apache.org/jira/browse/DERBY-4480?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13561496#comment-13561496
]
Knut Anders Hatlen commented on DERBY-4480:
-------------------------------------------
This problem was fixed in OpenJDK as part of:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7026898
Code changes: http://hg.openjdk.java.net/jdk7/jdk7/jdk/rev/df9991dc1f0d
Before said change, all of DriverManager's public static methods would call
some initialization code. That initialization code was guarded by a boolean
flag to make sure it only ran once. This worked fine for the methods that were
synchronized. However, those methods that weren't synchronized (like
getConnection()) could end up concluding that no initialization was necessary
and go ahead, just because some other thread was about to start the
initialization. For example, a call to getConnection() could go through the
list of available drivers without initializing it first, which would result in
the "No suitable driver found" exception reported in this issue.
After the change, the initialization code lives in a static initializer which
runs exactly once when the class is loaded, so the list of available drivers is
always ready before getConnection() gets to run the first time.
> "No suitable driver found" when attempting to connect while other thread is
> auto-loading the driver
> ---------------------------------------------------------------------------------------------------
>
> Key: DERBY-4480
> URL: https://issues.apache.org/jira/browse/DERBY-4480
> Project: Derby
> Issue Type: Bug
> Components: JDBC
> Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0,
> 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.5.2.0, 10.5.3.0, 10.6.1.0
> Environment: OpenSolaris snv_129, X86
> Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
> Java(TM) SE Runtime Environment (build 1.7.0-ea-b76)
> Reporter: Knut Anders Hatlen
> Labels: derby_triage10_8
> Attachments: AutoloadTest.java
>
>
> If you try to connect to embedded Derby from two threads simultaneously, and
> the embedded driver has not been loaded yet, one of the threads will trigger
> auto-loading of the driver and connect successfully, whereas the other thread
> will fail with this message: java.sql.SQLException: No suitable driver found
> for jdbc:derby:db;create=true
> This problem has been present since JDBC 4 auto-loading was implemented
> (10.2.1.6).
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira