From 0880427b3f7fff3920c881d349bcb36cf4ea9003 Mon Sep 17 00:00:00 2001 From: Theresa Mammarella Date: Wed, 29 Jan 2025 17:01:27 -0500 Subject: [PATCH] JDK 24 remove java.security.AccessController.doPrivileged part 1 This pull requests is the first of two prs to remove the use of java.security.AccessController.doPrivileged in JDK 24. It also removes a few cases of System.getSystemProperty and SecurityException mentions that were previously missed. Signed-off-by: Theresa Mammarella --- .../share/classes/com/ibm/oti/util/Msg.java | 13 ++- .../classes/com/ibm/oti/util/PriviAction.java | 2 +- .../com/ibm/oti/util/RuntimePermissions.java | 2 +- .../com/ibm/oti/vm/BootstrapClassLoader.java | 2 - .../share/classes/java/lang/Access.java | 2 + .../share/classes/java/lang/Class.java | 81 ++++++++++++++----- .../classes/java/lang/J9VMInternals.java | 18 ++++- .../classes/java/lang/RuntimePermission.java | 2 +- .../share/classes/java/lang/System.java | 21 ++++- .../classes/java/lang/ref/Reference.java | 6 ++ .../internal/criu/InternalCRIUSupport.java | 18 ++++- .../tools/attach/target/Attachment.java | 8 ++ .../attach/target/DiagnosticProperties.java | 6 ++ .../tools/attach/target/FilelockTimer.java | 14 +++- .../internal/LoggingMXBeanImpl.java | 15 +++- .../management/internal/ThreadMXBeanImpl.java | 16 ++++ .../management/OperatingSystemMXBean.java | 6 ++ .../management/PlatformLoggingMXBean.java | 2 - .../java/lang/management/RuntimeMXBean.java | 24 ++++++ .../attach/attacher/OpenJ9AttachProvider.java | 6 ++ .../attach/attacher/OpenJ9VirtualMachine.java | 15 ++++ .../com/ibm/lang/management/MemoryMXBean.java | 12 +++ .../com/ibm/lang/management/ThreadMXBean.java | 24 +++++- .../internal/ExtendedMemoryMXBeanImpl.java | 12 ++- .../ExtendedOperatingSystemMXBeanImpl.java | 8 ++ .../internal/ExtendedThreadInfoImpl.java | 2 - .../internal/MemoryNotificationThread.java | 16 ++++ .../OperatingSystemNotificationThread.java | 6 ++ .../sun/management/internal/GcInfoUtil.java | 20 ++++- .../management/OpenJ9DiagnosticsMXBean.java | 16 ++++ .../internal/OpenJ9DiagnosticsMXBeanImpl.java | 11 ++- 31 files changed, 357 insertions(+), 49 deletions(-) diff --git a/jcl/src/java.base/share/classes/com/ibm/oti/util/Msg.java b/jcl/src/java.base/share/classes/com/ibm/oti/util/Msg.java index 979d59eb109..40efee78ef5 100644 --- a/jcl/src/java.base/share/classes/com/ibm/oti/util/Msg.java +++ b/jcl/src/java.base/share/classes/com/ibm/oti/util/Msg.java @@ -24,7 +24,9 @@ * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0 OR GPL-2.0-only WITH OpenJDK-assembly-exception-1.0 */ +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessController; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.*; import com.ibm.oti.vm.*; @@ -62,8 +64,17 @@ public class Msg { static { // Attempt to load the messages. + String resourceName = "com/ibm/oti/util/ExternalMessages"; //$NON-NLS-1$ + /*[IF JAVA_SPEC_VERSION >= 24]*/ + try { + messages = MsgHelp.loadMessages(resourceName); + } catch (java.io.IOException e) { + e.printStackTrace(); + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ messages = (Hashtable) AccessController.doPrivileged( - PriviAction.loadMessages("com/ibm/oti/util/ExternalMessages")); //$NON-NLS-1$ + PriviAction.loadMessages(resourceName)); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } /** diff --git a/jcl/src/java.base/share/classes/com/ibm/oti/util/PriviAction.java b/jcl/src/java.base/share/classes/com/ibm/oti/util/PriviAction.java index d27cc46b291..3bcfea6393e 100644 --- a/jcl/src/java.base/share/classes/com/ibm/oti/util/PriviAction.java +++ b/jcl/src/java.base/share/classes/com/ibm/oti/util/PriviAction.java @@ -1,4 +1,4 @@ -/*[INCLUDE-IF Sidecar16]*/ +/*[INCLUDE-IF Sidecar16 & (JAVA_SPEC_VERSION < 24)]*/ package com.ibm.oti.util; /* diff --git a/jcl/src/java.base/share/classes/com/ibm/oti/util/RuntimePermissions.java b/jcl/src/java.base/share/classes/com/ibm/oti/util/RuntimePermissions.java index 8f1a13c3ffd..3ffa774e02a 100644 --- a/jcl/src/java.base/share/classes/com/ibm/oti/util/RuntimePermissions.java +++ b/jcl/src/java.base/share/classes/com/ibm/oti/util/RuntimePermissions.java @@ -1,4 +1,4 @@ -/*[INCLUDE-IF Sidecar18-SE]*/ +/*[INCLUDE-IF Sidecar18-SE & (JAVA_SPEC_VERSION < 24)]*/ package com.ibm.oti.util; /* diff --git a/jcl/src/java.base/share/classes/com/ibm/oti/vm/BootstrapClassLoader.java b/jcl/src/java.base/share/classes/com/ibm/oti/vm/BootstrapClassLoader.java index 4384b5b3365..672f0538a25 100644 --- a/jcl/src/java.base/share/classes/com/ibm/oti/vm/BootstrapClassLoader.java +++ b/jcl/src/java.base/share/classes/com/ibm/oti/vm/BootstrapClassLoader.java @@ -24,8 +24,6 @@ import java.util.*; -import com.ibm.oti.util.PriviAction; - import java.io.FilePermission; import java.lang.reflect.Method; import java.security.AccessController; diff --git a/jcl/src/java.base/share/classes/java/lang/Access.java b/jcl/src/java.base/share/classes/java/lang/Access.java index aa9deed747d..10a6e1573c8 100644 --- a/jcl/src/java.base/share/classes/java/lang/Access.java +++ b/jcl/src/java.base/share/classes/java/lang/Access.java @@ -35,7 +35,9 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Executable; import java.lang.reflect.Method; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessControlContext; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.Map; import com.ibm.oti.reflect.AnnotationParser; diff --git a/jcl/src/java.base/share/classes/java/lang/Class.java b/jcl/src/java.base/share/classes/java/lang/Class.java index a5db1dae877..a8549ab60b8 100644 --- a/jcl/src/java.base/share/classes/java/lang/Class.java +++ b/jcl/src/java.base/share/classes/java/lang/Class.java @@ -23,9 +23,6 @@ package java.lang; import java.io.InputStream; -import java.security.AccessControlContext; -import java.security.ProtectionDomain; -import java.security.Permissions; /*[IF JAVA_SPEC_VERSION >= 12]*/ import java.lang.constant.ClassDesc; /*[ENDIF] JAVA_SPEC_VERSION >= 12*/ @@ -35,6 +32,15 @@ import java.lang.reflect.*; import java.net.URL; import java.lang.annotation.*; +/*[IF JAVA_SPEC_VERSION < 24]*/ +import java.security.AccessControlContext; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ +import java.security.Permissions; +import java.security.ProtectionDomain; import java.util.Collection; import java.util.HashMap; /*[IF JAVA_SPEC_VERSION >= 16]*/ @@ -49,9 +55,6 @@ /*[ENDIF] JAVA_SPEC_VERSION >= 12 */ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; -import java.security.AccessController; -import java.security.PrivilegedExceptionAction; -import java.security.PrivilegedAction; import java.lang.ref.*; /*[IF JAVA_SPEC_VERSION >= 12]*/ import java.lang.constant.ClassDesc; @@ -91,7 +94,6 @@ import java.lang.annotation.Repeatable; import java.lang.invoke.*; import com.ibm.oti.reflect.TypeAnnotationParser; -import java.security.PrivilegedActionException; import sun.security.util.SecurityConstants; /*[IF JAVA_SPEC_VERSION >= 18]*/ @@ -484,7 +486,15 @@ boolean casAnnotationType(AnnotationType oldType, AnnotationType newType) { AnnotationVars localAnnotationVars = getAnnotationVars(); long localTypeOffset = AnnotationVars.annotationTypeOffset; if (-1 == localTypeOffset) { - Field field = AccessController.doPrivileged(new PrivilegedAction() { + Field field = null; + /*[IF JAVA_SPEC_VERSION >= 24]*/ + try { + field = AnnotationVars.class.getDeclaredField("annotationType"); //$NON-NLS-1$ + } catch (Exception e) { + throw newInternalError(e); + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ + field = AccessController.doPrivileged(new PrivilegedAction() { public Field run() { try { return AnnotationVars.class.getDeclaredField("annotationType"); //$NON-NLS-1$ @@ -493,6 +503,7 @@ public Field run() { } } }); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ localTypeOffset = getUnsafe().objectFieldOffset(field); AnnotationVars.annotationTypeOffset = localTypeOffset; } @@ -509,7 +520,9 @@ public Field run() { * of a class as described in the class definition of * java.lang.Class, however Classes representing base * types can not be found using this method. +/*[IF JAVA_SPEC_VERSION < 24] * Security rules will be obeyed. +/*[ENDIF] JAVA_SPEC_VERSION < 24 * * @param className The name of the non-base type class to find * @param initializeBoolean A boolean indicating whether the class should be @@ -614,7 +627,9 @@ private static Class forNameHelper( * It does not invoke the class initializer. * Note that this method does not check whether the * requested class is accessible to its caller. +/*[IF JAVA_SPEC_VERSION < 24] * Security rules will be obeyed. +/*[ENDIF] JAVA_SPEC_VERSION < 24 * * @param module The name of the module * @param name The name of the non-base type class to find @@ -629,14 +644,15 @@ public static Class forName(Module module, String name) /*[IF JAVA_SPEC_VERSION >= 18]*/ return forNameHelper(module, name, null, false); /*[ELSE] JAVA_SPEC_VERSION >= 18 */ - @SuppressWarnings("removal") - SecurityManager sm = null; ClassLoader classLoader; Class c; if ((null == module) || (null == name)) { throw new NullPointerException(); } + /*[IF JAVA_SPEC_VERSION < 24]*/ + @SuppressWarnings("removal") + SecurityManager sm = null; if (J9VMInternals.initialized) { sm = System.getSecurityManager(); } @@ -651,7 +667,9 @@ public ClassLoader run() { return module.getClassLoader(); } }); - } else { + } else + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ + { classLoader = module.getClassLoader(); } @@ -694,7 +712,7 @@ private static Class forNameHelper(Module module, String name, Class calle if ((null == module) || (null == name)) { throw new NullPointerException(); } -/*[IF JAVA_SPEC_VERSION < 24]*/ + /*[IF JAVA_SPEC_VERSION < 24]*/ @SuppressWarnings("removal") SecurityManager sm = null; if (J9VMInternals.initialized) { @@ -714,7 +732,7 @@ public ClassLoader run() { } }); } else -/*[ENDIF] JAVA_SPEC_VERSION < 24 */ + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ { classLoader = module.getClassLoader(); } @@ -840,7 +858,9 @@ public ClassLoader getClassLoader() { /** * Returns the classloader used to load the receiver's class. * Returns null if the class was loaded by the bootstrap (system) class loader. +/*[IF JAVA_SPEC_VERSION < 24] * This skips security checks. +/*[ENDIF] JAVA_SPEC_VERSION < 24 * @return the receiver's class loader or null * @see java.lang.ClassLoader */ @@ -1848,7 +1868,9 @@ private Method throwExceptionOrReturnNull(boolean throwException, String name, C * public Method getMethod(String name, Class... parameterTypes) * List getDeclaredPublicMethods(String name, Class... parameterTypes) * Method findMethod(boolean publicOnly, String methodName, Class... parameterTypes) +/*[IF JAVA_SPEC_VERSION < 24] * without going thorough security checking +/*[ENDIF] JAVA_SPEC_VERSION < 24 * * @param throwException boolean * true - throw exception in this helper; @@ -2428,8 +2450,10 @@ public String getName() { * Note: In order to conserve space in embedded targets, we allow this * method to answer null for classes in the system protection domain * (i.e. for system classes). System classes are always given full - * permissions (i.e. AllPermission). This is not changeable via the - * java.security.Policy. + * permissions (i.e. AllPermission). +/*[IF JAVA_SPEC_VERSION < 24] + * This is not changeable via the java.security.Policy. +/*[ENDIF] JAVA_SPEC_VERSION < 24 * * @return ProtectionDomain * the receiver's ProtectionDomain. @@ -3573,9 +3597,12 @@ private MethodHandle getValueMethod(final Class containedT MethodHandle valueMethod = localAnnotationVars.valueMethod; if (valueMethod == null) { final MethodType methodType = MethodType.methodType(Array.newInstance(containedType, 0).getClass()); + /*[IF JAVA_SPEC_VERSION < 24]*/ valueMethod = AccessController.doPrivileged(new PrivilegedAction() { @Override public MethodHandle run() { + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ + MethodHandle handle = null; try { MethodHandles.Lookup localImplLookup = implLookup; if (localImplLookup == null) { @@ -3592,7 +3619,7 @@ public MethodHandle run() { getUnsafe().putOrderedObject(Class.class, implLookupOffset, localImplLookup); /*[ENDIF] JAVA_SPEC_VERSION >= 9 */ } - MethodHandle handle = localImplLookup.findVirtual(Class.this, "value", methodType); //$NON-NLS-1$ + handle = localImplLookup.findVirtual(Class.this, "value", methodType); //$NON-NLS-1$ if (AnnotationVars.valueMethodOffset == -1) { Field valueMethodField = AnnotationVars.class.getDeclaredField("valueMethod"); //$NON-NLS-1$ AnnotationVars.valueMethodOffset = getUnsafe().objectFieldOffset(valueMethodField); @@ -3604,14 +3631,18 @@ public MethodHandle run() { /*[ELSE] JAVA_SPEC_VERSION >= 9 */ getUnsafe().putOrderedObject(localAnnotationVars, AnnotationVars.valueMethodOffset, handle); /*[ENDIF] JAVA_SPEC_VERSION >= 9 */ - return handle; } catch (NoSuchMethodException e) { - return null; + handle = null; } catch (IllegalAccessException | NoSuchFieldException e) { throw newInternalError(e); } + /*[IF JAVA_SPEC_VERSION >= 24]*/ + valueMethod = handle; + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ + return handle; } }); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } return valueMethod; } @@ -3981,6 +4012,10 @@ T[] getEnumConstantsShared() { T[] enums = localEnumVars.cachedEnumConstants; if (null == enums && isEnum()) { try { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + Method values = getMethod("values"); //$NON-NLS-1$ + values.setAccessible(true); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ final PrivilegedExceptionAction privilegedAction = new PrivilegedExceptionAction() { @Override public Method run() throws Exception { @@ -3993,6 +4028,7 @@ public Method run() throws Exception { }; Method values = AccessController.doPrivileged(privilegedAction); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ Object rawEnums = values.invoke(this); if ((rawEnums == null) || !rawEnums.getClass().isArray()) { return null; @@ -4016,7 +4052,14 @@ public Method run() throws Exception { /*[ELSE] JAVA_SPEC_VERSION >= 9 */ getUnsafe().putOrderedObject(localEnumVars, localEnumConstantsOffset, enums); /*[ENDIF] JAVA_SPEC_VERSION >= 9 */ - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | PrivilegedActionException e) { + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException + /*[IF JAVA_SPEC_VERSION >= 24]*/ + | NoSuchMethodException + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ + | PrivilegedActionException + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ + e + ) { enums = null; } } diff --git a/jcl/src/java.base/share/classes/java/lang/J9VMInternals.java b/jcl/src/java.base/share/classes/java/lang/J9VMInternals.java index 116ecbe62ad..6844a05944b 100644 --- a/jcl/src/java.base/share/classes/java/lang/J9VMInternals.java +++ b/jcl/src/java.base/share/classes/java/lang/J9VMInternals.java @@ -25,16 +25,18 @@ import com.ibm.oti.vm.J9UnmodifiableClass; import java.lang.ref.SoftReference; import java.lang.reflect.*; +/*[IF JAVA_SPEC_VERSION < 24]*/ +import java.security.AccessControlContext; import java.security.AccessController; import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ +import java.security.CodeSource; +import java.security.ProtectionDomain; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Properties; import java.util.WeakHashMap; -import java.security.AccessControlContext; -import java.security.CodeSource; -import java.security.ProtectionDomain; import java.io.FileDescriptor; import java.io.InputStream; import java.io.OutputStream; @@ -271,8 +273,10 @@ private static void ensureError(Throwable err) { private static native Throwable newInstance(Class exceptionClass, Class constructorClass); private static Throwable cloneThrowable(final Throwable throwable, final HashMap hashMapThrowable) { + /*[IF JAVA_SPEC_VERSION < 24]*/ return (Throwable)AccessController.doPrivileged(new PrivilegedAction() { public Object run() { + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ Throwable clone; try { Class cls = throwable.getClass(); @@ -305,8 +309,10 @@ public Object run() { clone = new Throwable(Msg.getString("K05c3", e, throwable.toString())); //$NON-NLS-1$ } return clone; + /*[IF JAVA_SPEC_VERSION < 24]*/ } }); + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ } /** @@ -612,9 +618,11 @@ private static String[] getClassInfoStrings(final Class clazz, String classPa ClassLoader classLoader = clazz.getClassLoader(); if (classLoader != null) { classLoaderStr = classLoader.toString(); + /*[IF JAVA_SPEC_VERSION < 24]*/ classPath = AccessController.doPrivileged(new PrivilegedAction() { @Override public String run() { + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ String path = null; try { ProtectionDomain pd = clazz.getProtectionDomain(); @@ -629,9 +637,13 @@ public String run() { } } catch (Exception e) { } + /*[IF JAVA_SPEC_VERSION >= 24]*/ + classPath = path; + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ return path; } }); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } } if (classPath != null) { diff --git a/jcl/src/java.base/share/classes/java/lang/RuntimePermission.java b/jcl/src/java.base/share/classes/java/lang/RuntimePermission.java index 4ec32647d2c..048766a16b0 100644 --- a/jcl/src/java.base/share/classes/java/lang/RuntimePermission.java +++ b/jcl/src/java.base/share/classes/java/lang/RuntimePermission.java @@ -1,4 +1,4 @@ -/*[INCLUDE-IF Sidecar16]*/ +/*[INCLUDE-IF Sidecar16 & (JAVA_SPEC_VERSION < 24)]*/ package java.lang; /* diff --git a/jcl/src/java.base/share/classes/java/lang/System.java b/jcl/src/java.base/share/classes/java/lang/System.java index 62db16ec11b..2a140274b0c 100644 --- a/jcl/src/java.base/share/classes/java/lang/System.java +++ b/jcl/src/java.base/share/classes/java/lang/System.java @@ -561,24 +561,33 @@ static void initGPUAssist() { return; } + /*[IF JAVA_SPEC_VERSION < 24]*/ PrivilegedAction finder = new PrivilegedAction() { @Override public GPUAssist run() { + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ ServiceLoader loaded = ServiceLoader.load(GPUAssist.Provider.class); - + GPUAssist assist = null; for (GPUAssist.Provider provider : loaded) { - GPUAssist assist = provider.getGPUAssist(); + assist = provider.getGPUAssist(); if (assist != null) { - return assist; + break; } } - return GPUAssist.NONE; + if (null == assist) { + assist = GPUAssist.NONE; + } + /*[IF JAVA_SPEC_VERSION >= 24]*/ + GPUAssistHolder.instance = assist; + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ + return assist; } }; GPUAssistHolder.instance = AccessController.doPrivileged(finder); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } /*[ENDIF] JAVA_SPEC_VERSION >= 9 */ @@ -1991,10 +2000,14 @@ public static LoggerFinder getLoggerFinder() { /*[ENDIF] JAVA_SPEC_VERSION < 24 */ LoggerFinder localFinder = loggerFinder; if (localFinder == null) { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + localFinder = jdk.internal.logger.LoggerFinderLoader.getLoggerFinder(); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ localFinder = AccessController.doPrivileged( (PrivilegedAction) () -> jdk.internal.logger.LoggerFinderLoader.getLoggerFinder(), AccessController.getContext(), com.ibm.oti.util.RuntimePermissions.permissionLoggerFinder); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ /*[IF JAVA_SPEC_VERSION >= 11]*/ if (localFinder instanceof jdk.internal.logger.LoggerFinderLoader.TemporaryLoggerFinder) { return localFinder; diff --git a/jcl/src/java.base/share/classes/java/lang/ref/Reference.java b/jcl/src/java.base/share/classes/java/lang/ref/Reference.java index ce751f3d1b0..f6c4d9b01a7 100644 --- a/jcl/src/java.base/share/classes/java/lang/ref/Reference.java +++ b/jcl/src/java.base/share/classes/java/lang/ref/Reference.java @@ -22,8 +22,10 @@ */ package java.lang.ref; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessController; import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ /*[IF JAVA_SPEC_VERSION >= 12]*/ import jdk.internal.access.JavaLangRefAccess; @@ -65,11 +67,15 @@ public abstract sealed class Reference extends Object permits PhantomReferenc */ static class ClearBeforeEnqueue { @SuppressWarnings("boxing") + /*[IF JAVA_SPEC_VERSION >= 24]*/ + static final boolean ENABLED = !Boolean.getBoolean("jdk.lang.ref.disableClearBeforeEnqueue"); //$NON-NLS-1$ + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ static final boolean ENABLED = AccessController.doPrivileged(new PrivilegedAction() { @Override public Boolean run() { return !Boolean.getBoolean("jdk.lang.ref.disableClearBeforeEnqueue"); //$NON-NLS-1$ } }); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } /*[IF Sidecar18-SE-OpenJ9 | (JAVA_SPEC_VERSION >= 9)]*/ diff --git a/jcl/src/java.base/share/classes/openj9/internal/criu/InternalCRIUSupport.java b/jcl/src/java.base/share/classes/openj9/internal/criu/InternalCRIUSupport.java index 81681533322..7d7035d9fce 100644 --- a/jcl/src/java.base/share/classes/openj9/internal/criu/InternalCRIUSupport.java +++ b/jcl/src/java.base/share/classes/openj9/internal/criu/InternalCRIUSupport.java @@ -33,8 +33,10 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessController; import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -240,7 +242,9 @@ private static native void checkpointJVMImpl(String imageDir, private static native String[] getRestoreSystemProperites(); private static void initializeUnsafe() { + /*[IF JAVA_SPEC_VERSION < 24]*/ AccessController.doPrivileged((PrivilegedAction) () -> { + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ try { Field f = Unsafe.class.getDeclaredField("theUnsafe"); //$NON-NLS-1$ f.setAccessible(true); @@ -249,8 +253,10 @@ private static void initializeUnsafe() { | IllegalAccessException e) { throw new InternalError(e); } + /*[IF JAVA_SPEC_VERSION < 24]*/ return null; }); + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ } /** @@ -940,7 +946,16 @@ private static void setRestoreJavaProperties() { } private static void clearInetAddressCache() { - Field jniaa = AccessController.doPrivileged((PrivilegedAction) () -> { + Field jniaa = null; + /*[IF JAVA_SPEC_VERSION >= 24]*/ + try { + jniaa = SharedSecrets.class.getDeclaredField("javaNetInetAddressAccess"); //$NON-NLS-1$ + jniaa.setAccessible(true); + } catch (NoSuchFieldException | SecurityException e) { + // ignore exceptions + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ + jniaa = AccessController.doPrivileged((PrivilegedAction) () -> { Field jniaaTmp = null; try { jniaaTmp = SharedSecrets.class.getDeclaredField("javaNetInetAddressAccess"); //$NON-NLS-1$ @@ -950,6 +965,7 @@ private static void clearInetAddressCache() { } return jniaaTmp; }); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ try { if ((jniaa != null) && (jniaa.get(null) != null)) { // InetAddress static initializer invokes SharedSecrets.setJavaNetInetAddressAccess(). diff --git a/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/Attachment.java b/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/Attachment.java index 26f7f523ca2..e5dd300551f 100644 --- a/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/Attachment.java +++ b/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/Attachment.java @@ -33,8 +33,10 @@ import java.lang.reflect.Method; import java.net.InetAddress; import java.net.Socket; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessController; import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.Objects; import java.util.Properties; import java.util.ServiceLoader; @@ -75,7 +77,9 @@ private static final class MethodRefsHolder { static Method startRemoteManagementAgentMethod = null; static final Throwable managementAgentMethodThrowable; static { + /*[IF JAVA_SPEC_VERSION < 24]*/ managementAgentMethodThrowable = AccessController.doPrivileged((PrivilegedAction) () -> { + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ String agentClassName = /*[IF JAVA_SPEC_VERSION >= 9]*/ "jdk.internal.agent.Agent"; //$NON-NLS-1$ @@ -117,8 +121,12 @@ private static final class MethodRefsHolder { IPC.logMessage("Error loading " + agentClassName, e); //$NON-NLS-1$ mamtTemp = e; } + /*[IF JAVA_SPEC_VERSION >= 24]*/ + managementAgentMethodThrowable = mamtTemp; + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ return mamtTemp; }); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } } diff --git a/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/DiagnosticProperties.java b/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/DiagnosticProperties.java index b0228eb87eb..42f8df383f2 100644 --- a/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/DiagnosticProperties.java +++ b/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/DiagnosticProperties.java @@ -25,8 +25,10 @@ import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessController; import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.Comparator; import java.util.Properties; @@ -60,10 +62,14 @@ public class DiagnosticProperties { public static boolean isDebug; static { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + isDebug = Boolean.getBoolean(DEBUG_PROPERTY); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ AccessController.doPrivileged((PrivilegedAction) () -> { isDebug = Boolean.getBoolean(DEBUG_PROPERTY); return null; }); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } /** diff --git a/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/FilelockTimer.java b/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/FilelockTimer.java index eeec3e08a8c..3dbebb796c2 100644 --- a/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/FilelockTimer.java +++ b/jcl/src/java.base/share/classes/openj9/internal/tools/attach/target/FilelockTimer.java @@ -24,8 +24,10 @@ */ import java.lang.reflect.Field; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessController; import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.Timer; /** @@ -42,7 +44,16 @@ final class FilelockTimer extends Timer { */ FilelockTimer(String name) { super(name, true); - + /*[IF JAVA_SPEC_VERSION >= 24]*/ + try { + /*[PR CMVC 194420, 195081 Java 7&8 use the RI Timer implementation which calls the thread object "thread"]*/ + String timerThreadFieldName = "thread"; //$NON-NLS-1$ + timerThreadField = Timer.class.getDeclaredField(timerThreadFieldName); + timerThreadField.setAccessible(true); + } catch (Exception e) { + IPC.logMessage("FilelockTimer: get field exception "+e.getClass().getName()+":"+e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ timerThreadField = AccessController.doPrivileged(new PrivilegedAction() { @Override public Field run() { @@ -58,6 +69,7 @@ public Field run() { return null; } }); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } @Override diff --git a/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/LoggingMXBeanImpl.java b/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/LoggingMXBeanImpl.java index 18b2e0b5922..44856cd3281 100644 --- a/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/LoggingMXBeanImpl.java +++ b/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/LoggingMXBeanImpl.java @@ -30,8 +30,10 @@ import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessController; import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.Optional; /*[ELSE] JAVA_SPEC_VERSION >= 9 */ import java.util.logging.LoggingMXBean; @@ -59,9 +61,9 @@ public final class LoggingMXBeanImpl private static final LoggingMXBeanImpl instance = createInstance(); - /*[IF JAVA_SPEC_VERSION >= 17]*/ + /*[IF (JAVA_SPEC_VERSION >= 17) & (JAVA_SPEC_VERSION < 24)]*/ @SuppressWarnings("removal") - /*[ENDIF] JAVA_SPEC_VERSION >= 17 */ + /*[ENDIF] (JAVA_SPEC_VERSION >= 17) & (JAVA_SPEC_VERSION < 24) */ private static LoggingMXBeanImpl createInstance() { /*[IF JAVA_SPEC_VERSION >= 9]*/ final Optional java_logging = ModuleLayer.boot().findModule("java.logging"); //$NON-NLS-1$ @@ -69,7 +71,13 @@ private static LoggingMXBeanImpl createInstance() { if (!java_logging.isPresent()) { return null; } - + /*[IF JAVA_SPEC_VERSION >= 24]*/ + try { + return new LoggingMXBeanImpl(java_logging.get()); + } catch (Exception e) { + throw handleError(e); + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ PrivilegedAction action = new PrivilegedAction() { @Override public LoggingMXBeanImpl run() { @@ -82,6 +90,7 @@ public LoggingMXBeanImpl run() { }; return AccessController.doPrivileged(action); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ /*[ELSE] JAVA_SPEC_VERSION >= 9 */ return new LoggingMXBeanImpl(); /*[ENDIF] JAVA_SPEC_VERSION >= 9 */ diff --git a/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/ThreadMXBeanImpl.java b/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/ThreadMXBeanImpl.java index 53843acfe71..c261d56be59 100644 --- a/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/ThreadMXBeanImpl.java +++ b/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/ThreadMXBeanImpl.java @@ -28,8 +28,10 @@ import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; import java.lang.reflect.Constructor; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessController; import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.Arrays; import javax.management.ObjectName; @@ -296,10 +298,16 @@ public ThreadInfo[] getThreadInfo(long[] ids, int maxDepth) { * @return ThreadInfo array whose elements wrap the elements of infoBases */ private static ThreadInfo[] makeThreadInfos(ThreadInfoBase[] infoBases) { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + return Arrays.stream(infoBases) + .map(ThreadMXBeanImpl::makeThreadInfo) + .toArray(ThreadInfo[]::new); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ PrivilegedAction action = () -> Arrays.stream(infoBases) .map(ThreadMXBeanImpl::makeThreadInfo) .toArray(ThreadInfo[]::new); return AccessController.doPrivileged(action); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } /** @@ -395,8 +403,12 @@ public ThreadInfo getThreadInfo(long id, int maxDepth) { /*[MSG "K05F8", "maxDepth value cannot be negative."]*/ throw new IllegalArgumentException(com.ibm.oti.util.Msg.getString("K05F8")); //$NON-NLS-1$ } + /*[IF JAVA_SPEC_VERSION >= 24]*/ + return makeThreadInfo(getThreadInfoImpl(id, maxDepth)); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ PrivilegedAction action = () -> makeThreadInfo(getThreadInfoImpl(id, maxDepth)); return AccessController.doPrivileged(action); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } /** @@ -834,9 +846,11 @@ public ObjectName getObjectName() { } private static MethodHandle getThreadInfoConstructorHandle() { + /*[IF JAVA_SPEC_VERSION < 24]*/ return AccessController.doPrivileged(new PrivilegedAction() { @Override public MethodHandle run() { + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ MethodHandle myHandle = null; try { Constructor threadInfoConstructor = ThreadInfo.class @@ -848,8 +862,10 @@ public MethodHandle run() { throw new RuntimeException(com.ibm.oti.util.Msg.getString("K0617"), e); //$NON-NLS-1$ } return myHandle; + /*[IF JAVA_SPEC_VERSION < 24]*/ } }); + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ } /** diff --git a/jcl/src/java.management/share/classes/java/lang/management/OperatingSystemMXBean.java b/jcl/src/java.management/share/classes/java/lang/management/OperatingSystemMXBean.java index 00c22458142..d358ebf97b3 100644 --- a/jcl/src/java.management/share/classes/java/lang/management/OperatingSystemMXBean.java +++ b/jcl/src/java.management/share/classes/java/lang/management/OperatingSystemMXBean.java @@ -52,9 +52,11 @@ public interface OperatingSystemMXBean extends PlatformManagedObject { * supplying the value "os.arch" for the key. * * @return the identifier for the operating system architecture. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @see System#getProperty(java.lang.String) */ public String getArch(); @@ -76,9 +78,11 @@ public interface OperatingSystemMXBean extends PlatformManagedObject { * "os.name" for the key. * * @return the name of the operating system. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @see System#getProperty(java.lang.String) */ public String getName(); @@ -90,9 +94,11 @@ public interface OperatingSystemMXBean extends PlatformManagedObject { * "os.version" for the key. * * @return the version of the operating system. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @see System#getProperty(java.lang.String) */ public String getVersion(); diff --git a/jcl/src/java.management/share/classes/java/lang/management/PlatformLoggingMXBean.java b/jcl/src/java.management/share/classes/java/lang/management/PlatformLoggingMXBean.java index e149fef5518..c1cb70184de 100644 --- a/jcl/src/java.management/share/classes/java/lang/management/PlatformLoggingMXBean.java +++ b/jcl/src/java.management/share/classes/java/lang/management/PlatformLoggingMXBean.java @@ -121,8 +121,6 @@ public interface PlatformLoggingMXBean extends PlatformManagedObject{ * @throws IllegalArgumentException if there is no Logger * with the name loggerName. Also may be thrown if * loggerName is not a known log level name. - * @throws SecurityException if there is a security manager active and - * the caller does not have /*[IF JAVA_SPEC_VERSION >= 17] * {@link java.logging/java.util.logging.LoggingPermission} /*[ELSE] JAVA_SPEC_VERSION >= 17 diff --git a/jcl/src/java.management/share/classes/java/lang/management/RuntimeMXBean.java b/jcl/src/java.management/share/classes/java/lang/management/RuntimeMXBean.java index 58d8af2803d..46e2d51efde 100644 --- a/jcl/src/java.management/share/classes/java/lang/management/RuntimeMXBean.java +++ b/jcl/src/java.management/share/classes/java/lang/management/RuntimeMXBean.java @@ -22,8 +22,10 @@ */ package java.lang.management; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessController; import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.List; import java.util.Map; @@ -84,9 +86,11 @@ public interface RuntimeMXBean extends PlatformManagedObject { * @return the system classpath with each entry separated by the path * separator character corresponding to the underlying operating * system. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @see System#getProperty(java.lang.String) */ public String getClassPath(); @@ -112,9 +116,11 @@ public interface RuntimeMXBean extends PlatformManagedObject { * @return the Java library path with each entry separated by the path * separator character corresponding to the underlying operating * system. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @see System#getProperty(java.lang.String) */ public String getLibraryPath(); @@ -146,11 +152,15 @@ public interface RuntimeMXBean extends PlatformManagedObject { */ @SuppressWarnings("boxing") default long getPid() { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + return ProcessHandle.current().pid(); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ return AccessController.doPrivileged(new PrivilegedAction() { public Long run() { return ProcessHandle.current().pid(); } }); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } /*[ENDIF] JAVA_SPEC_VERSION >= 10 */ @@ -161,9 +171,11 @@ public Long run() { * supplying the value "java.vm.specification.name" for the key. * * @return the name of the Java virtual machine specification. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @see System#getProperty(java.lang.String) */ public String getSpecName(); @@ -175,9 +187,11 @@ public Long run() { * "java.vm.specification.vendor" for the key. * * @return the name of the Java virtual machine specification vendor. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @see System#getProperty(java.lang.String) */ public String getSpecVendor(); @@ -189,9 +203,11 @@ public Long run() { * "java.vm.specification.version" for the key. * * @return the Java virtual machine specification version. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @see System#getProperty(java.lang.String) */ public String getSpecVersion(); @@ -208,9 +224,11 @@ public Long run() { * the virtual machine. * * @return a map containing the names and values of every system property. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public Map getSystemProperties(); @@ -228,9 +246,11 @@ public Long run() { * "java.vm.name" for the key. * * @return the name of the Java virtual machine implementation. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @see System#getProperty(java.lang.String) */ public String getVmName(); @@ -242,9 +262,11 @@ public Long run() { * "java.vm.vendor" for the key. * * @return the name of the Java virtual machine implementation vendor. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @see System#getProperty(java.lang.String) */ public String getVmVendor(); @@ -256,9 +278,11 @@ public Long run() { * "java.vm.version" for the key. * * @return the version of the Java virtual machine implementation. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if there is a security manager in operation and the caller * does not have permission to check system properties. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @see System#getProperty(java.lang.String) */ public String getVmVersion(); diff --git a/jcl/src/jdk.attach/share/classes/com/ibm/tools/attach/attacher/OpenJ9AttachProvider.java b/jcl/src/jdk.attach/share/classes/com/ibm/tools/attach/attacher/OpenJ9AttachProvider.java index 7cd27a612ee..cc4b85072fd 100644 --- a/jcl/src/jdk.attach/share/classes/com/ibm/tools/attach/attacher/OpenJ9AttachProvider.java +++ b/jcl/src/jdk.attach/share/classes/com/ibm/tools/attach/attacher/OpenJ9AttachProvider.java @@ -24,10 +24,12 @@ import java.io.File; import java.io.IOException; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessController; import java.security.PrivilegedAction; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.ArrayList; import java.util.List; @@ -101,6 +103,9 @@ public OpenJ9VirtualMachine attachVirtualMachine ( @Override public List listVirtualMachines() { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + return listVirtualMachinesImp(); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ List ret = null; PrivilegedExceptionAction> action = () -> listVirtualMachinesImp(); try { @@ -116,6 +121,7 @@ public List listVirtualMachines() { } } return ret; + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } private List listVirtualMachinesImp() { diff --git a/jcl/src/jdk.attach/share/classes/com/ibm/tools/attach/attacher/OpenJ9VirtualMachine.java b/jcl/src/jdk.attach/share/classes/com/ibm/tools/attach/attacher/OpenJ9VirtualMachine.java index e6d1ddefbe0..99e85c59d29 100644 --- a/jcl/src/jdk.attach/share/classes/com/ibm/tools/attach/attacher/OpenJ9VirtualMachine.java +++ b/jcl/src/jdk.attach/share/classes/com/ibm/tools/attach/attacher/OpenJ9VirtualMachine.java @@ -33,10 +33,12 @@ import java.net.Socket; import java.net.SocketTimeoutException; import java.nio.charset.StandardCharsets; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessController; import java.security.PrivilegedAction; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.List; import java.util.Properties; import java.util.regex.Matcher; @@ -96,12 +98,17 @@ public final class OpenJ9VirtualMachine extends VirtualMachine implements Respon private Socket targetSocket; static { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + MAXIMUM_ATTACH_TIMEOUT = Integer.getInteger("com.ibm.tools.attach.timeout", DEFAULT_ATTACH_TIMEOUT).intValue(); //$NON-NLS-1$ + COMMAND_TIMEOUT = Integer.getInteger("com.ibm.tools.attach.command_timeout", DEFAULT_COMMAND_TIMEOUT).intValue(); //$NON-NLS-1$ + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ PrivilegedAction action = () -> { MAXIMUM_ATTACH_TIMEOUT = Integer.getInteger("com.ibm.tools.attach.timeout", DEFAULT_ATTACH_TIMEOUT).intValue(); //$NON-NLS-1$ COMMAND_TIMEOUT = Integer.getInteger("com.ibm.tools.attach.command_timeout", DEFAULT_COMMAND_TIMEOUT).intValue(); //$NON-NLS-1$ return null; }; AccessController.doPrivileged(action); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } /** @@ -129,6 +136,9 @@ public final class OpenJ9VirtualMachine extends VirtualMachine implements Respon * if the descriptor is null the target does not respond. */ void attachTarget() throws IOException, AttachNotSupportedException { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + attachTargetImpl(); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ PrivilegedExceptionAction action = () -> {attachTargetImpl(); return null;}; try { AccessController.doPrivileged(action); @@ -146,6 +156,7 @@ void attachTarget() throws IOException, AttachNotSupportedException { throw new RuntimeException(cause); } } + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } private void attachTargetImpl() throws AttachNotSupportedException, IOException { @@ -624,6 +635,9 @@ public String startLocalManagementAgent() throws IOException { * @return byte stream containing the UTF-8 text of the formatted output */ public InputStream heapHisto(Object... opts) { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + return heapHistoImpl(opts); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ InputStream ret = null; PrivilegedExceptionAction action = () -> heapHistoImpl(opts); try { @@ -639,6 +653,7 @@ public InputStream heapHisto(Object... opts) { } } return ret; + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } private InputStream heapHistoImpl(Object... opts) { diff --git a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/MemoryMXBean.java b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/MemoryMXBean.java index bc28ffbe841..5cadcd90d42 100644 --- a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/MemoryMXBean.java +++ b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/MemoryMXBean.java @@ -67,10 +67,12 @@ public interface MemoryMXBean extends java.lang.management.MemoryMXBean { * @throws IllegalArgumentException * if input value size is either less than * getMinHeapSize() or greater than getMaxHeapSizeLimit(). + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if a {@link SecurityManager} is being used and the caller * does not have the ManagementPermission value * of "control". + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public void setMaxHeapSize( long size ); @@ -140,10 +142,12 @@ public interface MemoryMXBean extends java.lang.management.MemoryMXBean { * @return whether the requested operation has been completed. * @throws IllegalArgumentException * if input value value is less than 0. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if a {@link SecurityManager} is being used and the caller * does not have the ManagementPermission value * of "control". + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public boolean setSharedClassCacheSoftmxBytes(long value); @@ -156,10 +160,12 @@ public interface MemoryMXBean extends java.lang.management.MemoryMXBean { * @return whether the requested operation has been completed. * @throws IllegalArgumentException * if input value value is less than 0. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if a {@link SecurityManager} is being used and the caller * does not have the ManagementPermission value * of "control". + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public boolean setSharedClassCacheMinAotBytes(long value); @@ -172,10 +178,12 @@ public interface MemoryMXBean extends java.lang.management.MemoryMXBean { * @return whether the requested operation has been completed. * @throws IllegalArgumentException * if input value value is less than 0. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if a {@link SecurityManager} is being used and the caller * does not have the ManagementPermission value * of "control". + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public boolean setSharedClassCacheMaxAotBytes(long value); @@ -188,10 +196,12 @@ public interface MemoryMXBean extends java.lang.management.MemoryMXBean { * @return whether the requested operation has been completed. * @throws IllegalArgumentException * if input value value is less than 0. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if a {@link SecurityManager} is being used and the caller * does not have the ManagementPermission value * of "control". + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public boolean setSharedClassCacheMinJitDataBytes(long value); @@ -204,10 +214,12 @@ public interface MemoryMXBean extends java.lang.management.MemoryMXBean { * @return whether the requested operation has been completed. * @throws IllegalArgumentException * if input value value is less than 0. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * if a {@link SecurityManager} is being used and the caller * does not have the ManagementPermission value * of "control". + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public boolean setSharedClassCacheMaxJitDataBytes(long value); diff --git a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/ThreadMXBean.java b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/ThreadMXBean.java index 7aef90f3938..442bcc4b4a1 100644 --- a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/ThreadMXBean.java +++ b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/ThreadMXBean.java @@ -39,11 +39,17 @@ public interface ThreadMXBean extends com.sun.management.ThreadMXBean * given set of IDs is no longer alive or does not exist, a -1 is set in the corresponding * element of the returned array. * @throws IllegalArgumentException is thrown if any of the thread identifiers passed is invalid (<=0). + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException is thrown if the caller does not have sufficient permissions * (ManagementPermission("monitor")) + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ public long[] getNativeThreadIds(long[] threadIDs) - throws IllegalArgumentException, SecurityException; + throws IllegalArgumentException + /*[IF JAVA_SPEC_VERSION < 24]*/ + , SecurityException + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ + ; /** * Find the native (operating system assigned) thread identifiers corresponding @@ -53,11 +59,17 @@ public long[] getNativeThreadIds(long[] threadIDs) * @return Operating system assigned native thread identifier. If the thread corresponding to the * ID is no longer alive or does not exist, -1 is returned. * @throws IllegalArgumentException is thrown if the thread identifier passed is invalid (<=0). + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException is thrown if the caller does not have sufficient permissions * (ManagementPermission("monitor")) + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ public long getNativeThreadId(long threadId) - throws IllegalArgumentException, SecurityException; + throws IllegalArgumentException + /*[IF JAVA_SPEC_VERSION < 24]*/ + , SecurityException + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ + ; /** * API method that fetches an array of ExtendedThreadInfo objects corresponding to @@ -75,13 +87,19 @@ public long getNativeThreadId(long threadId) * currently locked ownable synchronizers is to be included in * the returned array * @return Array of ExtendedThreadInfo objects. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException is thrown if the caller does not have sufficient permissions * (ManagementPermission("monitor")) + /*[ENDIF] JAVA_SPEC_VERSION >= 24 * @throws UnsupportedOperationException is thrown if the JVM does not support monitoring * object monitor usage or ownable synchronizer usage, even as it has been specified. * @throws InternalError is thrown in case an error occurs while fetching thread information, * typically, an internal error resulting from an inconsistency in the class library. */ public ExtendedThreadInfo[] dumpAllExtendedThreads(boolean lockedMonitors, boolean lockedSynchronizers) - throws SecurityException, UnsupportedOperationException, InternalError; + throws + /*[IF JAVA_SPEC_VERSION < 24]*/ + SecurityException, + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ + UnsupportedOperationException, InternalError; } diff --git a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedMemoryMXBeanImpl.java b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedMemoryMXBeanImpl.java index 2b0fefa137e..5da4fe44995 100644 --- a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedMemoryMXBeanImpl.java +++ b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedMemoryMXBeanImpl.java @@ -25,7 +25,9 @@ import java.lang.management.GarbageCollectorMXBean; import java.lang.management.MemoryPoolMXBean; import java.lang.management.MemoryType; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.concurrent.atomic.AtomicBoolean; import javax.management.NotificationFilter; @@ -79,14 +81,20 @@ public void addNotificationListener(NotificationListener listener, NotificationF @Override protected void startNotificationThread() { if (!notificationThreadStarted.getAndSet(true)) { + Thread notifier = null; + /*[IF JAVA_SPEC_VERSION >= 24]*/ + notifier = VM.getVMLangAccess().createThread(new MemoryNotificationThread(this), + "MemoryMXBean notification dispatcher", true, false, true, ClassLoader.getSystemClassLoader()); //$NON-NLS-1$ + notifier.setPriority(Thread.NORM_PRIORITY + 1); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ PrivilegedAction createThread = () -> { Thread thread = VM.getVMLangAccess().createThread(new MemoryNotificationThread(this), "MemoryMXBean notification dispatcher", true, false, true, ClassLoader.getSystemClassLoader()); //$NON-NLS-1$ thread.setPriority(Thread.NORM_PRIORITY + 1); return thread; }; - - Thread notifier = java.security.AccessController.doPrivileged(createThread); + notifier = java.security.AccessController.doPrivileged(createThread); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ notifier.start(); } } diff --git a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedOperatingSystemMXBeanImpl.java b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedOperatingSystemMXBeanImpl.java index 4470f79ff2d..eb41143ddd9 100644 --- a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedOperatingSystemMXBeanImpl.java +++ b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedOperatingSystemMXBeanImpl.java @@ -22,7 +22,9 @@ */ package com.ibm.lang.management.internal; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.Objects; import javax.management.MBeanNotificationInfo; @@ -112,6 +114,11 @@ private static boolean isZosHardwareEmulated(String hwModel) { super(); // only launch the notification thread if the environment could change if (isDLPAREnabled()) { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + Thread thread = VM.getVMLangAccess().createThread(new OperatingSystemNotificationThread(this), + "OperatingSystemMXBean notification dispatcher", true, false, true, ClassLoader.getSystemClassLoader()); //$NON-NLS-1$ + thread.setPriority(Thread.NORM_PRIORITY + 1); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ PrivilegedAction createThread = () -> { Thread thread = VM.getVMLangAccess().createThread(new OperatingSystemNotificationThread(this), "OperatingSystemMXBean notification dispatcher", true, false, true, ClassLoader.getSystemClassLoader()); //$NON-NLS-1$ @@ -123,6 +130,7 @@ private static boolean isZosHardwareEmulated(String hwModel) { @SuppressWarnings("removal") /*[ENDIF] JAVA_SPEC_VERSION >= 17 */ Thread thread = java.security.AccessController.doPrivileged(createThread); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ thread.start(); } } diff --git a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedThreadInfoImpl.java b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedThreadInfoImpl.java index d6410592804..d3d0784d5f8 100644 --- a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedThreadInfoImpl.java +++ b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/ExtendedThreadInfoImpl.java @@ -24,8 +24,6 @@ import java.lang.management.ThreadInfo; import java.lang.reflect.Field; -import java.security.AccessController; -import java.security.PrivilegedAction; import com.ibm.lang.management.ExtendedThreadInfo; diff --git a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/MemoryNotificationThread.java b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/MemoryNotificationThread.java index 6a89d6fc8a3..af2431403c5 100644 --- a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/MemoryNotificationThread.java +++ b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/MemoryNotificationThread.java @@ -25,7 +25,9 @@ import java.lang.management.MemoryManagerMXBean; import java.lang.management.MemoryNotificationInfo; import java.lang.management.MemoryUsage; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import javax.management.Notification; @@ -159,6 +161,19 @@ private void dispatchMemoryNotificationHelper(String poolName, long min, long us /*[ENDIF] JAVA_SPEC_VERSION >= 17 */ private static boolean registerShutdownHandler() { Thread notifier = new MemoryNotificationThreadShutdown(Thread.currentThread()); + /*[IF JAVA_SPEC_VERSION >= 24]*/ + try { + Runtime.getRuntime().addShutdownHook(notifier); + return Boolean.TRUE.booleanValue(); + } catch (IllegalStateException e) { + /* + * This exception will occur if the VM is already shutting down: + * by returning false we avoid starting the notification loop + * that cannot be signalled to terminate. + */ + return Boolean.FALSE.booleanValue(); + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ PrivilegedAction action = () -> { try { Runtime.getRuntime().addShutdownHook(notifier); @@ -174,6 +189,7 @@ private static boolean registerShutdownHandler() { }; return java.security.AccessController.doPrivileged(action).booleanValue(); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } /** diff --git a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/OperatingSystemNotificationThread.java b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/OperatingSystemNotificationThread.java index b55397bed27..9fed3ef3127 100644 --- a/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/OperatingSystemNotificationThread.java +++ b/jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal/OperatingSystemNotificationThread.java @@ -22,7 +22,9 @@ */ package com.ibm.lang.management.internal; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import javax.management.Notification; import com.ibm.lang.management.AvailableProcessorsNotificationInfo; @@ -56,6 +58,9 @@ public void run() { Thread myShutdownNotifier = new OperatingSystemNotificationThreadShutdown(Thread.currentThread()); try { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + Runtime.getRuntime().addShutdownHook(myShutdownNotifier); + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ java.security.AccessController.doPrivileged(new PrivilegedAction() { @Override public Void run() { @@ -63,6 +68,7 @@ public Void run() { return null; } }); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } catch (IllegalStateException e) { /* if by chance we are already shutting down when we try to * register the shutdown hook, allow this thread to terminate diff --git a/jcl/src/jdk.management/share/classes/com/sun/management/internal/GcInfoUtil.java b/jcl/src/jdk.management/share/classes/com/sun/management/internal/GcInfoUtil.java index 046ad04f112..76e789c6b74 100644 --- a/jcl/src/jdk.management/share/classes/com/sun/management/internal/GcInfoUtil.java +++ b/jcl/src/jdk.management/share/classes/com/sun/management/internal/GcInfoUtil.java @@ -24,7 +24,9 @@ import java.lang.management.MemoryUsage; import java.lang.reflect.Constructor; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.Map; import javax.management.openmbean.CompositeData; @@ -47,11 +49,23 @@ public final class GcInfoUtil { private static Constructor gcInfoPrivateConstructor = null; - /*[IF JAVA_SPEC_VERSION >= 17]*/ + /*[IF (JAVA_SPEC_VERSION >= 17) & (JAVA_SPEC_VERSION < 24)]*/ @SuppressWarnings("removal") - /*[ENDIF] JAVA_SPEC_VERSION >= 17 */ + /*[ENDIF] (JAVA_SPEC_VERSION >= 17) & (JAVA_SPEC_VERSION < 24) */ private static Constructor getGcInfoPrivateConstructor() { if (null == gcInfoPrivateConstructor) { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + try { + gcInfoPrivateConstructor = GcInfo.class.getDeclaredConstructor(Long.TYPE, Long.TYPE, Long.TYPE, Map.class, Map.class); + gcInfoPrivateConstructor.setAccessible(true); + } catch (NoSuchMethodException e) { + /* Handle all sorts of internal errors arising due to reflection by rethrowing an InternalError. */ + /*[MSG "K0660", "Internal error while obtaining private constructor."]*/ + InternalError error = new InternalError(com.ibm.oti.util.Msg.getString("K0660")); //$NON-NLS-1$ + error.initCause(e); + throw error; + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ gcInfoPrivateConstructor = java.security.AccessController.doPrivileged(new PrivilegedAction>() { @Override public Constructor run() { @@ -68,8 +82,10 @@ public Constructor run() { } } }); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } return gcInfoPrivateConstructor; + } /** diff --git a/jcl/src/jdk.management/share/classes/openj9/lang/management/OpenJ9DiagnosticsMXBean.java b/jcl/src/jdk.management/share/classes/openj9/lang/management/OpenJ9DiagnosticsMXBean.java index 819e5271827..e2caf9b5d08 100644 --- a/jcl/src/jdk.management/share/classes/openj9/lang/management/OpenJ9DiagnosticsMXBean.java +++ b/jcl/src/jdk.management/share/classes/openj9/lang/management/OpenJ9DiagnosticsMXBean.java @@ -61,7 +61,9 @@ public interface OpenJ9DiagnosticsMXBean extends PlatformManagedObject { * handled. * * @throws ConfigurationUnavailableException if the configuration cannot be changed because a dump is already in progress + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException if there is a security manager and it doesn't allow the checks required to change the dump settings + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public void resetDumpOptions() throws ConfigurationUnavailableException; @@ -72,7 +74,9 @@ public interface OpenJ9DiagnosticsMXBean extends PlatformManagedObject { * the documentation for the OpenJ9 JVM. * * @return the dump configuration as an array of Strings + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException if there is a security manager and it doesn't allow the checks required to read the dump settings + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public String[] queryDumpOptions(); @@ -85,7 +89,9 @@ public interface OpenJ9DiagnosticsMXBean extends PlatformManagedObject { * * @return the dump configuration as a String, with multiple options separated by * a vertical bar + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException if there is a security manager and it doesn't allow the checks required to read the dump settings + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public String getDumpOptions(); @@ -99,7 +105,9 @@ public interface OpenJ9DiagnosticsMXBean extends PlatformManagedObject { * @param dumpOptions the options string to be set * @throws InvalidOptionException if the specified dumpOptions cannot be set or is incorrect * @throws ConfigurationUnavailableException if the configuration cannot be changed because a dump is already in progress + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException if there is a security manager and it doesn't allow the checks required to change the dump settings + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @throws NullPointerException if dumpOptions is null */ public void setDumpOptions(String dumpOptions) throws InvalidOptionException, ConfigurationUnavailableException; @@ -115,7 +123,9 @@ public interface OpenJ9DiagnosticsMXBean extends PlatformManagedObject { * @param dumpAgent the dump agent to be triggered * @throws IllegalArgumentException if the specified dump agent is invalid or unsupported by this method * @throws RuntimeException if the vm does not contain RAS dump support + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException if there is a security manager and it doesn't allow the checks required to trigger this dump + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @throws NullPointerException if dumpAgent is null */ public void triggerDump(String dumpAgent) throws IllegalArgumentException; @@ -141,15 +151,19 @@ public interface OpenJ9DiagnosticsMXBean extends PlatformManagedObject { * the command line. * * + /*[IF JAVA_SPEC_VERSION < 24] * If a security manager exists a permission check for com.ibm.jvm.DumpPermission will be * made, if this fails a SecurityException will be thrown. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * * @return the file name that the dump was actually written to * @param dumpAgent the dump agent to be triggered * @param fileNamePattern the filename to write to, which may be null, empty or include replacement tokens * @throws InvalidOptionException if the fileNamePattern was invalid * @throws IllegalArgumentException if the specified dump agent is invalid or unsupported by this method + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException if there is a security manager and it doesn't allow the checks required to trigger this dump + /*[ENDIF] JAVA_SPEC_VERSION < 24 * @throws NullPointerException if dumpAgent is null */ public String triggerDumpToFile(String dumpAgent, String fileNamePattern) throws IllegalArgumentException, InvalidOptionException; @@ -160,7 +174,9 @@ public interface OpenJ9DiagnosticsMXBean extends PlatformManagedObject { * @return the file name of the dump that was created * @throws InvalidOptionException if the dump operation fails * @throws RuntimeException if the JVM does not contain RAS dump support + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException if there is a security manager and it doesn't allow the checks required to trigger this dump + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public String triggerClassicHeapDump() throws InvalidOptionException; } diff --git a/jcl/src/jdk.management/share/classes/openj9/lang/management/internal/OpenJ9DiagnosticsMXBeanImpl.java b/jcl/src/jdk.management/share/classes/openj9/lang/management/internal/OpenJ9DiagnosticsMXBeanImpl.java index 5e357ee9186..196e887e3a2 100644 --- a/jcl/src/jdk.management/share/classes/openj9/lang/management/internal/OpenJ9DiagnosticsMXBeanImpl.java +++ b/jcl/src/jdk.management/share/classes/openj9/lang/management/internal/OpenJ9DiagnosticsMXBeanImpl.java @@ -27,7 +27,9 @@ /*[IF JAVA_SPEC_VERSION >= 9]*/ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.PrivilegedAction; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.Optional; /*[ELSE] JAVA_SPEC_VERSION >= 9 */ import com.ibm.jvm.Dump; @@ -81,6 +83,13 @@ private static OpenJ9DiagnosticsMXBean createInstance() { return null; } + /*[IF JAVA_SPEC_VERSION >= 24]*/ + try { + return new OpenJ9DiagnosticsMXBeanImpl(openj9_jvm.get()); + } catch (Exception e) { + throw handleError(e); + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ PrivilegedAction action = new PrivilegedAction() { @Override public OpenJ9DiagnosticsMXBean run() { @@ -91,8 +100,8 @@ public OpenJ9DiagnosticsMXBean run() { } } }; - return java.security.AccessController.doPrivileged(action); + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ /*[ELSE] JAVA_SPEC_VERSION > 8 return new OpenJ9DiagnosticsMXBeanImpl(); /*[ENDIF] JAVA_SPEC_VERSION > 8 */