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. Sub-classes 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()