Author: fhanik Date: Fri Mar 3 09:21:10 2006 New Revision: 382892 URL: http://svn.apache.org/viewcvs?rev=382892&view=rev Log: Cluster is no longer dependent on JDK 1.5 and UUID, it has its own UUID generator
Added: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/util/UUIDGenerator.java Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/io/ClusterData.java tomcat/container/tc5.5.x/modules/groupcom/to-do.txt Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/io/ClusterData.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/io/ClusterData.java?rev=382892&r1=382891&r2=382892&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/io/ClusterData.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/io/ClusterData.java Fri Mar 3 09:21:10 2006 @@ -24,7 +24,7 @@ import org.apache.catalina.tribes.mcast.McastMember; import java.io.ByteArrayInputStream; import java.io.ObjectInputStream; -import java.util.UUID; +import org.apache.catalina.tribes.util.UUIDGenerator; import java.util.Arrays; /** @@ -37,7 +37,8 @@ * @since 5.5.10 */ public class ClusterData implements ChannelMessage { - + public static boolean USE_SECURE_RANDOM_FOR_UUID = false; + private int options = 0 ; private XByteBuffer message ; private long timestamp ; @@ -129,15 +130,8 @@ } public void generateUUID() { - UUID id = UUID.randomUUID(); - long msb = id.getMostSignificantBits(); - long lsb = id.getLeastSignificantBits(); byte[] data = new byte[16]; - //reduce byte copy - //System.arraycopy(XByteBuffer.toBytes(msb),0,data,0,8); - XByteBuffer.toBytes(msb,data,0); - //System.arraycopy(XByteBuffer.toBytes(lsb),0,data,8,8); - XByteBuffer.toBytes(lsb,data,8); + UUIDGenerator.randomUUID(USE_SECURE_RANDOM_FOR_UUID,data,0); setUniqueId(data); } Added: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/util/UUIDGenerator.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/util/UUIDGenerator.java?rev=382892&view=auto ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/util/UUIDGenerator.java (added) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/util/UUIDGenerator.java Fri Mar 3 09:21:10 2006 @@ -0,0 +1,68 @@ +/* + * Copyright 1999,2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.catalina.tribes.util; + +import java.security.SecureRandom; +import java.util.Random; + +/** + * simple generation of a UUID + * @author Filip Hanik + * @version 1.0 + */ +public class UUIDGenerator { + public static final int UUID_LENGTH = 16; + public static final int UUID_VERSION = 4; + public static final int BYTES_PER_INT = 4; + public static final int BITS_PER_BYTE = 8; + + protected static SecureRandom secrand = null; + protected static Random rand = new Random(System.currentTimeMillis()); + static { + secrand = new SecureRandom(); + secrand.setSeed(rand.nextLong()); + } + + public static byte[] randomUUID(boolean secure) { + byte[] result = new byte[UUID_LENGTH]; + return randomUUID(secure,result,0); + } + + public static byte[] randomUUID(boolean secure, byte[] into, int offset) { + if ( (offset+UUID_LENGTH)>into.length ) + throw new ArrayIndexOutOfBoundsException("Unable to fit "+UUID_LENGTH+" bytes into the array. length:"+into.length+" required length:"+(offset+UUID_LENGTH)); + Random r = (secure&&(secrand!=null))?secrand:rand; + nextBytes(into,offset,UUID_LENGTH,r); + into[6+offset] &= 0x0F; + into[6+offset] |= (UUID_VERSION << 4); + into[8+offset] &= 0x3F; //0011 1111 + into[8+offset] |= 0x80; //1000 0000 + return into; + } + public static void nextBytes(byte[] into, int offset, int length, Random r) { + int numRequested = length; + int numGot = 0, rnd = 0; + while (true) { + for (int i = 0; i < BYTES_PER_INT; i++) { + if (numGot == numRequested) return; + rnd = (i == 0 ? r.nextInt() : rnd >> BITS_PER_BYTE); + into[offset+numGot] = (byte) rnd; + numGot++; + } + } + } + +} \ No newline at end of file Modified: tomcat/container/tc5.5.x/modules/groupcom/to-do.txt URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/to-do.txt?rev=382892&r1=382891&r2=382892&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/to-do.txt (original) +++ tomcat/container/tc5.5.x/modules/groupcom/to-do.txt Fri Mar 3 09:21:10 2006 @@ -47,7 +47,8 @@ Once it has received state, it will pretty much take itself out of the loop The benefit of the new ParallelNioSender is that it doesn't require to know about a member to transfer state, all it has to do is to reply to a message that came in. - beee-aaaa-uuuu-tiful. + beee-aaaa-uuuu-tiful. state is a one time deal for the entire channel, so a + session replication cluster, would transfer state as one block, not one per context 14. Keepalive count and idle kill off --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]