You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2003/07/02 13:45:56 UTC

cvs commit: xml-axis/java/test/components TestUUID.java

dims        2003/07/02 04:45:56

  Modified:    java/src/org/apache/axis/transport/mail MailSender.java
               java/src/org/apache/axis/ime/internal
                        MessageExchangeImpl.java
               java/src/org/apache/axis/components/uuid SimpleUUIDGen.java
                        UUIDGen.java UUIDGenFactory.java
               java/test/components TestUUID.java
  Log:
  - Cleanup UUIDGen, remove unnecessary code
  - Make it faster by not creating a new SecureRandom all the time
  - Make it pluggable just like compiler and socket factories
  
  Revision  Changes    Path
  1.3       +1 -1      xml-axis/java/src/org/apache/axis/transport/mail/MailSender.java
  
  Index: MailSender.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/transport/mail/MailSender.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MailSender.java	22 Apr 2003 19:35:55 -0000	1.2
  +++ MailSender.java	2 Jul 2003 11:45:50 -0000	1.3
  @@ -88,7 +88,7 @@
   public class MailSender extends BasicHandler {
   
       protected static Log log = LogFactory.getLog(MailSender.class.getName());
  -    private UUIDGen uuidGen = UUIDGenFactory.getUUIDGen(null);
  +    private UUIDGen uuidGen = UUIDGenFactory.getUUIDGen();
   
       Properties prop = new Properties();
       Session session = Session.getDefaultInstance(prop, null);
  
  
  
  1.18      +1 -1      xml-axis/java/src/org/apache/axis/ime/internal/MessageExchangeImpl.java
  
  Index: MessageExchangeImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/ime/internal/MessageExchangeImpl.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- MessageExchangeImpl.java	22 Apr 2003 19:35:10 -0000	1.17
  +++ MessageExchangeImpl.java	2 Jul 2003 11:45:56 -0000	1.18
  @@ -116,7 +116,7 @@
                           MessageExchangeConstants.MESSAGE_CORRELATOR_PROPERTY);
           if (correlator == null) {
               correlator = new SimpleMessageExchangeCorrelator(
  -                    UUIDGenFactory.getUUIDGen(null).nextUUID());
  +                    UUIDGenFactory.getUUIDGen().nextUUID());
               context.setProperty(
                       MessageExchangeConstants.MESSAGE_CORRELATOR_PROPERTY,
                       correlator);
  
  
  
  1.5       +23 -28    xml-axis/java/src/org/apache/axis/components/uuid/SimpleUUIDGen.java
  
  Index: SimpleUUIDGen.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/components/uuid/SimpleUUIDGen.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SimpleUUIDGen.java	27 Jun 2003 06:53:05 -0000	1.4
  +++ SimpleUUIDGen.java	2 Jul 2003 11:45:56 -0000	1.5
  @@ -80,7 +80,29 @@
       private static final int clock_sequence = (new Random()).nextInt(16384);
       private static final byte ZERO = (byte) 48; // "0"
       private static final byte ONE  = (byte) 49; // "1"
  +    private static Random secureRandom = null;
   
  +    static {
  +        // problem: the node should be the IEEE 802 ethernet address, but can not
  +        // be retrieved in Java yet.
  +        // see bug ID 4173528
  +        // workaround (also suggested in bug ID 4173528)
  +        // If a system wants to generate UUIDs but has no IEE 802 compliant
  +        // network card or other source of IEEE 802 addresses, then this section
  +        // describes how to generate one.
  +        // The ideal solution is to obtain a 47 bit cryptographic quality random
  +        // number, and use it as the low 47 bits of the node ID, with the most
  +        // significant bit of the first octet of the node ID set to 1. This bit
  +        // is the unicast/multicast bit, which will never be set in IEEE 802
  +        // addresses obtained from network cards; hence, there can never be a
  +        // conflict between UUIDs generated by machines with and without network
  +        // cards.
  +        try {
  +            secureRandom = SecureRandom.getInstance("SHA1PRNG", "SUN");
  +        } catch (Exception e) {
  +            secureRandom = new Random();
  +        }
  +    }
   
       /**
        * utility method which returns a bitString with left zero padding
  @@ -89,7 +111,7 @@
        *
        * @return a left zero padded string of at least <tt>len</tt> chars
        * @param bitString a String to pad
  -     * @param the length under which bitString needs padding
  +     * @param len the length under which bitString needs padding
        */
       private static final String leftZeroPadString(String bitString, int len) {
           if (bitString.length() < len) {
  @@ -181,27 +203,6 @@
           String clockSeqLow = Long.toHexString((new BigInteger(new String(reverseArray(clock_seq_low)), 2)).longValue());
           clockSeqLow = leftZeroPadString(clockSeqLow, 2);
   
  -        // problem: the node should be the IEEE 802 ethernet address, but can not
  -        // be retrieved in Java yet.
  -        // see bug ID 4173528
  -        // workaround (also suggested in bug ID 4173528)
  -        // If a system wants to generate UUIDs but has no IEE 802 compliant
  -        // network card or other source of IEEE 802 addresses, then this section
  -        // describes how to generate one.
  -        // The ideal solution is to obtain a 47 bit cryptographic quality random
  -        // number, and use it as the low 47 bits of the node ID, with the most
  -        // significant bit of the first octet of the node ID set to 1. This bit
  -        // is the unicast/multicast bit, which will never be set in IEEE 802
  -        // addresses obtained from network cards; hence, there can never be a
  -        // conflict between UUIDs generated by machines with and without network
  -        // cards.
  -        Random secureRandom = null;
  -        try {
  -            secureRandom = SecureRandom.getInstance("SHA1PRNG", "SUN");
  -        } catch (Exception e) {
  -            secureRandom = new Random();
  -        }
  -
           long nodeValue = secureRandom.nextLong();
           nodeValue = Math.abs(nodeValue);
           while (nodeValue > 140737488355328L) {
  @@ -239,11 +240,5 @@
               result[i] = bits[result.length - 1 - i];
   
           return result;
  -    }
  -
  -    public void destroy() {
  -    }
  -
  -    public void init() {
       }
   }
  
  
  
  1.3       +0 -4      xml-axis/java/src/org/apache/axis/components/uuid/UUIDGen.java
  
  Index: UUIDGen.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/components/uuid/UUIDGen.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- UUIDGen.java	22 Apr 2003 19:34:13 -0000	1.2
  +++ UUIDGen.java	2 Jul 2003 11:45:56 -0000	1.3
  @@ -75,9 +75,5 @@
    * @since   JDK1.2.2
    */
   public interface UUIDGen {
  -    public void init();
  -
  -    public void destroy();
  -
       public String nextUUID();
   }
  
  
  
  1.4       +12 -35    xml-axis/java/src/org/apache/axis/components/uuid/UUIDGenFactory.java
  
  Index: UUIDGenFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/components/uuid/UUIDGenFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- UUIDGenFactory.java	22 Apr 2003 19:34:13 -0000	1.3
  +++ UUIDGenFactory.java	2 Jul 2003 11:45:56 -0000	1.4
  @@ -59,10 +59,12 @@
    *  (http://sourceforge.net/projects/juddi/)
    * 
    */
  -
   package org.apache.axis.components.uuid;
   
   import org.apache.axis.i18n.Messages;
  +import org.apache.axis.components.logger.LogFactory;
  +import org.apache.axis.AxisProperties;
  +import org.apache.commons.logging.Log;
   
   /**
    * A Universally Unique Identifier (UUID) is a 128 bit number generated
  @@ -76,44 +78,19 @@
    * @since   JDK1.2.2
    */
   public abstract class UUIDGenFactory {
  -    private static final String defaultUUIDGenClassName = "org.apache.axis.components.uuid.SimpleUUIDGen";
  -
  -    /**
  -     * getInstance
  -     *
  -     * Returns the singleton instance of UUIDGen
  -     */
  -    public static UUIDGen getUUIDGen(String uuidgenClassName) {
  -        UUIDGen uuidgen = null;
  -
  -        if ((uuidgenClassName == null) || (uuidgenClassName.length() == 0)) {
  -            // use the default UUIDGen implementation
  -            uuidgenClassName = defaultUUIDGenClassName;
  -        }
  +    protected static Log log = LogFactory.getLog(UUIDGenFactory.class.getName());
   
  -        Class uuidgenClass = null;
  -        try {
  -            // instruct the class loader to load the UUIDGen implementation
  -            uuidgenClass = java.lang.Class.forName(uuidgenClassName);
  -        } catch (ClassNotFoundException e) {
  -            throw new RuntimeException(Messages.getMessage("uuidGenFactoryCNFE00", uuidgenClassName));
  -        }
  -
  -        try {
  -            // try to instantiate the UUIDGen subclass
  -            uuidgen = (UUIDGen) uuidgenClass.newInstance();
  -        } catch (java.lang.Exception e) {
  -            throw new RuntimeException(Messages.getMessage("uuidGenFactoryException02", uuidgenClass.getName(), e.getMessage()));
  -        }
  -
  -        return uuidgen;
  +    static {
  +        AxisProperties.setClassOverrideProperty(Compiler.class, "axis.UUIDGenerator");
  +        AxisProperties.setClassDefault(UUIDGen.class, "org.apache.axis.components.uuid.SimpleUUIDGen");
       }
   
       /**
  -     * Release any aquired external resources and stop any background threads.
  +     * Returns an instance of UUIDGen
        */
  -    public static void destroyUUIDGen(UUIDGen uuidgen) {
  -        if (uuidgen != null)
  -            uuidgen.destroy();
  +    public static UUIDGen getUUIDGen() {
  +        UUIDGen uuidgen = (UUIDGen) AxisProperties.newInstance(UUIDGen.class);
  +        log.debug("axis.UUIDGenerator:" + uuidgen.getClass().getName());
  +        return uuidgen;
       }
   }
  
  
  
  1.3       +1 -3      xml-axis/java/test/components/TestUUID.java
  
  Index: TestUUID.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/components/TestUUID.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestUUID.java	22 Apr 2003 19:36:33 -0000	1.2
  +++ TestUUID.java	2 Jul 2003 11:45:56 -0000	1.3
  @@ -83,7 +83,7 @@
           long endTime = 0;
           UUIDGen uuidgen = null;
   
  -        uuidgen = UUIDGenFactory.getUUIDGen(null);
  +        uuidgen = UUIDGenFactory.getUUIDGen();
           startTime = System.currentTimeMillis();
           for (int i = 1; i <= 10; ++i) {
               String u = uuidgen.nextUUID();
  @@ -91,7 +91,5 @@
           }
           endTime = System.currentTimeMillis();
           System.out.println("UUIDGen took " + (endTime - startTime) + " milliseconds");
  -
  -        UUIDGenFactory.destroyUUIDGen(uuidgen);
       }
   }