db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DERBY-4480) "No suitable driver found" when attempting to connect while other thread is auto-loading the driver
Date Thu, 24 Jan 2013 08:25:15 GMT

    [ 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

Mime
View raw message