1 /*************************************************************************************** 2 * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved. * 3 * http://aspectwerkz.codehaus.org * 4 * ---------------------------------------------------------------------------------- * 5 * The software in this package is published under the terms of the LGPL license * 6 * a copy of which has been included with this distribution in the license.txt file. * 7 **************************************************************************************/ 8 package org.codehaus.aspectwerkz.proxy; 9 10 /*** 11 * NOTE: 12 * <p/> 13 * This code is based on code from the [Plasmid Replication Engine] project. 14 * <br/> 15 * Licensed under [Mozilla Public License 1.0 (MPL)]. 16 * <p/> 17 * Original JavaDoc: 18 * <p/> 19 * Our distributed objects are generally named most efficiently (and cleanly) 20 * by their UUID's. This class provides some static helpers for using UUID's. 21 * If it was efficient to do in Java, I would make the uuid an normal class 22 * and use instances of it. However, in current JVM's, we would end up using an 23 * Object to represent a long, which is pretty expensive. Maybe someday. ### 24 * <p/> 25 * UUID format: currently using currentTimeMillis() for the low bits. This uses 26 * about 40 bits for the next 1000 years, leaving 24 bits for debugging 27 * and consistency data. I'm using 8 of those for a magic asci 'U' byte. 28 * <p/> 29 * Future: use one instance of Uuid per type of object for better performance 30 * and more detailed info (instance could be matched to its uuid's via a map or 31 * array). This all static version bites.### 32 */ 33 public final class Uuid { 34 35 public static final long UUID_NONE = 0; 36 public static final long UUID_WILD = -1; 37 public static final long UUID_MAGICMASK = 0xff << 56; 38 public static final long UUID_MAGIC = 'U' << 56; 39 40 protected static long lastTime; 41 42 /*** 43 * Generate and return a new Universally Unique ID. 44 * Happens to be monotonically increasing. 45 */ 46 public synchronized static long newUuid() { 47 long time = System.currentTimeMillis(); 48 49 if (time <= lastTime) { 50 time = lastTime + 1; 51 } 52 lastTime = time; 53 return UUID_MAGIC | time; 54 } 55 56 /*** 57 * Returns true if uuid could have been generated by Uuid. 58 */ 59 public static boolean isValid(final long uuid) { 60 return (uuid & UUID_MAGICMASK) == UUID_MAGIC 61 && (uuid & ~UUID_MAGICMASK) != 0; 62 } 63 } 64