Class Util

java.lang.Object
org.infinispan.commons.util.Util

public final class Util extends Object
General utility methods used throughout the Infinispan code base.
Since:
4.0
Author:
Brian Stansberry, Galder ZamarreƱo
  • Field Details

    • HEX_DUMP_LIMIT

      public static final int HEX_DUMP_LIMIT
    • EMPTY_OBJECT_ARRAY

      public static final Object[] EMPTY_OBJECT_ARRAY
    • EMPTY_STRING_ARRAY

      public static final String[] EMPTY_STRING_ARRAY
    • EMPTY_THROWABLE_ARRAY

      public static final Throwable[] EMPTY_THROWABLE_ARRAY
    • EMPTY_BYTE_ARRAY

      public static final byte[] EMPTY_BYTE_ARRAY
    • EMPTY_BYTE_ARRAY_ARRAY

      public static final byte[][] EMPTY_BYTE_ARRAY_ARRAY
    • GENERIC_JBOSS_MARSHALLING_CLASS

      public static final String GENERIC_JBOSS_MARSHALLING_CLASS
      See Also:
    • JBOSS_USER_MARSHALLER_CLASS

      public static final String JBOSS_USER_MARSHALLER_CLASS
      See Also:
  • Method Details

    • loadClass

      public static <T> Class<T> loadClass(String classname, ClassLoader cl)

      Loads the specified class using the passed classloader, or, if it is null the Infinispan classes' classloader.

      If loadtime instrumentation via GenerateInstrumentedClassLoader is used, this class may be loaded by the bootstrap classloader.

      If the class is not found, the ClassNotFoundException or NoClassDefFoundError is wrapped as a CacheConfigurationException and is re-thrown.

      Parameters:
      classname - name of the class to load
      cl - the application classloader which should be used to load the class, or null if the class is always packaged with Infinispan
      Returns:
      the class
      Throws:
      CacheConfigurationException - if the class cannot be loaded
    • getClassLoaders

      public static ClassLoader[] getClassLoaders(ClassLoader appClassLoader)
    • loadClassStrict

      public static <T> Class<T> loadClassStrict(String classname, ClassLoader userClassLoader) throws ClassNotFoundException

      Loads the specified class using the passed classloader, or, if it is null the Infinispan classes' classloader.

      If loadtime instrumentation via GenerateInstrumentedClassLoader is used, this class may be loaded by the bootstrap classloader.

      Parameters:
      classname - name of the class to load
      userClassLoader - the application classloader which should be used to load the class, or null if the class is always packaged with Infinispan
      Returns:
      the class
      Throws:
      ClassNotFoundException - if the class cannot be loaded
    • getResourceAsStream

      public static InputStream getResourceAsStream(String resourcePath, ClassLoader userClassLoader)
    • getResourceAsString

      public static String getResourceAsString(String resourcePath, ClassLoader userClassLoader) throws IOException
      Throws:
      IOException
    • newInstanceOrNull

      public static <T> T newInstanceOrNull(Class<T> clazz, Class[] parameterTypes, Object... arguments)
      Instantiates a class by invoking the constructor that matches the provided parameter types passing the given arguments. If no matching constructor is found this will return null. Note that the constructor must be public.

      Any exceptions encountered are wrapped in a CacheConfigurationException and rethrown.

      Type Parameters:
      T - the instance type
      Parameters:
      clazz - class to instantiate
      Returns:
      the new instance if a matching constructor was found otherwise null
    • getInstance

      public static <T> T getInstance(Class<T> clazz)
      Instantiates a class by first attempting a static factory method named getInstance() on the class and then falling back to an empty constructor.

      Any exceptions encountered are wrapped in a CacheConfigurationException and rethrown.

      Parameters:
      clazz - class to instantiate
      Returns:
      an instance of the class
    • getInstanceStrict

      public static <T> T getInstanceStrict(Class<T> clazz) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException
      Similar to getInstance(Class) except that exceptions are propagated to the caller.
      Parameters:
      clazz - class to instantiate
      Returns:
      an instance of the class
      Throws:
      IllegalAccessException
      InstantiationException
      NoSuchMethodException
      InvocationTargetException
    • getInstance

      public static <T> T getInstance(String classname, ClassLoader cl)
      Instantiates a class based on the class name provided. Instantiation is attempted via an appropriate, static factory method named getInstance() first, and failing the existence of an appropriate factory, falls back to an empty constructor.

      Any exceptions encountered loading and instantiating the class is wrapped in a CacheConfigurationException.

      Parameters:
      classname - class to instantiate
      Returns:
      an instance of classname
    • getInstanceStrict

      Similar to getInstance(String, ClassLoader) except that exceptions are propagated to the caller.
      Parameters:
      classname - class to instantiate
      Returns:
      an instance of classname
      Throws:
      ClassNotFoundException
      InstantiationException
      IllegalAccessException
      NoSuchMethodException
      InvocationTargetException
    • composeWithExceptions

      public static Runnable composeWithExceptions(Runnable a, Runnable b)
      Given two Runnables, return a Runnable that executes both in sequence, even if the first throws an exception, and if both throw exceptions, add any exceptions thrown by the second as suppressed exceptions of the first.
    • safeEquals

      public static boolean safeEquals(Object a, Object b)
      Null-safe equality test.
      Parameters:
      a - first object to compare
      b - second object to compare
      Returns:
      true if the objects are equals or both null, false otherwise.
    • prettyPrintTime

      public static String prettyPrintTime(long time, TimeUnit unit)
    • currentMillisFromNanotime

      public static long currentMillisFromNanotime()
      System.nanoTime() is less expensive than System.currentTimeMillis() and better suited to measure time intervals. It's NOT suited to know the current time, for example to be compared with the time of other nodes.
      Returns:
      the value of System.nanoTime(), but converted in Milliseconds.
    • prettyPrintTime

      public static String prettyPrintTime(long millis)
      Prints a time for display
      Parameters:
      millis - time in millis
      Returns:
      the time, represented as millis, seconds, minutes or hours as appropriate, with suffix
    • read

      public static String read(InputStream is) throws IOException
      Reads the given InputStream fully, closes the stream and returns the result as a String.
      Parameters:
      is - the stream to read
      Returns:
      the UTF-8 string
      Throws:
      IOException - in case of stream read errors
    • close

      public static void close(AutoCloseable cl)
    • close

      public static void close(Socket s)
    • close

      public static void close(AutoCloseable... cls)
    • close

      public static void close(Context ctx)
    • formatString

      public static String formatString(Object message, Object... params)
    • toStr

      public static String toStr(Object o)
    • toStr

      public static <E> String toStr(Collection<E> collection)
    • printArray

      public static String printArray(byte[] array)
    • printArray

      public static String printArray(byte[] array, boolean withHash)
    • toHexString

      public static String toHexString(byte[] input)
    • toHexString

      public static String toHexString(byte[] input, int limit)
    • toHexString

      public static String toHexString(byte[] input, int offset, int limit)
    • padString

      public static String padString(String s, int minWidth)
    • threadDump

      public static String threadDump()
    • rewrapAsCacheException

      public static CacheException rewrapAsCacheException(Throwable t)
    • asSet

      @SafeVarargs public static <T> Set<T> asSet(T... a)
    • hexIdHashCode

      public static String hexIdHashCode(Object o)
      Prints the identity hash code of the object passed as parameter in an hexadecimal format in order to safe space.
    • hexDump

      public static String hexDump(byte[] data)
    • hexDump

      public static String hexDump(ByteBuffer buffer)
    • hexDump

      public static String hexDump(byte[] buffer, int offset, int actualLength)
    • hexDump

      public static String hexDump(Util.ByteGetter byteGetter, int offset, int actualLength)
    • addHexByte

      public static void addHexByte(StringBuilder buf, byte b)
    • getNormalizedHash

      public static int getNormalizedHash(Object object, Hash hashFct)
      Applies the given hash function to the hash code of a given object, and then normalizes it to ensure a positive value is always returned.
      Parameters:
      object - to hash
      hashFct - hash function to apply
      Returns:
      a non-null, non-negative normalized hash code for a given object
    • getSegmentSize

      public static int getSegmentSize(int numSegments)
      Returns the size of each segment, given a number of segments.
      Parameters:
      numSegments - number of segments required
      Returns:
      the size of each segment
    • join

      public static String join(List<String> strings, String separator)
    • findNextHighestPowerOfTwo

      public static int findNextHighestPowerOfTwo(int num)
      Returns a number such that the number is a power of two that is equal to, or greater than, the number passed in as an argument. The smallest number returned will be 1. Due to having to be a power of two, the highest int this can return is 231 since int is signed.
    • hashCode

      public static int hashCode(byte[] bytes, int size)
      A function that calculates hash code of a byte array based on its contents but using the given size parameter as deliminator for the content.
    • prettyPrintSubject

      public static String prettyPrintSubject(Subject subject)
      Prints Subject's principals as a one-liner (as opposed to default Subject's toString() method, which prints every principal on separate line).
    • threadLocalRandomUUID

      public static UUID threadLocalRandomUUID()
      Uses a ThreadLocalRandom to generate a UUID. Faster, but not secure
    • unicodeEscapeString

      public static String unicodeEscapeString(String s)
    • unicodeUnescapeString

      public static String unicodeUnescapeString(String s)
    • getInstanceSupplier

      public static <T> Supplier<T> getInstanceSupplier(String className, ClassLoader classLoader)
    • recursiveFileRemove

      public static void recursiveFileRemove(String directoryName)
      Deletes directory recursively.
      Parameters:
      directoryName - Directory to be deleted
    • recursiveFileRemove

      public static void recursiveFileRemove(Path path)
    • recursiveFileRemove

      public static void recursiveFileRemove(File directory)
      Deletes directory recursively.
      Parameters:
      directory - Directory to be deleted
    • recursiveDirectoryCopy

      public static void recursiveDirectoryCopy(Path source, Path target) throws IOException
      Throws:
      IOException
    • toCharArray

      public static char[] toCharArray(String s)
    • objectArray

      public static Object[] objectArray(int length)
    • stringArray

      public static String[] stringArray(int length)
    • throwableArray

      public static Throwable[] throwableArray(int length)
    • renameTempFile

      public static void renameTempFile(File tempFile, File lockFile, File dstFile) throws IOException
      Throws:
      IOException
    • getRootCause

      public static Throwable getRootCause(Throwable re)
    • getJBossMarshaller

      public static Marshaller getJBossMarshaller(ClassLoader classLoader, ClassAllowList classAllowList)
    • requireNonNullElse

      public static <T> T requireNonNullElse(T obj, T defaultObj)
    • longToBytes

      public static void longToBytes(long val, byte[] array, int offset)
    • unquote

      public static String unquote(String s)
    • fromString

      public static Object fromString(Class klass, String value)
    • parseBoolean

      public static boolean parseBoolean(String value)
    • parseEnum

      public static <T extends Enum<T>> T parseEnum(Class<T> enumClass, String value)
    • unwrapSuppressed

      public static void unwrapSuppressed(Throwable t, Throwable t1)
    • unwrapExceptionMessage

      public static String unwrapExceptionMessage(Throwable t)
    • arraysEqual

      public static boolean arraysEqual(byte[] a, int aFromIndex, int aToIndex, byte[] b, int bFromIndex, int bToIndex)
      This method is to be replaced by Java 9 Arrays#equals with the same arguments.
      Parameters:
      a - first array to test contents
      aFromIndex - the offset into the first array to start comparison
      aToIndex - the last element (exclusive) of the first array to compare
      b - second array to test contents
      bFromIndex - the offset into the second array to start comparison
      bToIndex - the last element (exclusive) of the second array to compare
      Returns:
      if the bytes in the two array ranges are equal
    • unchecked

      public static RuntimeException unchecked(Throwable t)