Package org.apache.tomcat.util.compat
Class JreCompat
- java.lang.Object
-
- org.apache.tomcat.util.compat.JreCompat
-
- Direct Known Subclasses:
Jre12Compat
public class JreCompat extends java.lang.ObjectThis is the base implementation class for JRE compatibility and provides an implementation based on Java 11. Subclasses may extend this class and provide alternative implementations for later JRE versions
-
-
Field Summary
Fields Modifier and Type Field Description protected static java.lang.BooleancanonCachesDisabledprotected static java.lang.ObjectcanonCachesDisabledLockprotected static java.lang.StringUSE_CANON_CACHES_CMD_ARGprotected static java.util.Optional<java.lang.reflect.Field>useCanonCachesFieldprotected static java.lang.ObjectuseCanonCachesFieldLock
-
Constructor Summary
Constructors Constructor Description JreCompat()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description <T> TcallAs(javax.security.auth.Subject subject, java.util.concurrent.Callable<T> action)java.lang.ObjectcreateVirtualThreadBuilder(java.lang.String name)Create a thread builder for virtual threads using the given name to name the threads.booleandisableCanonCaches()Disable the global canonical file cache.protected voidensureUseCanonCachesFieldIsPopulated()java.lang.ObjectgetExecutor(java.lang.Thread thread)Obtains the executor, if any, used to create the provided thread.static JreCompatgetInstance()java.net.SocketAddressgetUnixDomainSocketAddress(java.lang.String path)Return Unix domain socket address for given path.booleanisCanonCachesDisabled()static booleanisGraalAvailable()static booleanisJre12Available()static booleanisJre16Available()static booleanisJre19Available()static booleanisJre20Available()static booleanisJre21Available()static booleanisJre22Available()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.voidsetNamedGroupsMethod(java.lang.Object sslParameters, java.lang.String[] names)TLS groups configuration from JSSE API in Java 20.voidthreadBuilderStart(java.lang.Object threadBuilder, java.lang.Runnable command)Create a thread with the given thread builder and use it to execute the given runnable.
-
-
-
Field Detail
-
USE_CANON_CACHES_CMD_ARG
protected static final java.lang.String USE_CANON_CACHES_CMD_ARG
- See Also:
- Constant Field Values
-
canonCachesDisabled
protected static volatile java.lang.Boolean canonCachesDisabled
-
canonCachesDisabledLock
protected static final java.lang.Object canonCachesDisabledLock
-
useCanonCachesField
protected static volatile java.util.Optional<java.lang.reflect.Field> useCanonCachesField
-
useCanonCachesFieldLock
protected static final java.lang.Object useCanonCachesFieldLock
-
-
Method Detail
-
getInstance
public static JreCompat getInstance()
-
isGraalAvailable
public static boolean isGraalAvailable()
-
isJre12Available
public static boolean isJre12Available()
-
isJre16Available
public static boolean isJre16Available()
-
isJre19Available
public static boolean isJre19Available()
-
isJre20Available
public static boolean isJre20Available()
-
isJre21Available
public static boolean isJre21Available()
-
isJre22Available
public static boolean isJre22Available()
-
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
-
callAs
public <T> T callAs(javax.security.auth.Subject subject, java.util.concurrent.Callable<T> action) throws java.util.concurrent.CompletionException- Throws:
java.util.concurrent.CompletionException
-
isCanonCachesDisabled
public boolean isCanonCachesDisabled()
-
disableCanonCaches
public 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, otherwisefalse
-
ensureUseCanonCachesFieldIsPopulated
protected void ensureUseCanonCachesFieldIsPopulated()
-
setNamedGroupsMethod
public void setNamedGroupsMethod(java.lang.Object sslParameters, java.lang.String[] names)TLS groups configuration from JSSE API in Java 20.- Parameters:
sslParameters- the parameters objectnames- the names of the groups to enable
-
-