Class Util

java.lang.Object
org.jgroups.util.Util

public class Util extends Object
Collection of various utility routines that can not be assigned to other classes.
Version:
$Id: Util.java,v 1.137.2.11.2.2 2009/04/07 09:52:40 belaban Exp $
Author:
Bela Ban
  • Field Details

  • Constructor Details

    • Util

      public Util()
  • Method Details

    • getGlobalThreadGroup

      public static ThreadGroup getGlobalThreadGroup()
    • checkBufferSize

      public static void checkBufferSize(String buf_name, long val)
      Verifies that val is invalid input: '<'= max memory
      Parameters:
      buf_name -
      val -
    • keyPress

      public static int keyPress(String msg)
    • close

      public static void close(InputStream inp)
    • close

      public static void close(OutputStream out)
    • close

      public static void close(Socket s)
    • close

      public static void close(DatagramSocket my_sock)
    • close

      public static void close(Channel ch)
    • close

      public static void close(Channel... channels)
    • objectFromByteBuffer

      public static Object objectFromByteBuffer(byte[] buffer) throws Exception
      Creates an object from a byte buffer
      Throws:
      Exception
    • objectFromByteBuffer

      public static Object objectFromByteBuffer(byte[] buffer, int offset, int length) throws Exception
      Throws:
      Exception
    • objectToByteBuffer

      public static byte[] objectToByteBuffer(Object obj) throws Exception
      Serializes/Streams an object into a byte buffer. The object has to implement interface Serializable or Externalizable or Streamable. Only Streamable objects are interoperable w/ jgroups-me
      Throws:
      Exception
    • oldObjectFromByteBuffer

      public static Object oldObjectFromByteBuffer(byte[] buffer) throws Exception
      For backward compatibility in JBoss 4.0.2
      Throws:
      Exception
    • oldObjectFromByteBuffer

      public static Object oldObjectFromByteBuffer(byte[] buffer, int offset, int length) throws Exception
      Throws:
      Exception
    • oldObjectToByteBuffer

      public static byte[] oldObjectToByteBuffer(Object obj) throws Exception
      Serializes/Streams an object into a byte buffer. The object has to implement interface Serializable or Externalizable or Streamable. Only Streamable objects are interoperable w/ jgroups-me
      Throws:
      Exception
    • streamableFromByteBuffer

      public static Streamable streamableFromByteBuffer(Class cl, byte[] buffer) throws Exception
      Throws:
      Exception
    • streamableFromByteBuffer

      public static Streamable streamableFromByteBuffer(Class cl, byte[] buffer, int offset, int length) throws Exception
      Throws:
      Exception
    • streamableToByteBuffer

      public static byte[] streamableToByteBuffer(Streamable obj) throws Exception
      Throws:
      Exception
    • collectionToByteBuffer

      public static byte[] collectionToByteBuffer(Collection c) throws Exception
      Throws:
      Exception
    • size

      public static int size(Address addr)
    • writeAuthToken

      public static void writeAuthToken(AuthToken token, DataOutputStream out) throws IOException
      Throws:
      IOException
    • readAuthToken

      Throws:
      IOException
      IllegalAccessException
      InstantiationException
    • writeAddress

      public static void writeAddress(Address addr, DataOutputStream out) throws IOException
      Throws:
      IOException
    • readAddress

      Throws:
      IOException
      IllegalAccessException
      InstantiationException
    • writeAddresses

      public static void writeAddresses(Collection v, DataOutputStream out) throws IOException
      Writes a Vector of Addresses. Can contain 65K addresses at most
      Parameters:
      v - A Collection
      out -
      Throws:
      IOException
    • readAddresses

      Parameters:
      in -
      cl - The type of Collection, e.g. Vector.class
      Returns:
      Collection of Address objects
      Throws:
      IOException
      IllegalAccessException
      InstantiationException
    • size

      public static long size(Collection addrs)
      Returns the marshalled size of a Collection of Addresses. Assumes elements are of the same type !
      Parameters:
      addrs - Collection
      Returns:
      long size
    • writeStreamable

      public static void writeStreamable(Streamable obj, DataOutputStream out) throws IOException
      Throws:
      IOException
    • readStreamable

      public static Streamable readStreamable(Class clazz, DataInputStream in) throws IOException, IllegalAccessException, InstantiationException
      Throws:
      IOException
      IllegalAccessException
      InstantiationException
    • writeGenericStreamable

      public static void writeGenericStreamable(Streamable obj, DataOutputStream out) throws IOException
      Throws:
      IOException
    • readGenericStreamable

      public static Streamable readGenericStreamable(DataInputStream in) throws IOException
      Throws:
      IOException
    • writeObject

      public static void writeObject(Object obj, DataOutputStream out) throws Exception
      Throws:
      Exception
    • readObject

      public static Object readObject(DataInputStream in) throws Exception
      Throws:
      Exception
    • writeString

      public static void writeString(String s, DataOutputStream out) throws IOException
      Throws:
      IOException
    • readString

      public static String readString(DataInputStream in) throws IOException
      Throws:
      IOException
    • writeByteBuffer

      public static void writeByteBuffer(byte[] buf, DataOutputStream out) throws IOException
      Throws:
      IOException
    • readByteBuffer

      public static byte[] readByteBuffer(DataInputStream in) throws IOException
      Throws:
      IOException
    • messageToByteBuffer

      public static Buffer messageToByteBuffer(Message msg) throws IOException
      Throws:
      IOException
    • byteBufferToMessage

      public static Message byteBufferToMessage(byte[] buffer, int offset, int length) throws Exception
      Throws:
      Exception
    • msgListToByteBuffer

      public static Buffer msgListToByteBuffer(List<Message> xmit_list) throws IOException
      Marshalls a list of messages.
      Parameters:
      xmit_list - LinkedList
      Returns:
      Buffer
      Throws:
      IOException
    • byteBufferToMessageList

      public static List<Message> byteBufferToMessageList(byte[] buffer, int offset, int length) throws Exception
      Throws:
      Exception
    • match

      public static boolean match(Object obj1, Object obj2)
    • match

      public static boolean match(long[] a1, long[] a2)
    • sleep

      public static void sleep(long timeout)
      Sleep for timeout msecs. Returns when timeout has elapsed or thread was interrupted
    • sleep

      public static void sleep(long timeout, int nanos)
    • sleep

      public static void sleep(long msecs, boolean busy_sleep)
      On most UNIX systems, the minimum sleep time is 10-20ms. Even if we specify sleep(1), the thread will sleep for at least 10-20ms. On Windows, sleep() seems to be implemented as a busy sleep, that is the thread never relinquishes control and therefore the sleep(x) is exactly x ms long.
    • random

      public static long random(long range)
      Returns a random value in the range [1 - range]
    • sleepRandom

      public static void sleepRandom(long timeout)
      Sleeps between 1 and timeout milliseconds, chosen randomly. Timeout must be > 1
    • sleepRandom

      public static void sleepRandom(long floor, long ceiling)
      Sleeps between floor and ceiling milliseconds, chosen randomly
    • tossWeightedCoin

      public static boolean tossWeightedCoin(double probability)
      Tosses a coin weighted with probability and returns true or false. Example: if probability=0.8, chances are that in 80% of all cases, true will be returned and false in 20%.
    • getHostname

      public static String getHostname()
    • dumpStack

      public static void dumpStack(boolean exit)
    • dumpThreads

      public static String dumpThreads()
    • interruptAndWaitToDie

      public static boolean interruptAndWaitToDie(Thread t)
    • interruptAndWaitToDie

      public static boolean interruptAndWaitToDie(Thread t, long timeout)
    • dumpQueue

      public static String dumpQueue(Queue q)
      Debugging method used to dump the content of a protocol queue in a condensed form. Useful to follow the evolution of the queue's content in time.
    • printStackTrace

      public static String printStackTrace(Throwable t)
      Use with caution: lots of overhead
    • getStackTrace

      public static String getStackTrace(Throwable t)
    • print

      public static String print(Throwable t)
    • crash

      public static void crash()
    • printEvent

      public static String printEvent(Event evt)
    • printMessage

      public static String printMessage(Message msg)
      Tries to read an object from the message's buffer and prints it
    • mapToString

      public static String mapToString(Map<? extends Object,? extends Object> map)
    • printMethodCall

      public static String printMethodCall(Message msg)
      Tries to read a MethodCall object from the message's buffer and prints it. Returns empty string if object is not a method call
    • printThreads

      public static void printThreads()
    • activeThreads

      public static String activeThreads()
    • printBytes

      public static String printBytes(long bytes)
    • printBytes

      public static String printBytes(double bytes)
    • fragmentBuffer

      public static byte[][] fragmentBuffer(byte[] buf, int frag_size, int length)
      Fragments a byte buffer into smaller fragments of (max.) frag_size. Example: a byte buffer of 1024 bytes and a frag_size of 248 gives 4 fragments of 248 bytes each and 1 fragment of 32 bytes.
      Returns:
      An array of byte buffers (byte[]).
    • fragmentBuffer

      public static byte[][] fragmentBuffer(byte[] buf, int frag_size)
    • computeFragOffsets

      public static List computeFragOffsets(int offset, int length, int frag_size)
      Given a buffer and a fragmentation size, compute a list of fragmentation offset/length pairs, and return them in a list. Example:
      Buffer is 10 bytes, frag_size is 4 bytes. Return value will be ({0,4}, {4,4}, {8,2}). This is a total of 3 fragments: the first fragment starts at 0, and has a length of 4 bytes, the second fragment starts at offset 4 and has a length of 4 bytes, and the last fragment starts at offset 8 and has a length of 2 bytes.
      Parameters:
      frag_size -
      Returns:
      List. A List of offset/length pairs
    • computeFragOffsets

      public static List computeFragOffsets(byte[] buf, int frag_size)
    • defragmentBuffer

      public static byte[] defragmentBuffer(byte[][] fragments)
      Concatenates smaller fragments into entire buffers.
      Parameters:
      fragments - An array of byte buffers (byte[])
      Returns:
      A byte buffer
    • printFragments

      public static void printFragments(byte[][] frags)
    • printListWithDelimiter

      public static <T> String printListWithDelimiter(Collection<T> list, String delimiter)
    • array2String

      public static String array2String(long[] array)
    • array2String

      public static String array2String(short[] array)
    • array2String

      public static String array2String(int[] array)
    • array2String

      public static String array2String(boolean[] array)
    • array2String

      public static String array2String(Object[] array)
    • all

      public static boolean all(Collection c, Object obj)
      Returns true if all elements of c match obj
    • isCoordinator

      public static boolean isCoordinator(JChannel ch)
    • pickSubset

      public static Vector pickSubset(Vector members, double subset_percentage)
      Selects a random subset of members according to subset_percentage and returns them. Picks no member twice from the same membership. If the percentage is smaller than 1 -> picks 1 member.
    • pickRandomElement

      public static Object pickRandomElement(List list)
    • pickRandomElement

      public static Object pickRandomElement(Object[] array)
    • createView

      public static View createView(Address coord, long id, Address... members)
    • determineLeftMembers

      public static Vector<Address> determineLeftMembers(Vector<Address> old_mbrs, Vector<Address> new_mbrs)
      Returns all members that left between 2 views. All members that are element of old_mbrs but not element of new_mbrs are returned.
    • printMembers

      public static String printMembers(Vector v)
    • printPingRsps

      public static String printPingRsps(List<PingRsp> rsps)
    • doubleWrite

      public static void doubleWrite(byte[] buf, OutputStream out) throws Exception
      Makes sure that we detect when a peer connection is in the closed state (not closed while we send data, but before we send data). Two writes ensure that, if the peer closed the connection, the first write will send the peer from FIN to RST state, and the second will cause a signal (IOException).
      Throws:
      Exception
    • doubleWrite

      public static void doubleWrite(byte[] buf, int offset, int length, OutputStream out) throws Exception
      Makes sure that we detect when a peer connection is in the closed state (not closed while we send data, but before we send data). Two writes ensure that, if the peer closed the connection, the first write will send the peer from FIN to RST state, and the second will cause a signal (IOException).
      Throws:
      Exception
    • writeFully

      public static void writeFully(ByteBuffer buf, WritableByteChannel out) throws IOException
      if we were to register for OP_WRITE and send the remaining data on readyOps for this channel we have to either block the caller thread or queue the message buffers that may arrive while waiting for OP_WRITE. Instead of the above approach this method will continuously write to the channel until the buffer sent fully.
      Throws:
      IOException
    • sizeOf

      public static long sizeOf(String classname)
    • sizeOf

      public static long sizeOf(Object inst)
    • sizeOf

      public static int sizeOf(Streamable inst)
    • loadClass

      public static Class loadClass(String classname, Class clazz) throws ClassNotFoundException
      Tries to load the class from the current thread's context class loader. If not successful, tries to load the class from the current instance.
      Parameters:
      classname - Desired class.
      clazz - Class object used to obtain a class loader if no context class loader is available.
      Returns:
      Class, or null on failure.
      Throws:
      ClassNotFoundException
    • getResourceAsStream

      public static InputStream getResourceAsStream(String name, Class clazz)
    • sameHost

      public static boolean sameHost(Address one, Address two)
      Checks whether 2 Addresses are on the same host
    • fileExists

      public static boolean fileExists(String fname)
    • parseCommaDelimitedLongs

      public static long[] parseCommaDelimitedLongs(String s)
      Parses comma-delimited longs; e.g., 2000,4000,8000. Returns array of long, or null.
    • parseCommaDelimitedStrings

      public static List<String> parseCommaDelimitedStrings(String l)
      e.g. "bela,jeannette,michelle" --> List{"bela", "jeannette", "michelle"}
    • parseStringList

      public static List<String> parseStringList(String l, String separator)
    • parseInt

      public static int parseInt(Properties props, String property, int defaultValue)
    • parseLong

      public static long parseLong(Properties props, String property, long defaultValue)
    • parseBoolean

      public static boolean parseBoolean(Properties props, String property, boolean defaultValue)
    • parseBindAddress

      public static InetAddress parseBindAddress(Properties props, String property) throws UnknownHostException
      Throws:
      UnknownHostException
    • parseInterfaceList

      public static List<NetworkInterface> parseInterfaceList(String s) throws Exception
      Parameters:
      s -
      Returns:
      List
      Throws:
      Exception
    • print

      public static String print(List<NetworkInterface> interfaces)
    • shortName

      public static String shortName(String hostname)
    • shortName

      public static String shortName(InetAddress hostname)
    • startFlush

      public static boolean startFlush(Channel c, List<Address> flushParticipants, int numberOfAttempts, long randomSleepTimeoutFloor, long randomSleepTimeoutCeiling)
    • startFlush

      public static boolean startFlush(Channel c, List<Address> flushParticipants)
    • startFlush

      public static boolean startFlush(Channel c, int numberOfAttempts, long randomSleepTimeoutFloor, long randomSleepTimeoutCeiling)
    • startFlush

      public static boolean startFlush(Channel c)
    • createServerSocket

      public static ServerSocket createServerSocket(int start_port) throws IOException
      Finds first available port starting at start_port and returns server socket
      Throws:
      IOException
    • createServerSocket

      public static ServerSocket createServerSocket(InetAddress bind_addr, int start_port) throws IOException
      Throws:
      IOException
    • createDatagramSocket

      public static DatagramSocket createDatagramSocket(InetAddress addr, int port) throws Exception
      Creates a DatagramSocket bound to addr. If addr is null, socket won't be bound. If address is already in use, start_port will be incremented until a socket can be created.
      Parameters:
      addr - The InetAddress to which the socket should be bound. If null, the socket will not be bound.
      port - The port which the socket should use. If 0, a random port will be used. If > 0, but port is already in use, it will be incremented until an unused port is found, or until MAX_PORT is reached.
      Throws:
      Exception
    • createMulticastSocket

      public static MulticastSocket createMulticastSocket(int port) throws IOException
      Throws:
      IOException
    • createMulticastSocket

      public static MulticastSocket createMulticastSocket(InetAddress mcast_addr, int port, org.apache.commons.logging.Log log) throws IOException
      Throws:
      IOException
    • getBindAddress

      public static InetAddress getBindAddress(Properties props) throws UnknownHostException, SocketException
      Returns the address of the interface to use defined by bind_addr and bind_interface
      Parameters:
      props -
      Returns:
      Throws:
      UnknownHostException
      SocketException
    • checkForLinux

      public static boolean checkForLinux()
    • checkForSolaris

      public static boolean checkForSolaris()
    • checkForWindows

      public static boolean checkForWindows()
    • prompt

      public static void prompt(String s)
    • getJavaVersion

      public static int getJavaVersion()
    • unmodifiableVector

      public static <T> Vector<T> unmodifiableVector(Vector<? extends T> v)
    • memStats

      public static String memStats(boolean gc)
    • getFirstNonLoopbackAddress

      public static InetAddress getFirstNonLoopbackAddress() throws SocketException
      Throws:
      SocketException
    • getFirstNonLoopbackIPv6Address

      public static InetAddress getFirstNonLoopbackIPv6Address() throws SocketException
      Throws:
      SocketException
    • getAllAvailableInterfaces

      public static List<NetworkInterface> getAllAvailableInterfaces() throws SocketException
      Throws:
      SocketException
    • getProperty

      public static String getProperty(String[] system_props, Properties props, String prop_name, boolean ignore_sysprops, String default_value)
      Returns a value associated wither with one or more system properties, or found in the props map
      Parameters:
      system_props -
      props - List of properties read from the configuration file
      prop_name - The name of the property, will be removed from props if found
      ignore_sysprops - If true, system properties are not used and the values will only be retrieved from props (not system_props)
      default_value - Used to return a default value if the properties or system properties didn't have the value
      Returns:
      The value, or null if not found
    • isBindAddressPropertyIgnored

      public static boolean isBindAddressPropertyIgnored()
    • getMBeanServer

      public static MBeanServer getMBeanServer()
    • getProperty

      public static String getProperty(Protocol prot, String prop_name)
    • main

      public static void main(String[] args) throws Exception
      Throws:
      Exception
    • generateList

      public static String generateList(Collection c, String separator)
    • substituteVariable

      public static String substituteVariable(String val)
      Replaces variables of ${var:default} with System.getProperty(var, default). If no variables are found, returns the same string, otherwise a copy of the string with variables substituted
      Parameters:
      val -
      Returns:
      A string with vars replaced, or the same string if no vars found
    • md5

      public static String md5(String source)
      Converts a java.lang.String in to a MD5 hashed String
      Parameters:
      source - the source String
      Returns:
      the MD5 hashed version of the string
    • sha

      public static String sha(String source)
      Converts a java.lang.String in to a SHA hashed String
      Parameters:
      source - the source String
      Returns:
      the MD5 hashed version of the string