Package org.apache.tomcat.util.compat
Class JreCompat
java.lang.Object
org.apache.tomcat.util.compat.JreCompat
- Direct Known Subclasses:
- Jre19Compat
This is the base implementation class for JRE compatibility and provides an implementation based on Java 8.
 Sub-classes may extend this class and provide alternative implementations for later JRE versions
- 
Field SummaryFields
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionvoidaddBootModulePath(Deque<URL> classPathUrlsToProcess) Obtains the URLs for all the JARs on the module path when the JVM starts and adds them to the provided Deque.<T> TbooleancanAccess(Object base, AccessibleObject accessibleObject) Is the accessibleObject accessible (as a result of appropriate module exports) on the provided instance?Create a thread builder for virtual threads using the given name to name the threads.voidDisables caching for JAR URL connections.booleanDisable the global canonical file cache.getApplicationProtocol(SSLEngine sslEngine) Get the application protocol that has been negotiated for connection associated with the given SSLEngine.getExecutor(Thread thread) Obtains the executor, if any, used to create the provided thread.static JreCompatgetModuleName(Class<?> type) What is the module of the given class?Return Unix domain socket address for given path.static booleanbooleanbooleanisExported(Class<?> type) Is the given class in an exported package?static booleanbooleanTest if the provided exception is an instance of java.lang.reflect.InaccessibleObjectException.static booleanstatic booleanstatic booleanstatic booleanstatic booleanstatic booleanbooleanjarFileIsMultiRelease(JarFile jarFile) Is this JarFile a multi-release JAR file.Creates a new JarFile instance.final JarFileCreates a new JarFile instance.intCreate server socket channel using the Unix domain socket ProtocolFamily.Create socket channel using the Unix domain socket ProtocolFamily.voidsetApplicationProtocols(SSLParameters sslParameters, String[] protocols) Set the application protocols the server will accept for ALPNvoidthreadBuilderStart(Object threadBuilder, Runnable command) Create a thread with the given thread builder and use it to execute the given runnable.
- 
Field Details- 
setApplicationProtocolsMethod
- 
getApplicationProtocolMethod
 
- 
- 
Constructor Details- 
JreCompatpublic JreCompat()
 
- 
- 
Method Details- 
getInstance
- 
isGraalAvailablepublic static boolean isGraalAvailable()
- 
isAlpnSupportedpublic static boolean isAlpnSupported()
- 
isJre9Availablepublic static boolean isJre9Available()
- 
isJre11Availablepublic static boolean isJre11Available()
- 
isJre16Availablepublic static boolean isJre16Available()
- 
isJre19Availablepublic static boolean isJre19Available()
- 
isJre21Availablepublic static boolean isJre21Available()
- 
isJre22Availablepublic static boolean isJre22Available()
- 
isInstanceOfInaccessibleObjectExceptionTest if the provided exception is an instance of java.lang.reflect.InaccessibleObjectException.- Parameters:
- t- The exception to test
- Returns:
- trueif the exception is an instance of InaccessibleObjectException, otherwise- false
 
- 
setApplicationProtocolsSet the application protocols the server will accept for ALPN- Parameters:
- sslParameters- The SSL parameters for a connection
- protocols- The application protocols to be allowed for that connection
 
- 
getApplicationProtocolGet the application protocol that has been negotiated for connection associated with the given SSLEngine.- Parameters:
- sslEngine- The SSLEngine for which to obtain the negotiated protocol
- Returns:
- The name of the negotiated protocol
 
- 
disableCachingForJarUrlConnectionsDisables caching for JAR URL connections. For Java 8 and earlier, this also disables caching for ALL URL connections.- Throws:
- IOException- If a dummy JAR URLConnection can not be created
 
- 
addBootModulePathObtains the URLs for all the JARs on the module path when the JVM starts and adds them to the provided Deque.- Parameters:
- classPathUrlsToProcess- The Deque to which the modules should be added
 
- 
jarFileNewInstanceCreates a new JarFile instance. When running on Java 9 and later, the JarFile will be multi-release JAR aware. While this isn't strictly required to be in this package, it is provided as a convenience method.- Parameters:
- s- The JAR file to open
- Returns:
- A JarFile instance based on the provided path
- Throws:
- IOException- If an I/O error occurs creating the JarFile instance
 
- 
jarFileNewInstanceCreates a new JarFile instance. When running on Java 9 and later, the JarFile will be multi-release JAR aware.- Parameters:
- f- The JAR file to open
- Returns:
- A JarFile instance based on the provided file
- Throws:
- IOException- If an I/O error occurs creating the JarFile instance
 
- 
jarFileIsMultiReleaseIs this JarFile a multi-release JAR file.- Parameters:
- jarFile- The JarFile to test
- Returns:
- trueIf it is a multi-release JAR file and is configured to behave as such.
 
- 
jarFileRuntimeMajorVersionpublic int jarFileRuntimeMajorVersion()
- 
canAccessIs the accessibleObject accessible (as a result of appropriate module exports) on the provided instance?- Parameters:
- base- The specific instance to be tested.
- accessibleObject- The method/field/constructor to be tested.
- Returns:
- {code true} if the AccessibleObject can be accessed otherwise {code false}
 
- 
isExportedIs the given class in an exported package?- Parameters:
- type- The class to test
- Returns:
- Always truefor Java 8.trueif the enclosing package is exported for Java 9+
 
- 
getModuleNameWhat is the module of the given class?- Parameters:
- type- The class to test
- Returns:
- Always truefor Java 8.trueif the enclosing package is exported for Java 9+
 
- 
getUnixDomainSocketAddressReturn Unix domain socket address for given path.- Parameters:
- path- The path
- Returns:
- the socket address
 
- 
openUnixDomainServerSocketChannelCreate server socket channel using the Unix domain socket ProtocolFamily.- Returns:
- the server socket channel
 
- 
openUnixDomainSocketChannelCreate socket channel using the Unix domain socket ProtocolFamily.- Returns:
- the socket channel
 
- 
getExecutorpublic Object getExecutor(Thread thread) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException Obtains the executor, if any, used to create the provided thread.- Parameters:
- thread- The thread to examine
- Returns:
- The executor, if any, that created the provided thread
- Throws:
- NoSuchFieldException- If a field used via reflection to obtain the executor cannot be found
- SecurityException- If a security exception occurs while trying to identify the executor
- IllegalArgumentException- If the instance object does not match the class of the field when obtaining a field value via reflection
- IllegalAccessException- If a field is not accessible due to access restrictions
 
- 
createVirtualThreadBuilderCreate a thread builder for virtual threads using the given name to name the threads.- Parameters:
- name- The base name for the threads
- Returns:
- The thread buidler for virtual threads
 
- 
threadBuilderStartCreate a thread with the given thread builder and use it to execute the given runnable.- Parameters:
- threadBuilder- The thread builder to use to create a thread
- command- The command to run
 
- 
callAs- Throws:
- CompletionException
 
- 
isCanonCachesDisabledpublic boolean isCanonCachesDisabled()
- 
disableCanonCachespublic boolean disableCanonCaches()Disable the global canonical file cache.- Returns:
- trueif the global canonical file cache was already disabled prior to this call or was disabled as a result of this call, otherwise- false
 
 
-