db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick Hillegas (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (DERBY-6945) Re-package Derby as a collection of jigsaw modules
Date Mon, 08 Jan 2018 00:16:00 GMT

     [ 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


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


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:
>            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

This message was sent by Atlassian JIRA

View raw message