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]