org.apache.tomcat.util.compat

## Class JreCompat

- java.lang.Object
- - org.apache.tomcat.util.compat.JreCompat

-     public class JreCompat
      extends Object

  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 Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected static Method` | `getApplicationProtocolMethod`
    `protected static Method` | `setApplicationProtocolsMethod`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JreCompat()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `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.
    `boolean` | `canAccess(Object base, AccessibleObject accessibleObject)` Is the accessibleObject accessible (as a result of appropriate module exports) on the provided instance?
    `void` | `disableCachingForJarUrlConnections()` Disables caching for JAR URL connections.
    `String` | `getApplicationProtocol(SSLEngine sslEngine)` Get the application protocol that has been negotiated for connection associated with the given SSLEngine.
    `static JreCompat` | `getInstance()`
    `String` | `getModuleName(Class<?> type)` What is the module of the given class?
    `SocketAddress` | `getUnixDomainSocketAddress(String path)` Return Unix domain socket address for given path.
    `static boolean` | `isAlpnSupported()`
    `boolean` | `isExported(Class<?> type)` Is the given class in an exported package?
    `static boolean` | `isGraalAvailable()`
    `boolean` | `isInstanceOfInaccessibleObjectException(Throwable t)` Test if the provided exception is an instance of java.lang.reflect.InaccessibleObjectException.
    `static boolean` | `isJre11Available()`
    `static boolean` | `isJre16Available()`
    `static boolean` | `isJre9Available()`
    `boolean` | `jarFileIsMultiRelease(JarFile jarFile)` Is this JarFile a multi-release JAR file.
    `JarFile` | `jarFileNewInstance(File f)` Creates a new JarFile instance.
    `JarFile` | `jarFileNewInstance(String s)` Creates a new JarFile instance.
    `int` | `jarFileRuntimeMajorVersion()`
    `ServerSocketChannel` | `openUnixDomainServerSocketChannel()` Create server socket channel using the Unix domain socket ProtocolFamily.
    `SocketChannel` | `openUnixDomainSocketChannel()` Create socket channel using the Unix domain socket ProtocolFamily.
    `void` | `setApplicationProtocols(SSLParameters sslParameters, String[] protocols)` Set the application protocols the server will accept for ALPN

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### setApplicationProtocolsMethod

          protected static final Method setApplicationProtocolsMethod

    - #### getApplicationProtocolMethod

          protected static final Method getApplicationProtocolMethod

  - ### Constructor Detail

    - #### JreCompat

          public JreCompat()

  - ### 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()

    - #### 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

Copyright © 2000-2022 Apache Software Foundation. All Rights Reserved.