diff --git a/jcl/src/java.base/share/classes/com/ibm/sharedclasses/spi/SharedClassProvider.java b/jcl/src/java.base/share/classes/com/ibm/sharedclasses/spi/SharedClassProvider.java index 012401189fa..432ecde7475 100644 --- a/jcl/src/java.base/share/classes/com/ibm/sharedclasses/spi/SharedClassProvider.java +++ b/jcl/src/java.base/share/classes/com/ibm/sharedclasses/spi/SharedClassProvider.java @@ -23,7 +23,9 @@ package com.ibm.sharedclasses.spi; import java.net.URL; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.BasicPermission; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.function.IntConsumer; /** @@ -216,6 +218,7 @@ public interface SharedClassProvider { */ public long getFreeSpace(); + /*[IF JAVA_SPEC_VERSION < 24]*/ /** *

Constructs a new instance of SharedClassPermission which is a sub-class of BasicPermission.

* @@ -227,4 +230,5 @@ public interface SharedClassProvider { * A new instance of SharedClassPermission which is a sub-class of BasicPermission, or null if shared classes are not enabled. */ public BasicPermission createPermission(String classLoaderClassName, String actions); + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ } diff --git a/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/MemoryMXBeanImpl.java b/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/MemoryMXBeanImpl.java index 082d26b89a2..1fca0403866 100644 --- a/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/MemoryMXBeanImpl.java +++ b/jcl/src/java.management/share/classes/com/ibm/java/lang/management/internal/MemoryMXBeanImpl.java @@ -41,7 +41,9 @@ /*[IF JAVA_SPEC_VERSION >= 9]*/ import com.ibm.sharedclasses.spi.SharedClassProvider; import java.net.URL; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.BasicPermission; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.ServiceLoader; import java.util.concurrent.atomic.AtomicReference; import java.util.function.IntConsumer; @@ -106,10 +108,12 @@ private static final class DisabledSharedClassProvider implements SharedClassPro super(); } + /*[IF JAVA_SPEC_VERSION < 24]*/ @Override public BasicPermission createPermission(String classLoaderClassName, String actions) { return null; } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ @Override public byte[] findSharedClassURL(URL path, String className) { diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedAbstractHelper.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedAbstractHelper.java index 4243285582f..0a5a6abee30 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedAbstractHelper.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedAbstractHelper.java @@ -23,7 +23,9 @@ package com.ibm.oti.shared; import java.lang.ref.WeakReference; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessControlException; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import com.ibm.oti.util.Msg; @@ -36,11 +38,12 @@ public abstract class SharedAbstractHelper implements SharedHelper { private Boolean verbose; private WeakReference loaderRef; + /*[IF JAVA_SPEC_VERSION < 24]*/ private SharedClassPermission readPerm; private SharedClassPermission writePerm; - boolean canFind; boolean canStore; + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ int id; /** @@ -50,14 +53,23 @@ public SharedAbstractHelper() { super(); } + /*[IF JAVA_SPEC_VERSION >= 24]*/ + void initialize(ClassLoader loader, int loaderId) { + this.id = loaderId; + this.loaderRef = new WeakReference<>(loader); + /*[MSG "K0591", "Created {0} with id {1}"]*/ + printVerboseInfo(Msg.getString("K0591", getHelperType(), Integer.valueOf(id))); //$NON-NLS-1$ + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ void initialize(ClassLoader loader, int loaderId, boolean canLoaderFind, boolean canLoaderStore) { this.id = loaderId; this.canFind = canLoaderFind; this.canStore = canLoaderStore; - loaderRef = new WeakReference<>(loader); + this.loaderRef = new WeakReference<>(loader); /*[MSG "K0591", "Created {0} with id {1}"]*/ printVerboseInfo(Msg.getString("K0591", getHelperType(), Integer.valueOf(id))); //$NON-NLS-1$ } + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ /** * Utility function. Returns the ClassLoader that owns this SharedHelper. @@ -73,6 +85,7 @@ public ClassLoader getClassLoader() { private native boolean getIsVerboseImpl(); + /*[IF JAVA_SPEC_VERSION < 24]*/ /* Do not cache the permission objects, else classloader references will prevent class GC */ @SuppressWarnings("removal") private static boolean checkPermission(SecurityManager sm, ClassLoader loader, String type) { @@ -103,6 +116,7 @@ static boolean checkWritePermission(ClassLoader loader) { } return true; // no security manager means the check is successful } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ private boolean isVerbose() { if (verbose == null) { diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedAbstractHelperFactory.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedAbstractHelperFactory.java index 25f34971b85..186824aaeae 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedAbstractHelperFactory.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedAbstractHelperFactory.java @@ -22,7 +22,9 @@ */ package com.ibm.oti.shared; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.AccessControlException; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.concurrent.atomic.AtomicInteger; /** @@ -36,6 +38,7 @@ public abstract class SharedAbstractHelperFactory { */ private static final AtomicInteger idCount = new AtomicInteger(1); + /*[IF JAVA_SPEC_VERSION < 24]*/ @SuppressWarnings("removal") static boolean checkPermission(ClassLoader loader, String type) { boolean result = true; @@ -57,6 +60,7 @@ static boolean canFind(ClassLoader loader) { static boolean canStore(ClassLoader loader) { return checkPermission(loader, "write"); //$NON-NLS-1$ } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ static int getNewID() { return idCount.getAndIncrement(); diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassAbstractHelper.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassAbstractHelper.java index d1733f01494..847e814d62b 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassAbstractHelper.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassAbstractHelper.java @@ -223,8 +223,11 @@ public Integer run() { * @param filter the filter to use when finding and storing classes */ @Override + /*[IF JAVA_SPEC_VERSION < 24]*/ @SuppressWarnings("removal") + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public synchronized void setSharingFilter(SharedClassFilter filter) { + /*[IF JAVA_SPEC_VERSION < 24]*/ if (System.getSecurityManager() != null) { ClassLoader loader = getClassLoader(); if (loader == null) { @@ -243,6 +246,7 @@ public synchronized void setSharingFilter(SharedClassFilter filter) { return; } } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ this.sharedClassFilter = filter; } diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassHelperFactoryImpl.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassHelperFactoryImpl.java index b1a478cf991..63d7649f095 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassHelperFactoryImpl.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassHelperFactoryImpl.java @@ -149,6 +149,15 @@ public SharedClassTokenHelper getTokenHelper(ClassLoader loader) throw new HelperAlreadyDefinedException(Msg.getString("K059d")); //$NON-NLS-1$ /*[ENDIF] JAVA_SPEC_VERSION >= 9 */ } else { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + SharedClassTokenHelper result = new SharedClassTokenHelperImpl(loader, getNewID()); + SharedClassFilter filter = getGlobalSharingFilter(); + if (filter != null) { + result.setSharingFilter(filter); + } + helpers.put(loader, result); + return result; + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ boolean canFind = canFind(loader); boolean canStore = canStore(loader); @@ -161,9 +170,12 @@ public SharedClassTokenHelper getTokenHelper(ClassLoader loader) helpers.put(loader, result); return result; } + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } } + /*[IF JAVA_SPEC_VERSION < 24]*/ return null; + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ } @Override @@ -207,6 +219,15 @@ public SharedClassURLHelper getURLHelper(ClassLoader loader) throw new HelperAlreadyDefinedException(Msg.getString("K059d")); //$NON-NLS-1$ /*[ENDIF] JAVA_SPEC_VERSION >= 9 */ } else { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + SharedClassURLHelper result = new SharedClassURLHelperImpl(loader, getNewID()); + SharedClassFilter filter = getGlobalSharingFilter(); + if (filter != null) { + result.setSharingFilter(filter); + } + helpers.put(loader, result); + return result; + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ boolean canFind = canFind(loader); boolean canStore = canStore(loader); @@ -219,9 +240,12 @@ public SharedClassURLHelper getURLHelper(ClassLoader loader) helpers.put(loader, result); return result; } + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } } + /*[IF JAVA_SPEC_VERSION < 24]*/ return null; + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ } @Override @@ -277,6 +301,15 @@ public SharedClassURLClasspathHelper getURLClasspathHelper( } /*[ENDIF] JAVA_SPEC_VERSION == 8 */ } else { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + result = new SharedClassURLClasspathHelperImpl(loader, classpath, getNewID()); + SharedClassFilter filter = getGlobalSharingFilter(); + if (filter != null) { + result.setSharingFilter(filter); + } + helpers.put(loader, result); + return result; + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ boolean canFind = canFind(loader); boolean canStore = canStore(loader); @@ -289,9 +322,12 @@ public SharedClassURLClasspathHelper getURLClasspathHelper( helpers.put(loader, result); return result; } + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } } + /*[IF JAVA_SPEC_VERSION < 24]*/ return null; + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ } } diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassPermission.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassPermission.java index db54d92c2aa..5ff81f1d149 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassPermission.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassPermission.java @@ -1,4 +1,4 @@ -/*[INCLUDE-IF SharedClasses]*/ +/*[INCLUDE-IF SharedClasses & (JAVA_SPEC_VERSION < 24)]*/ /* * Copyright IBM Corp. and others 1998 * diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassPermissionCollection.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassPermissionCollection.java index 800b4af2148..fcf1e33700e 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassPermissionCollection.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassPermissionCollection.java @@ -1,4 +1,4 @@ -/*[INCLUDE-IF SharedClasses]*/ +/*[INCLUDE-IF SharedClasses & (JAVA_SPEC_VERSION < 24)]*/ /* * Copyright IBM Corp. and others 1998 * diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassTokenHelper.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassTokenHelper.java index 66f12a768c6..133e3de6c54 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassTokenHelper.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassTokenHelper.java @@ -40,8 +40,10 @@ *

If a ClassLoader stores multiple versions of the same class by using the same token, only the most recent will be returned by findSharedClass.

*

Security

*

A SharedClassHelper will only allow classes to be stored in the cache which were defined by the ClassLoader that owns the SharedClassHelper.

+/*[IF JAVA_SPEC_VERSION < 24] *

If a SecurityManager is installed, SharedClassPermissions must be used to permit read/write access to the shared class cache. * Permissions are granted by ClassLoader classname in the java.policy file and are fixed when the SharedClassHelper is created.

+/*[ENDIF] JAVA_SPEC_VERSION < 24 *

Note also that if the createClassLoader RuntimePermission is not granted, ClassLoaders cannot be created, * which in turn means that SharedClassHelpers cannot be created.

*

Compatibility with other SharedClassHelpers

@@ -49,7 +51,9 @@ * * @see SharedClassHelper * @see SharedClassHelperFactory +/*[IF JAVA_SPEC_VERSION < 24] * @see SharedClassPermission +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ public interface SharedClassTokenHelper extends SharedClassHelper { diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassTokenHelperImpl.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassTokenHelperImpl.java index 1b0953aa2a4..4ba3502bbb9 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassTokenHelperImpl.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassTokenHelperImpl.java @@ -33,10 +33,17 @@ */ final class SharedClassTokenHelperImpl extends SharedClassAbstractHelper implements SharedClassTokenHelper { /* Not public - should only be created by factory */ + /*[IF JAVA_SPEC_VERSION >= 24]*/ + SharedClassTokenHelperImpl(ClassLoader loader, int id) { + initialize(loader, id); + initializeShareableClassloader(loader); + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ SharedClassTokenHelperImpl(ClassLoader loader, int id, boolean canFind, boolean canStore) { initialize(loader, id, canFind, canStore); initializeShareableClassloader(loader); } + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ private native boolean findSharedClassImpl2(int loaderId, String className, ClassLoader loader, String token, boolean doFind, boolean doStore, byte[] romClassCookie); @@ -51,9 +58,11 @@ public byte[] findSharedClass(String token, String className) { printVerboseInfo(Msg.getString("K059f")); //$NON-NLS-1$ return null; } + /*[IF JAVA_SPEC_VERSION < 24]*/ if (!canFind) { return null; } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ if (token==null) { /*[MSG "K05a0", "Cannot call findSharedClass with null token. Returning null."]*/ printVerboseError(Msg.getString("K05a0")); //$NON-NLS-1$ @@ -90,9 +99,11 @@ public byte[] findSharedClass(String token, String className) { @Override public boolean storeSharedClass(String token, Class clazz) { + /*[IF JAVA_SPEC_VERSION < 24]*/ if (!canStore) { return false; } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ if (token==null) { /*[MSG "K05a2", "Cannot call storeSharedClass with null token. Returning false."]*/ printVerboseError(Msg.getString("K05a2")); //$NON-NLS-1$ diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLClasspathHelper.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLClasspathHelper.java index aebaa21a4a0..c7126fd38c8 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLClasspathHelper.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLClasspathHelper.java @@ -113,8 +113,10 @@ *

If findSharedClass returns null, then load the class from disk, cache the metadata from the entry anyway, define the class, and store it.

*

Security

*

A SharedClassHelper will only allow classes that were defined by the ClassLoader that owns the SharedClassHelper to be stored in the cache.

+/*[IF JAVA_SPEC_VERSION < 24] *

If a SecurityManager is installed, SharedClassPermissions must be used to permit read/write access to the shared class cache. * Permissions are granted by ClassLoader classname in the java.policy file and are fixed when the SharedClassHelper is created.

+/*[ENDIF] JAVA_SPEC_VERSION < 24 *

Note also that if the createClassLoader RuntimePermission is not granted, ClassLoaders cannot be created, * which in turn means that SharedClassHelpers cannot be created.

*

Efficient use of the SharedClassURLClasspathHelper

@@ -131,7 +133,9 @@ * * @see SharedClassURLClasspathHelper * @see SharedClassHelperFactory +/*[IF JAVA_SPEC_VERSION < 24] * @see SharedClassPermission +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ public interface SharedClassURLClasspathHelper extends SharedClassHelper { diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLClasspathHelperImpl.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLClasspathHelperImpl.java index c48862aa475..aed2fa5e0f1 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLClasspathHelperImpl.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLClasspathHelperImpl.java @@ -49,6 +49,23 @@ final class SharedClassURLClasspathHelperImpl extends SharedClassAbstractHelper } /* Not public - should only be created by factory */ + /*[IF JAVA_SPEC_VERSION >= 24]*/ + SharedClassURLClasspathHelperImpl(ClassLoader loader, URL[] classpath, int id) { + this.origurls = classpath; + this.urls = new URL[classpath.length]; + this.urlCount = classpath.length; + this.validated = new boolean[classpath.length]; + this.confirmedCount = 0; + this.invalidURLExists = false; + urlcpReadWriteLock = new ReentrantReadWriteLock(); + initialize(loader, id); + initializeShareableClassloader(loader); + initializeURLs(); + if (!invalidURLExists) { + notifyClasspathChange3(id, loader, this.urls, 0, this.urlCount, true); + } + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ SharedClassURLClasspathHelperImpl(ClassLoader loader, URL[] classpath, int id, boolean canFind, boolean canStore) { this.origurls = classpath; this.urls = new URL[classpath.length]; @@ -64,6 +81,7 @@ final class SharedClassURLClasspathHelperImpl extends SharedClassAbstractHelper notifyClasspathChange3(id, loader, this.urls, 0, this.urlCount, true); } } + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ private void initializeURLs() { for (int i=0; i clazz, int foundAtIndex) { @Override public boolean storeSharedClass(String partition, Class clazz, int foundAtIndex) { + /*[IF JAVA_SPEC_VERSION < 24]*/ if (!canStore) { return false; } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ if (clazz==null) { /*[MSG "K05a3", "Cannot call storeSharedClass with null Class. Returning false."]*/ printVerboseError(Msg.getString("K05a3")); //$NON-NLS-1$ diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLHelper.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLHelper.java index 6000a5923e6..b5866247408 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLHelper.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLHelper.java @@ -61,8 +61,10 @@ * any metadata that it needs from disk before defining the classes.

*

Security

*

A SharedClassHelper will only allow classes that were defined by the ClassLoader that owns the SharedClassHelper to be stored in the cache.

+/*[IF JAVA_SPEC_VERSION < 24] *

If a SecurityManager is installed, SharedClassPermissions must be used to permit read/write access to the shared class cache. * Permissions are granted by ClassLoader classname in the java.policy file and are fixed when the SharedClassHelper is created.

+/*[ENDIF] JAVA_SPEC_VERSION < 24 *

Note also that if the createClassLoader RuntimePermission is not granted, ClassLoaders cannot be created, * which in turn means that SharedClassHelpers cannot be created.

*

Compatibility with other SharedClassHelpers

@@ -71,7 +73,9 @@ * * @see SharedClassURLHelper * @see SharedClassHelperFactory +/*[IF JAVA_SPEC_VERSION < 24] * @see SharedClassPermission +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ public interface SharedClassURLHelper extends SharedClassHelper { diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLHelperImpl.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLHelperImpl.java index 2e35c2a914c..2fa4b06bd6e 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLHelperImpl.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassURLHelperImpl.java @@ -47,10 +47,17 @@ final class SharedClassURLHelperImpl extends SharedClassAbstractHelper implement // This field is examined using the CDS adaptor public static final boolean MINIMIZE_ENABLED = true; + /*[IF JAVA_SPEC_VERSION >= 24]*/ + SharedClassURLHelperImpl(ClassLoader loader, int id) { + initialize(loader, id); + initializeShareableClassloader(loader); + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ SharedClassURLHelperImpl(ClassLoader loader, int id, boolean canFind, boolean canStore) { initialize(loader, id, canFind, canStore); initializeShareableClassloader(loader); } + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ private static native void init(); @@ -109,9 +116,11 @@ public byte[] findSharedClass(String partition, URL path, String className) { printVerboseInfo(Msg.getString("K059f")); //$NON-NLS-1$ return null; } + /*[IF JAVA_SPEC_VERSION < 24]*/ if (!canFind) { return null; } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ if (path==null) { /*[MSG "K05b3", "Cannot call findSharedClass with null URL. Returning null."]*/ printVerboseError(Msg.getString("K05b3")); //$NON-NLS-1$ @@ -160,9 +169,11 @@ public boolean storeSharedClass(URL path, Class clazz) { @Override public boolean storeSharedClass(String partition, URL path, Class clazz) { + /*[IF JAVA_SPEC_VERSION < 24]*/ if (!canStore) { return false; } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ if (path==null) { /*[MSG "K05b4", "Cannot call storeSharedClass with null URL. Returning false."]*/ printVerboseError(Msg.getString("K05b4")); //$NON-NLS-1$ diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassUtilities.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassUtilities.java index a1b96726ade..97877952240 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassUtilities.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedClassUtilities.java @@ -119,16 +119,20 @@ public class SharedClassUtilities { * If shared classes is disabled for this JVM (that is -Xshareclasses:none is present). * @throws IllegalArgumentException * If flags is not a valid value. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * If a security manager is enabled and the calling thread does not * have SharedClassesNamedPermission("getSharedCacheInfo") + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public static List getSharedCacheInfo(String cacheDir, int flags, boolean useCommandLineValues) { + /*[IF JAVA_SPEC_VERSION < 24]*/ @SuppressWarnings("removal") SecurityManager sm = System.getSecurityManager(); if (sm != null) { sm.checkPermission(SharedPermissions.getSharedCacheInfo); } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ if (flags != NO_FLAGS) { /*[MSG "K0553", "parameter {0} has invalid value"]*/ @@ -191,16 +195,20 @@ public static List getSharedCacheInfo(String cacheDir, int * If shared classes is disabled for this JVM (that is -Xshareclasses:none is present). * @throws IllegalArgumentException * If cacheType is not a valid value. + /*[IF JAVA_SPEC_VERSION < 24] * @throws SecurityException * If a security manager is enabled and the calling thread does not * have SharedClassesNamedPermission("destroySharedCache") + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ public static int destroySharedCache(String cacheDir, int cacheType, String cacheName, boolean useCommandLineValues) { + /*[IF JAVA_SPEC_VERSION < 24]*/ @SuppressWarnings("removal") SecurityManager sm = System.getSecurityManager(); if (sm != null) { sm.checkPermission(SharedPermissions.destroySharedCache); } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ /* * check if cacheType has a valid value only if we are not using command line values. diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelper.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelper.java index f2afeb4dcca..ac484e1ee61 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelper.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelper.java @@ -47,7 +47,9 @@ * * @see SharedHelper * @see SharedDataHelperFactory +/*[IF JAVA_SPEC_VERSION < 24] * @see SharedClassPermission +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ public interface SharedDataHelper extends SharedHelper { @@ -55,8 +57,10 @@ public interface SharedDataHelper extends SharedHelper { * Find data in the shared cache using a specific token.

* Data will be returned only for an exact String match of the token. Otherwise, null is returned.
* The ByteBuffer returned is read-only and cannot be modified.
+ /*[IF JAVA_SPEC_VERSION < 24] * If a SecurityManager is installed, findSharedData can only be called by code whose caller-classloader * has been granted read permissions to the shared class cache. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * * @param token a token to be used as a key * @@ -70,8 +74,10 @@ public interface SharedDataHelper extends SharedHelper { * If data already exists for the token specified, the old data is marked stale in the cache and is replaced by the new data.
* If the exact same data already exists in the cache under the same token, the data is not duplicated and the cached version is returned.
* If null is passed as the data argument, the data currently stored against that token is marked stale and null is returned.
+ /*[IF JAVA_SPEC_VERSION < 24] * If a SecurityManager is installed, storeSharedData can only be called by code whose caller-classloader * has been granted write permissions to the shared class cache. + /*[ENDIF] JAVA_SPEC_VERSION < 24 * * @param token a token to be used as a key * @param data a ByteBuffer of data to copy to the cache diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelperFactoryImpl.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelperFactoryImpl.java index e7b5ee4c08f..622d9493980 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelperFactoryImpl.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelperFactoryImpl.java @@ -52,6 +52,11 @@ public SharedDataHelper getDataHelper(ClassLoader owner) { return (SharedDataHelper)helper; } } else { + /*[IF JAVA_SPEC_VERSION >= 24]*/ + SharedDataHelper result = new SharedDataHelperImpl(owner, getNewID()); + helpers.put(owner, result); + return result; + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ boolean canFind = canFind(owner); boolean canStore = canStore(owner); @@ -60,6 +65,7 @@ public SharedDataHelper getDataHelper(ClassLoader owner) { helpers.put(owner, result); return result; } + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ } } return null; diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelperImpl.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelperImpl.java index d7b4b5c68c1..de649e0572c 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelperImpl.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/SharedDataHelperImpl.java @@ -35,9 +35,15 @@ */ final class SharedDataHelperImpl extends SharedAbstractHelper implements SharedDataHelper { /* Not public - should only be created by factory */ + /*[IF JAVA_SPEC_VERSION >= 24]*/ + SharedDataHelperImpl(ClassLoader loader, int id) { + initialize(loader, id); + } + /*[ELSE] JAVA_SPEC_VERSION >= 24 */ SharedDataHelperImpl(ClassLoader loader, int id, boolean canFind, boolean canStore) { initialize(loader, id, canFind, canStore); } + /*[ENDIF] JAVA_SPEC_VERSION >= 24 */ private native ByteBuffer findSharedDataImpl(int loaderId, String token); @@ -51,6 +57,7 @@ public ByteBuffer findSharedData(String token) { printVerboseInfo(Msg.getString("K059f")); //$NON-NLS-1$ return null; } + /*[IF JAVA_SPEC_VERSION < 24]*/ if (!canFind) { return null; } @@ -59,6 +66,7 @@ public ByteBuffer findSharedData(String token) { printVerboseError(Msg.getString("K05b5")); //$NON-NLS-1$ return null; } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ if (token==null) { /*[MSG "K05b6", "Cannot call findSharedData with null token. Returning null."]*/ printVerboseError(Msg.getString("K05b6")); //$NON-NLS-1$ @@ -75,6 +83,7 @@ public ByteBuffer storeSharedData(String token, ByteBuffer data) { printVerboseInfo(Msg.getString("K059f")); //$NON-NLS-1$ return null; } + /*[IF JAVA_SPEC_VERSION < 24]*/ if (!canStore) { return null; } @@ -83,6 +92,7 @@ public ByteBuffer storeSharedData(String token, ByteBuffer data) { printVerboseError(Msg.getString("K05b7")); //$NON-NLS-1$ return null; } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ if (token==null) { /*[MSG "K05b8", "Cannot call storeSharedData with null token. Returning null."]*/ printVerboseError(Msg.getString("K05b8")); //$NON-NLS-1$ diff --git a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/provider/SharedClassProviderImpl.java b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/provider/SharedClassProviderImpl.java index e5bd52cedfe..4d3dbfd3018 100644 --- a/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/provider/SharedClassProviderImpl.java +++ b/jcl/src/openj9.sharedclasses/share/classes/com/ibm/oti/shared/provider/SharedClassProviderImpl.java @@ -24,14 +24,18 @@ package com.ibm.oti.shared.provider; import java.net.URL; +/*[IF JAVA_SPEC_VERSION < 24]*/ import java.security.BasicPermission; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import java.util.function.IntConsumer; import com.ibm.sharedclasses.spi.SharedClassProvider; import com.ibm.oti.shared.CannotSetClasspathException; import com.ibm.oti.shared.HelperAlreadyDefinedException; import com.ibm.oti.shared.Shared; import com.ibm.oti.shared.SharedClassHelperFactory; +/*[IF JAVA_SPEC_VERSION < 24]*/ import com.ibm.oti.shared.SharedClassPermission; +/*[ENDIF] JAVA_SPEC_VERSION < 24 */ import com.ibm.oti.shared.SharedClassStatistics; import com.ibm.oti.shared.SharedClassURLClasspathHelper; import com.ibm.oti.shared.SharedClassURLHelper; @@ -196,6 +200,7 @@ public long getFreeSpace() { return 0; } } + /*[IF JAVA_SPEC_VERSION < 24]*/ @Override public BasicPermission createPermission(String classLoaderClassName, String actions) { if (!isSharedClassEnabled()) { @@ -203,4 +208,5 @@ public BasicPermission createPermission(String classLoaderClassName, String acti } return new SharedClassPermission(classLoaderClassName, actions); } + /*[ENDIF] JAVA_SPEC_VERSION < 24 */ }