Package org.apache.tomcat.util.compat
Class JreCompat
- java.lang.Object
-
- org.apache.tomcat.util.compat.JreCompat
-
- Direct Known Subclasses:
Jre19Compat
public class JreCompat extends java.lang.ObjectThis 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 Summary
Fields Modifier and Type Field Description protected static java.lang.reflect.MethodgetApplicationProtocolMethodprotected static java.lang.reflect.MethodsetApplicationProtocolsMethod
-
Constructor Summary
Constructors Constructor Description JreCompat()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddBootModulePath(java.util.Deque<java.net.URL> classPathUrlsToProcess)Obtains the URLs for all the JARs on the module path when the JVM starts and adds them to the provided Deque.booleancanAccess(java.lang.Object base, java.lang.reflect.AccessibleObject accessibleObject)Is the accessibleObject accessible (as a result of appropriate module exports) on the provided instance?java.lang.ObjectcreateVirtualThreadBuilder(java.lang.String name)Create a thread builder for virtual threads using the given name to name the threads.voiddisableCachingForJarUrlConnections()Disables caching for JAR URL connections.java.lang.StringgetApplicationProtocol(javax.net.ssl.SSLEngine sslEngine)Get the application protocol that has been negotiated for connection associated with the given SSLEngine.java.lang.ObjectgetExecutor(java.lang.Thread thread)Obtains the executor, if any, used to create the provided thread.static JreCompatgetInstance()java.lang.StringgetModuleName(java.lang.Class<?> type)What is the module of the given class?java.net.SocketAddressgetUnixDomainSocketAddress(java.lang.String path)Return Unix domain socket address for given path.static booleanisAlpnSupported()booleanisExported(java.lang.Class<?> type)Is the given class in an exported package?static booleanisGraalAvailable()booleanisInstanceOfInaccessibleObjectException(java.lang.Throwable t)Test if the provided exception is an instance of java.lang.reflect.InaccessibleObjectException.static booleanisJre11Available()static booleanisJre16Available()static booleanisJre19Available()static booleanisJre21Available()static booleanisJre22Available()static booleanisJre9Available()booleanjarFileIsMultiRelease(java.util.jar.JarFile jarFile)Is this JarFile a multi-release JAR file.java.util.jar.JarFilejarFileNewInstance(java.io.File f)Creates a new JarFile instance.java.util.jar.JarFilejarFileNewInstance(java.lang.String s)Creates a new JarFile instance.intjarFileRuntimeMajorVersion()java.nio.channels.ServerSocketChannelopenUnixDomainServerSocketChannel()Create server socket channel using the Unix domain socket ProtocolFamily.java.nio.channels.SocketChannelopenUnixDomainSocketChannel()Create socket channel using the Unix domain socket ProtocolFamily.voidsetApplicationProtocols(javax.net.ssl.SSLParameters sslParameters, java.lang.String[] protocols)Set the application protocols the server will accept for ALPNvoidthreadBuilderStart(java.lang.Object threadBuilder, java.lang.Runnable command)Create a thread with the given thread builder and use it to execute the given runnable.
-
-
-
Method Detail
-
getInstance
public static JreCompat getInstance()
-
isGraalAvailable
public static boolean isGraalAvailable()
-
isAlpnSupported
public static boolean isAlpnSupported()
-
isJre9Available
public static boolean isJre9Available()
-
isJre11Available
public static boolean isJre11Available()
-
isJre16Available
public static boolean isJre16Available()
-
isJre19Available
public static boolean isJre19Available()
-
isJre21Available
public static boolean isJre21Available()
-
isJre22Available
public static boolean isJre22Available()
-
isInstanceOfInaccessibleObjectException
public boolean isInstanceOfInaccessibleObjectException(java.lang.Throwable t)
Test 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, otherwisefalse
-
setApplicationProtocols
public void setApplicationProtocols(javax.net.ssl.SSLParameters sslParameters, java.lang.String[] protocols)Set the application protocols the server will accept for ALPN- Parameters:
sslParameters- The SSL parameters for a connectionprotocols- The application protocols to be allowed for that connection
-
getApplicationProtocol
public java.lang.String getApplicationProtocol(javax.net.ssl.SSLEngine sslEngine)
Get 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
-
disableCachingForJarUrlConnections
public void disableCachingForJarUrlConnections() throws java.io.IOExceptionDisables caching for JAR URL connections. For Java 8 and earlier, this also disables caching for ALL URL connections.- Throws:
java.io.IOException- If a dummy JAR URLConnection can not be created
-
addBootModulePath
public void addBootModulePath(java.util.Deque<java.net.URL> classPathUrlsToProcess)
Obtains 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
-
jarFileNewInstance
public final java.util.jar.JarFile jarFileNewInstance(java.lang.String s) throws java.io.IOExceptionCreates 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:
java.io.IOException- If an I/O error occurs creating the JarFile instance
-
jarFileNewInstance
public java.util.jar.JarFile jarFileNewInstance(java.io.File f) throws java.io.IOExceptionCreates 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:
java.io.IOException- If an I/O error occurs creating the JarFile instance
-
jarFileIsMultiRelease
public boolean jarFileIsMultiRelease(java.util.jar.JarFile jarFile)
Is 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.
-
jarFileRuntimeMajorVersion
public int jarFileRuntimeMajorVersion()
-
canAccess
public boolean canAccess(java.lang.Object base, java.lang.reflect.AccessibleObject accessibleObject)Is 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}
-
isExported
public boolean isExported(java.lang.Class<?> type)
Is 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+
-
getModuleName
public java.lang.String getModuleName(java.lang.Class<?> type)
What 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+
-
getUnixDomainSocketAddress
public java.net.SocketAddress getUnixDomainSocketAddress(java.lang.String path)
Return Unix domain socket address for given path.- Parameters:
path- The path- Returns:
- the socket address
-
openUnixDomainServerSocketChannel
public java.nio.channels.ServerSocketChannel openUnixDomainServerSocketChannel()
Create server socket channel using the Unix domain socket ProtocolFamily.- Returns:
- the server socket channel
-
openUnixDomainSocketChannel
public java.nio.channels.SocketChannel openUnixDomainSocketChannel()
Create socket channel using the Unix domain socket ProtocolFamily.- Returns:
- the socket channel
-
getExecutor
public java.lang.Object getExecutor(java.lang.Thread thread) throws java.lang.NoSuchFieldException, java.lang.SecurityException, java.lang.IllegalArgumentException, java.lang.IllegalAccessExceptionObtains 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:
java.lang.NoSuchFieldException- If a field used via reflection to obtain the executor cannot be foundjava.lang.SecurityException- If a security exception occurs while trying to identify the executorjava.lang.IllegalArgumentException- If the instance object does not match the class of the field when obtaining a field value via reflectionjava.lang.IllegalAccessException- If a field is not accessible due to access restrictions
-
createVirtualThreadBuilder
public java.lang.Object createVirtualThreadBuilder(java.lang.String name)
Create 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
-
threadBuilderStart
public void threadBuilderStart(java.lang.Object threadBuilder, java.lang.Runnable command)Create 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 threadcommand- The command to run
-
-