Class JreCompat

  • Direct Known Subclasses:
    Jre12Compat

    public class JreCompat
    extends java.lang.Object
    This 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 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
    • Constructor Detail

      • JreCompat

        public JreCompat()
    • 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()
      • 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.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:
        java.lang.NoSuchFieldException - If a field used via reflection to obtain the executor cannot be found
        java.lang.SecurityException - If a security exception occurs while trying to identify the executor
        java.lang.IllegalArgumentException - If the instance object does not match the class of the field when obtaining a field value via reflection
        java.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 thread
        command - 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:
        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()