FileDocCategorySizeDatePackage
UniqueIdGenerator.javaAPI DocGlassfish v2 API4774Fri May 04 22:35:00 BST 2007com.sun.enterprise.instance

UniqueIdGenerator

public class UniqueIdGenerator extends Object
Generates unique id for an application or stand alone ejb module. It uses the low order 6 bytes of the system current time. The remaining 2 bytes are reserved for the beans inside the application and stand alone ejb module. The unique id generated by this generator will eventually wrap after 2^48 milli-seconds (8,925.25 years). The two bytes reserved for the beans in the application or stand alone ejb module will allow max 2^16 (65,536) beans.
author
Nazrul Islam
since
JDK1.4

Fields Summary
private long
_lastUid
last unique id given out by this id generator
private static UniqueIdGenerator
_instance
the singleton instance
private static Logger
_logger
Constructors Summary
private UniqueIdGenerator()


     
        _instance = new UniqueIdGenerator();
     
Methods Summary
public static com.sun.enterprise.instance.UniqueIdGeneratorgetInstance()
Returns the singleton instance of this class.

return
the singleton instance

        return _instance;
    
public longgetNextUniqueId()
Returns the next unique id for an application or stand alone ejb module.

return
the next unique id


        synchronized (this) {
            while (true) {
                long uid  = System.currentTimeMillis();

                // uses the low order 6 bytes as unique id;
                // remaining 2 bytes are reserved for the beans inside the app
                uid       = (uid << 16);

                // ensures that we have a unique id
                if (this._lastUid != uid) {
                    this._lastUid = uid;
                    break;
                } else {
                    try {
                        Thread.currentThread().sleep(1);
                    } catch (InterruptedException ie) {
                        // log debug msg here
						_logger.log(Level.WARNING,"Thread.sleep interrupted ",ie);
                    }
                }
            }
            return this._lastUid;
        }