[
https://issues.apache.org/jira/browse/DERBY-6224?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13670291#comment-13670291
]
Knut Anders Hatlen commented on DERBY-6224:
-------------------------------------------
I didn't find anything in DERBY-2905 that suggested the current behaviour of
calling DriverManager.deregisterDriver() even if deregister=false is specified,
was intended. It looks like the call is a left-over from before
AutoloadedDriver was introduced in 10.2.
The engine code has two calls to DriverManager.registerDriver(). Both of them
register an instance of AutoloadedDriver (or possibly the sub-class
AutoloadedDriver40). None of them registers an instance of InternalDriver, so
it looks pointless to try to unregister such a driver. And even more so when
the caller has requested that the driver is not deregistered. Before JDBC 4.2,
calling unregisterDriver() on a driver that was not registered was a no-op, so
doing it was harmless. In JDBC 4.2 it is no longer a no-op, as it checks that
the caller is granted permission to call the method. I suggest that we remove
the call that tries to deregister the InteralDriver instance, since it's
unnecessary and causes problems when running on Java 8.
> Many test failures on latest JDK 8 EA build because of missing SQLPermission
> ----------------------------------------------------------------------------
>
> Key: DERBY-6224
> URL: https://issues.apache.org/jira/browse/DERBY-6224
> Project: Derby
> Issue Type: Bug
> Components: Test
> Affects Versions: 10.11.0.0
> Environment: java version "1.8.0-ea"
> Java(TM) SE Runtime Environment (build 1.8.0-ea-b89)
> Java HotSpot(TM) 64-Bit Server VM (build 25.0-b31, mixed mode)
> Reporter: Knut Anders Hatlen
> Assignee: Knut Anders Hatlen
> Attachments: derby-6224-01-a.diff
>
>
> With the latest EA build of JDK 8 (build 1.8.0-ea-b89), I see many failures
> in suites.All. For example:
> 1)
> testStartNetworkServerFalse(org.apache.derbyTesting.functionTests.tests.derbynet.DerbyNetAutoStartTest)java.security.AccessControlException:
> access denied ("java.sql.SQLPermission" "deregisterDriver")
> at
> java.security.AccessControlContext.checkPermission(AccessControlContext.java:364)
> at
> java.security.AccessController.checkPermission(AccessController.java:562)
> at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
> at java.sql.DriverManager.deregisterDriver(DriverManager.java:399)
> at
> org.apache.derby.jdbc.AutoloadedDriver.unregisterDriverModule(AutoloadedDriver.java:263)
> at org.apache.derby.jdbc.Driver20.stop(Driver20.java:105)
> at
> org.apache.derby.impl.services.monitor.TopService.stop(TopService.java:443)
> at
> org.apache.derby.impl.services.monitor.TopService.shutdown(TopService.java:394)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.shutdown(BaseMonitor.java:227)
> at
> org.apache.derby.impl.services.monitor.FileMonitor.shutdown(FileMonitor.java:44)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.shutdown(BaseMonitor.java:197)
> at
> org.apache.derby.impl.services.monitor.FileMonitor.shutdown(FileMonitor.java:44)
> at org.apache.derby.jdbc.InternalDriver.connect(InternalDriver.java:255)
> at org.apache.derby.jdbc.Driver20.connect(Driver20.java:246)
> at
> org.apache.derby.jdbc.AutoloadedDriver.connect(AutoloadedDriver.java:145)
> at java.sql.DriverManager.getConnection(DriverManager.java:661)
> at java.sql.DriverManager.getConnection(DriverManager.java:208)
> at
> org.apache.derbyTesting.junit.DriverManagerConnector.getConnectionByAttributes(DriverManagerConnector.java:204)
> at
> org.apache.derbyTesting.junit.DriverManagerConnector.shutEngine(DriverManagerConnector.java:171)
> at
> org.apache.derbyTesting.junit.TestConfiguration.shutdownEngine(TestConfiguration.java:1822)
> at
> org.apache.derbyTesting.functionTests.tests.derbynet.DerbyNetAutoStartTest.setUp(DerbyNetAutoStartTest.java:82)
> at
> org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:117)
> at
> org.apache.derbyTesting.junit.BaseJDBCTestCase.runBareOverridable(BaseJDBCTestCase.java:439)
> at
> org.apache.derbyTesting.junit.BaseJDBCTestCase.runBare(BaseJDBCTestCase.java:456)
> What's new in EA build 89 is that DriverManager.deregisterDriver() now
> requires an SQLPermission when running under a security manager. Most of
> suites.All runs under a security manager, and Derby's engine shutdown code
> calls deregisterDriver(), so this problem probably affects all tests that
> shut down the engine.
--
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