User: pathoss 
  Date: 02/04/05 01:59:51

  Modified:    core/resources/xdoclet/ejb util.j
  Log:
  Added a GUID generator in the util object. This is disabled by default. Add 
includeGUID to the <utilobject/> subtask.
  
  Revision  Changes    Path
  1.16      +81 -1     xdoclet/core/resources/xdoclet/ejb/util.j
  
  Index: util.j
  ===================================================================
  RCS file: /cvsroot/xdoclet/xdoclet/core/resources/xdoclet/ejb/util.j,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -w -r1.15 -r1.16
  --- util.j    28 Mar 2002 00:00:57 -0000      1.15
  +++ util.j    5 Apr 2002 09:59:51 -0000       1.16
  @@ -11,6 +11,11 @@
   
   import java.util.Hashtable;
   
  +<XDtConfig:ifConfigParamEquals paramName="includeGUID" value="true">
  +import java.net.InetAddress;
  +import java.security.SecureRandom;
  +</XDtConfig:ifConfigParamEquals>
  +
   /**
    * <XDtI18n:getString bundle="xdoclet.ejb.Messages" resource="utility_class_for" 
arguments="<XDtEjb:ejbName/>"/>
   <XDtClass:classCommentTags indent="0"/> */
  @@ -73,4 +78,79 @@
   
      <XDtMerge:merge file="util-custom.j">
      </XDtMerge:merge>
  +
  +   <XDtConfig:ifConfigParamEquals paramName="includeGUID" value="true">
  +   /** Cached per JVM server IP. */
  +   private static String hexServerIP = null;
  +
  +   // initialise the secure random instance
  +   private static final SecureRandom seeder = new SecureRandom();
  +
  +   /**
  +    * A 32 byte GUID generator (Globally Unique ID). These artificial keys SHOULD 
<strong>NOT</strong> be seen by the user,
  +    * not even touched by the DBA but with very rare exceptions, just manipulated 
by the database and the programs.
  +    *
  +    * <p>Usage: Add an <code>id</code> field (type java.lang.String) to your EJB, 
and add <code>setId(XXXUtil.generateGUID(this));</code>
  +    * to the <code>ejbCreate</code> method.
  +    */
  +   public static final String generateGUID(Object o) {
  +       StringBuffer tmpBuffer = new StringBuffer(16);
  +       if (hexServerIP == null) {
  +           InetAddress localInetAddress = null;
  +           try {
  +               // get the inet address
  +               localInetAddress = InetAddress.getLocalHost();
  +           }
  +           catch (java.net.UnknownHostException uhe) {
  +               
System.err.println("<XDtClass:classOf><XDtEjbUtilObj:utilClass/></XDtClass:classOf>: 
could not get the local IP address using InetAddress.getLocalHost()!");
  +               // todo: find better way to get around this...
  +               uhe.printStackTrace();
  +               return null;
  +           }
  +           byte serverIP[] = localInetAddress.getAddress();
  +           hexServerIP = hexFormat(getInt(serverIP), 8);
  +       }
  +       // get the hashcode
  +       String hashcode = hexFormat(System.identityHashCode(o), 8);
  +       // set up a middle value as this is the same per method
  +       // call as is object specific and is the  ...-xxxx-xxxx-xxxx-xxxx..
  +       // mid part of the sequence
  +       tmpBuffer.append(hexServerIP);
  +       tmpBuffer.append(hashcode);
  +       long timeNow      = System.currentTimeMillis();
  +       int timeLow       = (int)timeNow & 0xFFFFFFFF;
  +       int node          = seeder.nextInt();
  +       StringBuffer guid = new StringBuffer(32);
  +       guid.append(hexFormat(timeLow, 8));
  +       guid.append(tmpBuffer.toString());
  +       guid.append(hexFormat(node, 8));
  +       return guid.toString();
  +   }
  +
  +   private static int getInt(byte bytes[]) {
  +       int i = 0;
  +       int j = 24;
  +       for (int k = 0; j >= 0; k++) {
  +           int l = bytes[k] & 0xff;
  +           i += l << j;
  +           j -= 8;
  +       }
  +       return i;
  +   }
  +
  +   private static String hexFormat(int i, int j) {
  +       String s = Integer.toHexString(i);
  +       return padHex(s, j) + s;
  +   }
  +
  +   private static String padHex(String s, int i) {
  +       StringBuffer tmpBuffer = new StringBuffer();
  +       if (s.length() < i) {
  +           for (int j = 0; j < i - s.length(); j++) {
  +               tmpBuffer.append('0');
  +           }
  +       }
  +       return tmpBuffer.toString();
  +   }
  +   </XDtConfig:ifConfigParamEquals>
   }
  
  
  

_______________________________________________
Xdoclet-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/xdoclet-devel

Reply via email to