Class JreCompat

java.lang.Object
org.apache.tomcat.util.compat.JreCompat
Direct Known Subclasses:
Jre12Compat

public class JreCompat extends Object
This is the base implementation class for JRE compatibility and provides an implementation based on Java 8. Subclasses may extend this class and provide alternative implementations for later JRE versions
  • Field Details

    • USE_CANON_CACHES_CMD_ARG

      protected static final String USE_CANON_CACHES_CMD_ARG
      See Also:
    • canonCachesDisabled

      protected static volatile Boolean canonCachesDisabled
    • canonCachesDisabledLock

      protected static final Object canonCachesDisabledLock
    • useCanonCachesField

      protected static volatile Optional<Field> useCanonCachesField
    • useCanonCachesFieldLock

      protected static final Object useCanonCachesFieldLock
    • setApplicationProtocolsMethod

      protected static final Method setApplicationProtocolsMethod
    • getApplicationProtocolMethod

      protected static final Method getApplicationProtocolMethod
  • Constructor Details

    • JreCompat

      public JreCompat()
  • Method Details

    • 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()
    • isJre12Available

      public static boolean isJre12Available()
    • isJre16Available

      public static boolean isJre16Available()
    • isJre19Available

      public static boolean isJre19Available()
    • isJre21Available

      public static boolean isJre21Available()
    • isJre22Available

      public static boolean isJre22Available()
    • isInstanceOfInaccessibleObjectException

      public boolean isInstanceOfInaccessibleObjectException(Throwable t)
      Test if the provided exception is an instance of java.lang.reflect.InaccessibleObjectException.
      Parameters:
      t - The exception to test
      Returns:
      true if the exception is an instance of InaccessibleObjectException, otherwise false
    • setApplicationProtocols

      public void setApplicationProtocols(SSLParameters sslParameters, String[] protocols)
      Set 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
    • getApplicationProtocol

      public String getApplicationProtocol(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 IOException
      Disables 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
    • addBootModulePath

      public void addBootModulePath(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.
      Parameters:
      classPathUrlsToProcess - The Deque to which the modules should be added
    • jarFileNewInstance

      public final JarFile jarFileNewInstance(String s) throws IOException
      Creates 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
    • jarFileNewInstance

      public JarFile jarFileNewInstance(File f) throws IOException
      Creates 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
    • jarFileIsMultiRelease

      public boolean jarFileIsMultiRelease(JarFile jarFile)
      Is this JarFile a multi-release JAR file.
      Parameters:
      jarFile - The JarFile to test
      Returns:
      true If it is a multi-release JAR file and is configured to behave as such.
    • jarFileRuntimeMajorVersion

      public int jarFileRuntimeMajorVersion()
    • canAccess

      public boolean canAccess(Object base, 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(Class<?> type)
      Is the given class in an exported package?
      Parameters:
      type - The class to test
      Returns:
      Always true for Java 8. true if the enclosing package is exported for Java 9+
    • getModuleName

      public String getModuleName(Class<?> type)
      What is the module of the given class?
      Parameters:
      type - The class to test
      Returns:
      Always true for Java 8. true if the enclosing package is exported for Java 9+
    • getUnixDomainSocketAddress

      public SocketAddress getUnixDomainSocketAddress(String path)
      Return Unix domain socket address for given path.
      Parameters:
      path - The path
      Returns:
      the socket address
    • openUnixDomainServerSocketChannel

      public ServerSocketChannel openUnixDomainServerSocketChannel()
      Create server socket channel using the Unix domain socket ProtocolFamily.
      Returns:
      the server socket channel
    • openUnixDomainSocketChannel

      public SocketChannel openUnixDomainSocketChannel()
      Create socket channel using the Unix domain socket ProtocolFamily.
      Returns:
      the socket channel
    • getExecutor

      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
    • createVirtualThreadBuilder

      public Object createVirtualThreadBuilder(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(Object threadBuilder, 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 thread
      command - The command to run
    • callAs

      public <T> T callAs(Subject subject, Callable<T> action) throws CompletionException
      Throws:
      CompletionException
    • isCanonCachesDisabled

      public boolean isCanonCachesDisabled()
    • disableCanonCaches

      public boolean disableCanonCaches()
      Disable the global canonical file cache.
      Returns:
      true if the global canonical file cache was already disabled prior to this call or was disabled as a result of this call, otherwise false
    • ensureUseCanonCachesFieldIsPopulated

      protected void ensureUseCanonCachesFieldIsPopulated()