[
https://issues.apache.org/jira/browse/DERBY-7126?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17451916#comment-17451916
]
Richard N. Hillegas commented on DERBY-7126:
--------------------------------------------
Attaching derby-7126-04-aa-makeTestsRunOnJDK11andJDK18.diff. This patch adjusts
the tests so that they run cleanly on both JDK 11 and 18 build 18-ea+23-1525.
With these changes, Derby builds cleanly on both JDK 11 and JDK 18--that
includes the javadoc.
The chief challenge was that the java.security.manager property has changed
meaning between JDK 11 and JDK 18. JDK 11 interprets the property as the name
of a user-written class which replaces the SecurityManager. JDK 18 interprets
the property as a gate on whether the application is allowed to install a
SecurityManager. You CAN'T set that property when running on JDK 11 and you
MUST set that property when running on JDK 18.
To test these changes, I built Derby with JDK 18 build 18-ea+23-1525 and ran
the following tests on JDK 11 and JDK 18:
o The old harness tests with both the classpath and the modulepath (from my own
scripts, setting java.security.manager=allow only if the platform was JDK 18).
o The JUnit tests with both the classpath and the modulepath (from my own
scripts, setting java.security.manager=allow only if the platform was JDK 18).
o ant junit-all
o ant test-derbyall
o ant test-derbyall-with-modulepath
o ant test-junit-all-with-modulepath
I saw one error in XMLBindingTest when running the JUnit tests under ant. The
error occurs when you run XMLBindingTest standalone using the junit-single
target. The error was not introduced by my changes: it occurs when you run
XMLBindingTest under ant on JDK 11 without my changes. This is the error:
{noformat}
<testcase
classname="org.apache.derbyTesting.functionTests.tests.lang.XMLBindingTest$XBindTestSetup"
name="unknown" time="0.0">
<error message="Invalid XML Document: access denied
("java.io.FilePermission"
"/Users/rhillegas/derby/mainline/trunk/junit_20211126_1247/extin/personal.dtd"
"read")" type="java.sql.SQLDataException">java.sql.SQLDataException:
Invalid XML Document: access denied ("java.io.FilePermission"
"/Users/rhillegas/derby/mainline/trunk/junit_20211126_1247/extin/personal.dtd"
"read")
at
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:84)
at
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:141)
at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:252)
at
org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:438)
at
org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:360)
at
org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2405)
at
org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:88)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1436)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1709)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(EmbedPreparedStatement.java:1394)
at org.apache.derbyTesting.junit.XML.insertDocWithDTD(XML.java:206)
at
org.apache.derbyTesting.functionTests.tests.lang.XMLBindingTest$XBindTestSetup.setUp(XMLBindingTest.java:306)
at junit.extensions.TestSetup$1.protect(TestSetup.java:20)
at junit.extensions.TestSetup.run(TestSetup.java:25)
at
org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:60)
at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
at junit.extensions.TestSetup.run(TestSetup.java:25)
at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
at junit.extensions.TestSetup.run(TestSetup.java:25)
Caused by: ERROR 2200M: Invalid XML Document: access denied
("java.io.FilePermission"
"/Users/rhillegas/derby/mainline/trunk/junit_20211126_1247/extin/personal.dtd"
"read")
at
org.apache.derby.shared.common.error.StandardException.newException(StandardException.java:300)
at
org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory.java:170)
at
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:75)
Caused by: java.security.AccessControlException: access denied
("java.io.FilePermission"
"/Users/rhillegas/derby/mainline/trunk/junit_20211126_1247/extin/personal.dtd"
"read")
at
java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:485)
at
java.base/java.security.AccessController.checkPermission(AccessController.java:1068)
at
java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:411)
at
java.base/java.lang.SecurityManager.checkRead(SecurityManager.java:751)
at java.base/java.io.File.isDirectory(File.java:860)
at
java.base/sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:78)
at
java.base/sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:189)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown
Source)
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown
Source)
at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown
Source)
at
org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown
Source)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at org.apache.derby.iapi.types.SqlXmlUtil$1.run(SqlXmlUtil.java:331)
at org.apache.derby.iapi.types.SqlXmlUtil$1.run(SqlXmlUtil.java:328)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at
org.apache.derby.iapi.types.SqlXmlUtil.serializeToString(SqlXmlUtil.java:326)
at org.apache.derby.iapi.types.XML.XMLParse(XML.java:630)
at
org.apache.derby.exe.ac3ea3c0fbx017dx5e01x2bf3x00004dfa5c450.e0(Unknown Source)
at
org.apache.derby.impl.services.reflect.DirectCall.invoke(ReflectGeneratedClass.java:101)
at
org.apache.derby.impl.sql.execute.RowResultSet.getNextRowCore(RowResultSet.java:150)
at
org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(NormalizeResultSet.java:188)
at
org.apache.derby.impl.sql.execute.DMLWriteResultSet.getNextRowCore(DMLWriteResultSet.java:148)
at
org.apache.derby.impl.sql.execute.InsertResultSet.getNextRowCore(InsertResultSet.java:1082)
at
org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:451)
at
org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:472)
at
org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:351)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1344)
</error>
</testcase>
{noformat}
Touches the following files:
{noformat}
M build.xml
Change the ant test targets to only set java.security.manager=allow if the JDK
level is at least 16. I used the presence of a class introduced by JDK 16 to
switch the behavior. Sample tests ran cleanly on JDK 16 when I did this. The
meaning of java.security.manager must have changed in JDK 16 or earlier. I used
the JDK 16 class because it was easy to figure out that the new class was
introduced by that version; I could not easily find any classes introduced by
JDK 17 or JDK 18.
M
java/org.apache.derby.tests/org/apache/derbyTesting/functionTests/harness/JavaVersionHolder.java
Some future-proofing to make sure that the tests continue to run up through JDK
21.
M
java/org.apache.derby.tests/org/apache/derbyTesting/functionTests/harness/jvm.java
M
java/org.apache.derby.tests/org/apache/derbyTesting/junit/BaseTestCase.java
M
java/org.apache.derby.tests/org/apache/derbyTesting/junit/NetworkServerTestSetup.java
When spawning new JVMs, only set java.security.manager=allow if the JDK level
is at least 18.
{noformat}
> Make it possible to build and test Derby cleanly with OpenJDK 18
> ----------------------------------------------------------------
>
> Key: DERBY-7126
> URL: https://issues.apache.org/jira/browse/DERBY-7126
> Project: Derby
> Issue Type: Task
> Components: Build tools
> Affects Versions: 10.16.0.0
> Reporter: Richard N. Hillegas
> Assignee: Richard N. Hillegas
> Priority: Major
> Attachments: DERBY_7126_A.java, DERBY_7126_B.java, dcl_emc2sm.jar,
> derby-7126-01-aa-regenerateSignedJars.diff,
> derby-7126-02-aa-suppressDeprecationWarnings.diff,
> derby-7126-03-aa-mention-java.security.manager.diff,
> derby-7126-04-aa-makeTestsRunOnJDK11andJDK18.diff
>
>
> Releases of Open JDK 18 can be found at https://jdk.java.net/178. We should
> adjust Derby as necessary so that it builds cleanly (including javadoc) and
> tests cleanly with this version of the platform.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)