[ 
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

Reply via email to