[
https://issues.apache.org/jira/browse/DERBY-6945?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rick Hillegas updated DERBY-6945:
---------------------------------
Attachment: derby-6945-09-ab-moveInternalDriver.diff
Attaching derby-6945-09-ab-moveInternalDriver.diff. As preparation for moving
org.apache.derby.jdbc into derbytools.jar, this patch moves the following
non-publicAPI classes out of org.apache.derby.jdbc and into
org.apache.derby.iapi.jdbc:
InternalDriver (the tricky guts of the embedded driver)
JDBC (the engine's Version MBean)
This also involved some delicate changes to
JDBCBoot (the tricky logic which boots the engine)
For the moment, I have retreated from a more ambitious effort to also move
AutoloadedDriver. That change was causing nested connections to fail. That is,
it broke the resolution of connection URLs which start with the special sqlj
jdbc:default:connection token. After I commit this patch, I will go back to
trying to move AutoloadedDriver.
The embedded driver and engine boot logic are spread fragilely across several
cooperating classes. When I moved InternalDriver and JDBCBoot, I uncovered
another race condition which involves two threads trying to call
DriverManager.getConnection() simultaneously. ConcurrentAutoloadTest disclosed
this. I have put all of the boot logic inside a synchronized block. That fixed
the problem. Moreover, it struck me as a long overdue improvement. It seems to
me that we were just asking for trouble by allowing two threads to
simultaneously race through the complicated booting of engine components. I am
not confident that there aren't other race conditions in this subtle logic. It
could use a top-down overhaul.
Tests ran cleanly for me on this patch.
Touches the following files:
-------------------------------------
A + java/engine/org/apache/derby/iapi/jdbc/InternalDriver.java
A + java/engine/org/apache/derby/iapi/jdbc/JDBC.java
D java/engine/org/apache/derby/jdbc/InternalDriver.java
D java/engine/org/apache/derby/jdbc/JDBC.java
M
java/build/org/apache/derbyBuild/lastgoodjarcontents/insane.derby.jar.lastcontents
M
java/build/org/apache/derbyBuild/lastgoodjarcontents/sane.derby.jar.lastcontents
Move InternalDriver and JDBC out of the public api package and into an
engine-internal api package.
-------------------------------------
M java/engine/org/apache/derby/jdbc/AutoloadedDriver.java
M java/engine/org/apache/derby/jdbc/EmbeddedDriver.java
M java/engine/org/apache/derby/iapi/jdbc/JDBCBoot.java
Fix a race condition involving two threads which try to get a connection at the
same time.
-------------------------------------
M
java/engine/org/apache/derby/jdbc/BasicEmbeddedConnectionPoolDataSource40.java
M java/engine/org/apache/derby/jdbc/BasicEmbeddedDataSource40.java
M java/engine/org/apache/derby/jdbc/BasicEmbeddedXADataSource40.java
M java/engine/org/apache/derby/jdbc/EmbeddedConnectionPoolDataSource.java
M java/engine/org/apache/derby/jdbc/EmbeddedXADataSource.java
Pull the creation of Connection objects out of InternalDriver and put it into
the DataSources, where it belongs. This fixes InternalDriver so that it does
not call up into the public api package.
-------------------------------------
M java/drda/org/apache/derby/impl/drda/DRDAConnThread.java
M java/engine/org/apache/derby/catalog/SystemProcedures.java
M java/engine/org/apache/derby/impl/db/SlaveDatabase.java
M java/engine/org/apache/derby/impl/jdbc/ConnectionChild.java
M java/engine/org/apache/derby/impl/jdbc/EmbedConnection.java
M java/engine/org/apache/derby/impl/jdbc/LOBStoredProcedure.java
M java/engine/org/apache/derby/impl/jdbc/TransactionResourceImpl.java
M
java/engine/org/apache/derby/impl/jdbc/authentication/NativeAuthenticationServiceImpl.java
M java/engine/org/apache/derby/jdbc/Driver42.java
M
java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/Wrapper41Driver.java
M
java/testing/org/apache/derbyTesting/functionTests/tests/tools/RollBackWrappingWhenFailOnImportTest.java
Adjust import statements to account for the relocation of InternalDriver.
-------------------------------------
M
java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/ConcurrentAutoloadTest.java
Make this test report more failure information.
> Re-package Derby as a collection of jigsaw modules
> --------------------------------------------------
>
> Key: DERBY-6945
> URL: https://issues.apache.org/jira/browse/DERBY-6945
> Project: Derby
> Issue Type: Improvement
> Affects Versions: 10.13.1.2
> Reporter: Rick Hillegas
> Attachments: derby-6945-01-aa-remove_derbyPreBuild_dep.diff,
> derby-6945-02-ab-newDerbySharedJar.diff,
> derby-6945-02-ac-newDerbySharedJar.diff, derby-6945-03-aa-partitionTest.diff,
> derby-6945-04-aa-moveRunClass.diff,
> derby-6945-05-aa-removeRedundant_Attribute_SQLState.diff,
> derby-6945-06-aa-removeOtherSharedDuplicates.diff,
> derby-6945-07-aa-net_client_overlap.diff,
> derby-6945-08-aa-move_shared_iapi_under_shared.diff,
> derby-6945-08-ab-move_shared_iapi_under_shared.diff,
> derby-6945-08-ad-move_shared_iapi_under_shared.diff,
> derby-6945-09-ab-moveInternalDriver.diff, jdeps.out.tar
>
>
> Once we commit to building with Java 9 (see DERBY-6856), we should consider
> re-packaging Derby as a set of jigsaw modules. This would result in a
> different set of release artifacts. This might be a good opportunity to
> address the Tomcat artifactory issues raised by issue DERBY-6944.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)