Open Source Repository

Home /hibernate/hibernate-3.2.7.ga | Repository Home


org/hibernate/id/AbstractUUIDGenerator.java
//$Id: AbstractUUIDGenerator.java 5002 2004-12-19 16:25:07Z oneovthafew $
package org.hibernate.id;

import java.net.InetAddress;
import org.hibernate.util.BytesHelper;

/**
 * The base class for identifier generators that use a UUID algorithm. This
 * class implements the algorithm, subclasses define the identifier
 * format.
 *
 @see UUIDHexGenerator
 @author Gavin King
 */

public abstract class AbstractUUIDGenerator implements IdentifierGenerator {

  private static final int IP;
  static {
    int ipadd;
    try {
      ipadd = BytesHelper.toIntInetAddress.getLocalHost().getAddress() );
    }
    catch (Exception e) {
      ipadd = 0;
    }
    IP = ipadd;
  }
  private static short counter = (short0;
  private static final int JVM = (int) ( System.currentTimeMillis() >>> );

  public AbstractUUIDGenerator() {
  }

  /**
   * Unique across JVMs on this machine (unless they load this class
   * in the same quater second - very unlikely)
   */
  protected int getJVM() {
    return JVM;
  }

  /**
   * Unique in a millisecond for this JVM instance (unless there
   * are > Short.MAX_VALUE instances created in a millisecond)
   */
  protected short getCount() {
    synchronized(AbstractUUIDGenerator.class) {
      if (counter<0counter=0;
      return counter++;
    }
  }

  /**
   * Unique in a local network
   */
  protected int getIP() {
    return IP;
  }

  /**
   * Unique down to millisecond
   */
  protected short getHiTime() {
    return (short) ( System.currentTimeMillis() >>> 32 );
  }
  protected int getLoTime() {
    return (intSystem.currentTimeMillis();
  }


}