[ http://issues.apache.org/jira/browse/DERBY-1537?page=comments#action_12423212 ] Andrew McIntyre commented on DERBY-1537: ----------------------------------------
This problem only occurs when running with the security manager enabled. The underlying problem is that there is a copy of org/apache/derby/impl/jdbc metadata.properties in derbytools.jar. When running with the security manager enabled, with the test policy file, the engine requests metadata.properties and the first copy it finds is in derbytools.jar. However, derby.jar does not have the necessary FilePermission to read files in derbytools.jar, so getResourceAsStream() returns null for the file. The NPE is then thrown because of the next line of code when it calls Properties.load() with a null reference. It's not technically a regression, since derbytools.jar has apparently included a copy of metadata.properties since the beginning. We just had never spotted it because the tests were not running with the security manager. And up until last week, no one had tried putting tools.jar first. That said, the fact that there's a copy of metadata.properties in derbytools.jar is certainly a bug, and one that I'll fix. Preliminary investigation indicates the problem is with the classlister utility which generates the dependency list for the jar. > Boot-time exception when running Derby tests with derbytools.jar in front of > derby.jar in the classpath. > -------------------------------------------------------------------------------------------------------- > > Key: DERBY-1537 > URL: http://issues.apache.org/jira/browse/DERBY-1537 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.0.0 > Reporter: A B > Priority: Critical > Fix For: 10.2.0.0 > > > When running derbyall against sane jars all tests that create the "wombat" > database fail at boot-time if the classpath has derbytools.jar before > derby.jar. The failure occurs when the test tries to create the database. I > can successfully create a database manually, but for whatever reason the test > harness is unable to do so. > I've set the component to "Test" but I don't know if this a test harness > problem or something more severe. > The full stack trace is below. If I switch the order of derby.jar and > derbytools.jar, everything works as expected. > ERROR XBM01: Startup failed due to an exception. See next exception for > details. > at > org.apache.derby.iapi.error.StandardException.newException(StandardException.java:297) > at > org.apache.derby.iapi.services.monitor.Monitor.exceptionStartingModule(Monitor.java:668) > at > org.apache.derby.impl.services.monitor.BaseMonitor.bootService(BaseMonitor.java:1849) > at > org.apache.derby.impl.services.monitor.BaseMonitor.createPersistentService(BaseMonitor.java:1013) > at > org.apache.derby.iapi.services.monitor.Monitor.createPersistentService(Monitor.java:587) > at > org.apache.derby.impl.jdbc.EmbedConnection.createDatabase(EmbedConnection.java:1563) > at > org.apache.derby.impl.jdbc.EmbedConnection.<init>(EmbedConnection.java:243) > at > org.apache.derby.impl.jdbc.EmbedConnection30.<init>(EmbedConnection30.java:72) > at org.apache.derby.jdbc.Driver30.getNewEmbedConnection(Driver30.java:73) > at org.apache.derby.jdbc.InternalDriver.connect(InternalDriver.java:209) > at > org.apache.derby.jdbc.AutoloadedDriver.connect(AutoloadedDriver.java:116) > at java.sql.DriverManager.getConnection(DriverManager.java:539) > at java.sql.DriverManager.getConnection(DriverManager.java:158) > at org.apache.derby.impl.tools.ij.util.startJBMS(util.java:491) > at org.apache.derby.impl.tools.ij.util.startJBMS(util.java:571) > at > org.apache.derby.impl.tools.ij.ConnectionEnv.init(ConnectionEnv.java:62) > at org.apache.derby.impl.tools.ij.utilMain.<init>(utilMain.java:149) > at org.apache.derby.impl.tools.ij.utilMain14.<init>(utilMain14.java:51) > at org.apache.derby.impl.tools.ij.Main14.getutilMain(Main14.java:102) > at org.apache.derby.impl.tools.ij.Main.<init>(Main.java:232) > at org.apache.derby.impl.tools.ij.Main14.<init>(Main14.java:68) > at org.apache.derby.impl.tools.ij.Main14.getMain(Main14.java:91) > at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:170) > at org.apache.derby.impl.tools.ij.Main14.main(Main14.java:55) > at org.apache.derby.tools.ij.main(ij.java:60) > ============= begin nested exception, level (1) =========== > java.lang.NullPointerException > at java.io.Reader.<init>(Reader.java(Inlined Compiled Code)) > at java.io.InputStreamReader.<init>(InputStreamReader.java(Inlined > Compiled Code)) > at java.util.Properties.load(Properties.java(Compiled Code)) > at > org.apache.derby.impl.sql.catalog.DataDictionaryImpl.run(DataDictionaryImpl.java:9757) > at java.security.AccessController.doPrivileged1(Native Method) > at java.security.AccessController.doPrivileged(AccessController.java:287) > at > org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getQueryDescriptions(DataDictionaryImpl.java:9747) > at > org.apache.derby.impl.sql.catalog.DataDictionaryImpl.createSPSSet(DataDictionaryImpl.java:8275) > at > org.apache.derby.impl.sql.catalog.DataDictionaryImpl.createSystemSps(DataDictionaryImpl.java:8262) > at > org.apache.derby.impl.sql.catalog.DataDictionaryImpl.boot(DataDictionaryImpl.java:651) > at > org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1996) > at > org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:290) > at > org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:542) > at > org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:418) > at > org.apache.derby.impl.sql.conn.GenericLanguageConnectionFactory.bootDataDictionary(GenericLanguageConnectionFactory.java:357) > at > org.apache.derby.impl.sql.conn.GenericLanguageConnectionFactory.boot(GenericLanguageConnectionFactory.java:330) > at > org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1996) > at > org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:290) > at > org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:542) > at > org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:418) > at org.apache.derby.impl.db.BasicDatabase.boot(BasicDatabase.java:193) > at > org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1996) > at > org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:290) > at > org.apache.derby.impl.services.monitor.BaseMonitor.bootService(BaseMonitor.java:1831) > at > org.apache.derby.impl.services.monitor.BaseMonitor.createPersistentService(BaseMonitor.java:1013) > at > org.apache.derby.iapi.services.monitor.Monitor.createPersistentService(Monitor.java:587) > at > org.apache.derby.impl.jdbc.EmbedConnection.createDatabase(EmbedConnection.java:1563) > at > org.apache.derby.impl.jdbc.EmbedConnection.<init>(EmbedConnection.java:243) > at > org.apache.derby.impl.jdbc.EmbedConnection30.<init>(EmbedConnection30.java:72) > at org.apache.derby.jdbc.Driver30.getNewEmbedConnection(Driver30.java:73) > at org.apache.derby.jdbc.InternalDriver.connect(InternalDriver.java:209) > at > org.apache.derby.jdbc.AutoloadedDriver.connect(AutoloadedDriver.java:116) > at java.sql.DriverManager.getConnection(DriverManager.java:539) > at java.sql.DriverManager.getConnection(DriverManager.java:158) > at org.apache.derby.impl.tools.ij.util.startJBMS(util.java:491) > at org.apache.derby.impl.tools.ij.util.startJBMS(util.java:571) > at > org.apache.derby.impl.tools.ij.ConnectionEnv.init(ConnectionEnv.java:62) > at org.apache.derby.impl.tools.ij.utilMain.<init>(utilMain.java:149) > at org.apache.derby.impl.tools.ij.utilMain14.<init>(utilMain14.java:51) > at org.apache.derby.impl.tools.ij.Main14.getutilMain(Main14.java:102) > at org.apache.derby.impl.tools.ij.Main.<init>(Main.java:232) > at org.apache.derby.impl.tools.ij.Main14.<init>(Main14.java:68) > at org.apache.derby.impl.tools.ij.Main14.getMain(Main14.java:91) > at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:170) > at org.apache.derby.impl.tools.ij.Main14.main(Main14.java:55) > at org.apache.derby.tools.ij.main(ij.java:60) > ============= end nested exception, level (1) =========== > Cleanup action completed -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
