You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Knut Anders Hatlen (JIRA)" <ji...@apache.org> on 2013/01/24 09:25:15 UTC

[jira] [Commented] (DERBY-4480) "No suitable driver found" when attempting to connect while other thread is auto-loading the driver

    [ 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