ARTEMIS-4751 upgrade to Apache parent 32

Due to https://github.com/apache/maven-apache-parent/pull/188 the
property `maven.compiler.release` is now being set which precludes
exporting and using any internal Java classes. Therefore this commit
removed references to `--add-exports` from the build, switches to
reflection, and adds `--add-opens` to the runtime JVM parameters.
This commit is contained in:
Justin Bertram 2024-05-01 13:33:05 -05:00
parent e8f449973a
commit eac816f6bd
6 changed files with 39 additions and 53 deletions

View File

@ -16,6 +16,8 @@
*/ */
package org.apache.activemq.artemis.cli.commands.messages.perf; package org.apache.activemq.artemis.cli.commands.messages.perf;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class MicrosClock { public class MicrosClock {
@ -23,6 +25,8 @@ public class MicrosClock {
// no need for volatile here // no need for volatile here
private static long offset = -1; private static long offset = -1;
private static long NANOS_PER_SECOND = TimeUnit.SECONDS.toNanos(1); private static long NANOS_PER_SECOND = TimeUnit.SECONDS.toNanos(1);
private static Class vm;
private static Method getNanoTimeAdjustment;
private static final boolean AVAILABLE = checkAvailable(); private static final boolean AVAILABLE = checkAvailable();
@ -43,23 +47,32 @@ public class MicrosClock {
} }
public static long now() { public static long now() {
long epochSecond = offset; try {
long nanoAdjustment = jdk.internal.misc.VM.getNanoTimeAdjustment(epochSecond); long epochSecond = offset;
if (vm == null) {
if (nanoAdjustment == -1) { vm = Class.forName("jdk.internal.misc.VM");
epochSecond = System.currentTimeMillis() / 1000 - 1024;
nanoAdjustment = jdk.internal.misc.VM.getNanoTimeAdjustment(epochSecond);
if (nanoAdjustment == -1) {
throw new InternalError("Offset " + epochSecond + " is not in range");
} else {
offset = epochSecond;
} }
} if (getNanoTimeAdjustment == null) {
final long secs = Math.addExact(epochSecond, Math.floorDiv(nanoAdjustment, NANOS_PER_SECOND)); getNanoTimeAdjustment = vm.getMethod("getNanoTimeAdjustment", long.class);
final long secsInUs = TimeUnit.SECONDS.toMicros(secs); }
final long nsOffset = (int) Math.floorMod(nanoAdjustment, NANOS_PER_SECOND); long nanoAdjustment = (long) getNanoTimeAdjustment.invoke(getNanoTimeAdjustment, epochSecond);
final long usOffset = TimeUnit.NANOSECONDS.toMicros(nsOffset);
return secsInUs + usOffset;
}
} if (nanoAdjustment == -1) {
epochSecond = System.currentTimeMillis() / 1000 - 1024;
nanoAdjustment = (long) getNanoTimeAdjustment.invoke(getNanoTimeAdjustment, epochSecond);
if (nanoAdjustment == -1) {
throw new InternalError("Offset " + epochSecond + " is not in range");
} else {
offset = epochSecond;
}
}
final long secs = Math.addExact(epochSecond, Math.floorDiv(nanoAdjustment, NANOS_PER_SECOND));
final long secsInUs = TimeUnit.SECONDS.toMicros(secs);
final long nsOffset = (int) Math.floorMod(nanoAdjustment, NANOS_PER_SECOND);
final long usOffset = TimeUnit.NANOSECONDS.toMicros(nsOffset);
return secsInUs + usOffset;
} catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
}

View File

@ -37,7 +37,7 @@ HAWTIO_ROLE='${role}'
# Java Opts # Java Opts
if [ -z "$JAVA_ARGS" ]; then if [ -z "$JAVA_ARGS" ]; then
JAVA_ARGS="-XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512M -Xmx${java-memory} -Dhawtio.disableProxy=true -Dhawtio.realm=activemq -Dhawtio.offline=true -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.http.strictTransportSecurity=max-age=31536000;includeSubDomains;preload -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml -Dlog4j2.disableJmx=true ${java-opts}" JAVA_ARGS="-XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512M -Xmx${java-memory} -Dhawtio.disableProxy=true -Dhawtio.realm=activemq -Dhawtio.offline=true -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.http.strictTransportSecurity=max-age=31536000;includeSubDomains;preload -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml -Dlog4j2.disableJmx=true --add-opens java.base/jdk.internal.misc=ALL-UNNAMED ${java-opts}"
fi fi
# Uncomment to enable logging for Safepoint JVM pauses # Uncomment to enable logging for Safepoint JVM pauses

View File

@ -33,7 +33,7 @@ rem Cluster Properties: Used to pass arguments to ActiveMQ Artemis which can be
rem set ARTEMIS_CLUSTER_PROPS=-Dactivemq.remoting.default.port=61617 -Dactivemq.remoting.amqp.port=5673 -Dactivemq.remoting.stomp.port=61614 -Dactivemq.remoting.hornetq.port=5446 rem set ARTEMIS_CLUSTER_PROPS=-Dactivemq.remoting.default.port=61617 -Dactivemq.remoting.amqp.port=5673 -Dactivemq.remoting.stomp.port=61614 -Dactivemq.remoting.hornetq.port=5446
rem Java Opts rem Java Opts
IF "%JAVA_ARGS%"=="" (set JAVA_ARGS=${java-opts} -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512M -Xmx${java-memory} -Djava.security.auth.login.config=%ARTEMIS_ETC_DIR%\login.config -Dhawtio.disableProxy=true -Dhawtio.offline=true -Dhawtio.realm=activemq -Dhawtio.role=${role} -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.http.strictTransportSecurity=max-age=31536000;includeSubDomains;preload -Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%\jolokia-access.xml -Dartemis.instance=%ARTEMIS_INSTANCE% -Dlog4j2.disableJmx=true) IF "%JAVA_ARGS%"=="" (set JAVA_ARGS=${java-opts} -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512M -Xmx${java-memory} -Djava.security.auth.login.config=%ARTEMIS_ETC_DIR%\login.config -Dhawtio.disableProxy=true -Dhawtio.offline=true -Dhawtio.realm=activemq -Dhawtio.role=${role} -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.http.strictTransportSecurity=max-age=31536000;includeSubDomains;preload -Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%\jolokia-access.xml -Dartemis.instance=%ARTEMIS_INSTANCE% --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dlog4j2.disableJmx=true)
rem Logs Safepoints JVM pauses: Uncomment to enable them rem Logs Safepoints JVM pauses: Uncomment to enable them
rem In addition to the traditional GC logs you could enable some JVM flags to know any meaningful and "hidden" pause that could rem In addition to the traditional GC logs you could enable some JVM flags to know any meaningful and "hidden" pause that could

19
pom.xml
View File

@ -25,7 +25,7 @@
<parent> <parent>
<groupId>org.apache</groupId> <groupId>org.apache</groupId>
<artifactId>apache</artifactId> <artifactId>apache</artifactId>
<version>31</version> <version>32</version>
<relativePath>org.apache:apache</relativePath> <relativePath>org.apache:apache</relativePath>
</parent> </parent>
@ -119,9 +119,6 @@
<zookeeper.version>3.9.1</zookeeper.version> <zookeeper.version>3.9.1</zookeeper.version>
<woodstox.version>4.4.0</woodstox.version> <woodstox.version>4.4.0</woodstox.version>
<pem-keystore.version>2.3.0</pem-keystore.version> <pem-keystore.version>2.3.0</pem-keystore.version>
<!-- This overrides the Apache parent POM due to https://issues.apache.org/jira/browse/MSHADE-462. Once that issue
is resolved and a new Apache parent is released then we can get rid of this. -->
<version.maven-shade-plugin>3.4.1</version.maven-shade-plugin>
<!-- This overrides the Apache parent POM. Once a new Apache parent is released with the latest version then we <!-- This overrides the Apache parent POM. Once a new Apache parent is released with the latest version then we
can get rid of this. --> can get rid of this. -->
@ -340,8 +337,6 @@
<configuration> <configuration>
<compilerArgs> <compilerArgs>
<arg>-Xdiags:verbose</arg> <arg>-Xdiags:verbose</arg>
<arg>--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED</arg>
<arg>--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED</arg>
<arg>-XDcompilePolicy=simple</arg> <arg>-XDcompilePolicy=simple</arg>
<arg>-Xplugin:ErrorProne -Xep:ThreadLocalUsage:ERROR -Xep:MissingOverride:ERROR -Xep:NonAtomicVolatileUpdate:ERROR -Xep:SynchronizeOnNonFinalField:ERROR -Xep:StaticQualifiedUsingExpression:ERROR -Xep:WaitNotInLoop:ERROR -Xep:BanJNDI:OFF -XepExcludedPaths:.*/generated-sources/.*</arg> <arg>-Xplugin:ErrorProne -Xep:ThreadLocalUsage:ERROR -Xep:MissingOverride:ERROR -Xep:NonAtomicVolatileUpdate:ERROR -Xep:SynchronizeOnNonFinalField:ERROR -Xep:StaticQualifiedUsingExpression:ERROR -Xep:WaitNotInLoop:ERROR -Xep:BanJNDI:OFF -XepExcludedPaths:.*/generated-sources/.*</arg>
</compilerArgs> </compilerArgs>
@ -376,8 +371,6 @@
<fork>true</fork> <fork>true</fork>
<compilerArgs> <compilerArgs>
<arg>-Xdiags:verbose</arg> <arg>-Xdiags:verbose</arg>
<arg>--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED</arg>
<arg>--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED</arg>
<arg>-XDcompilePolicy=simple</arg> <arg>-XDcompilePolicy=simple</arg>
<arg>-Xplugin:ErrorProne -Xep:ThreadLocalUsage:ERROR -Xep:MissingOverride:WARN -Xep:NonAtomicVolatileUpdate:ERROR -Xep:SynchronizeOnNonFinalField:ERROR -Xep:StaticQualifiedUsingExpression:ERROR -Xep:WaitNotInLoop:ERROR -Xep:BanJNDI:OFF -XepExcludedPaths:.*/generated-sources/.*</arg> <arg>-Xplugin:ErrorProne -Xep:ThreadLocalUsage:ERROR -Xep:MissingOverride:WARN -Xep:NonAtomicVolatileUpdate:ERROR -Xep:SynchronizeOnNonFinalField:ERROR -Xep:StaticQualifiedUsingExpression:ERROR -Xep:WaitNotInLoop:ERROR -Xep:BanJNDI:OFF -XepExcludedPaths:.*/generated-sources/.*</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg> <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
@ -829,16 +822,6 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<showWarnings>true</showWarnings>
<compilerArgs>
<arg>--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-rar-plugin</artifactId> <artifactId>maven-rar-plugin</artifactId>

View File

@ -291,16 +291,6 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgs>
<arg>--add-exports=java.rmi/sun.rmi.server=ALL-UNNAMED</arg>
<arg>--add-exports=java.rmi/sun.rmi.transport=ALL-UNNAMED</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin> <plugin>
<groupId>org.apache.activemq</groupId> <groupId>org.apache.activemq</groupId>
<artifactId>artemis-maven-plugin</artifactId> <artifactId>artemis-maven-plugin</artifactId>

View File

@ -24,6 +24,7 @@ import javax.management.remote.rmi.RMIConnection;
import javax.management.remote.rmi.RMIConnector; import javax.management.remote.rmi.RMIConnector;
import java.io.File; import java.io.File;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.rmi.server.RemoteObject; import java.rmi.server.RemoteObject;
import java.rmi.server.RemoteRef; import java.rmi.server.RemoteRef;
@ -36,8 +37,6 @@ import org.junit.Assume;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import sun.rmi.server.UnicastRef;
import sun.rmi.transport.LiveRef;
/** /**
* This test checks JMX connection to Artemis with both necessary ports set up so that it's easier to tunnel through * This test checks JMX connection to Artemis with both necessary ports set up so that it's easier to tunnel through
@ -142,12 +141,13 @@ public class JmxConnectionTest extends SmokeTestBase {
remoteRefField = (RemoteRef) UnsafeAccess.UNSAFE.getObject(remoteRef, UnsafeAccess.UNSAFE.objectFieldOffset(refField)); remoteRefField = (RemoteRef) UnsafeAccess.UNSAFE.getObject(remoteRef, UnsafeAccess.UNSAFE.objectFieldOffset(refField));
} }
Assert.assertNotNull(remoteRefField); Assert.assertNotNull(remoteRefField);
Assert.assertTrue(remoteRefField instanceof UnicastRef); Assert.assertEquals("sun.rmi.server.UnicastRef2", remoteRefField.getClass().getTypeName());
// 5. UnicastRef::getLiveRef returns LiveRef // 5. UnicastRef::getLiveRef returns LiveRef
LiveRef liveRef = ((UnicastRef) remoteRefField).getLiveRef(); Method getLiveRef = remoteRefField.getClass().getMethod("getLiveRef");
Object liveRef = getLiveRef.invoke(remoteRefField);
Assert.assertEquals(RMI_REGISTRY_PORT, liveRef.getPort()); Assert.assertEquals(RMI_REGISTRY_PORT, liveRef.getClass().getMethod("getPort").invoke(liveRef));
} finally { } finally {
jmxConnector.close(); jmxConnector.close();