# Class JreCompat

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

Direct Known Subclasses:
  `Jre19Compat`

public class JreCompat extends 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

## Constructor Summary

Constructors
Constructor
Description
`JreCompat()`

## Method Summary

Modifier and Type
Method
Description
`<T> T`
`callAs(Subject subject, Callable<T> action)`
`Object`
`createVirtualThreadBuilder(String name)`
Create a thread builder for virtual threads using the given name to name the threads.
`boolean`
`disableCanonCaches()`
Disable the global canonical file cache.
`Object`
`getExecutor(Thread thread)`
Obtains the executor, if any, used to create the provided thread.
`static JreCompat`
`getInstance()`
`SocketAddress`
`getUnixDomainSocketAddress(String path)`
Return Unix domain socket address for given path.
`boolean`
`isCanonCachesDisabled()`
`static boolean`
`isGraalAvailable()`
`static boolean`
`isJre16Available()`
`static boolean`
`isJre19Available()`
`static boolean`
`isJre21Available()`
`static boolean`
`isJre22Available()`
`ServerSocketChannel`
`openUnixDomainServerSocketChannel()`
Create server socket channel using the Unix domain socket ProtocolFamily.
`SocketChannel`
`openUnixDomainSocketChannel()`
Create socket channel using the Unix domain socket ProtocolFamily.
`void`
`threadBuilderStart(Object threadBuilder, Runnable command)`
Create a thread with the given thread builder and use it to execute the given runnable.

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

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

## Constructor Details

### JreCompat

public JreCompat()

## Method Details

### getInstance

public static JreCompat getInstance()

### isGraalAvailable

public static boolean isGraalAvailable()

### isJre16Available

public static boolean isJre16Available()

### isJre19Available

public static boolean isJre19Available()

### isJre21Available

public static boolean isJre21Available()

### isJre22Available

public static boolean isJre22Available()

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

public Object getExecutor(Thread thread) throws NoSuchFieldException, SecurityException, IllegalArgumentException, 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:
  `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`