remm 2004/07/15 12:12:45
Modified: catalina/src/share/org/apache/catalina/session
ManagerBase.java
Log:
- Cosmetic refactoring (well, to be fair, it decreases the number of syncs when
creating a session,
but makes the sync a little longer, which can't be too bad) addressing the todos
related to generateSessionId.
Revision Changes Path
1.30 +32 -39
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java
Index: ManagerBase.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- ManagerBase.java 25 Jun 2004 23:56:25 -0000 1.29
+++ ManagerBase.java 15 Jul 2004 19:12:45 -0000 1.30
@@ -650,23 +650,6 @@
session.setCreationTime(System.currentTimeMillis());
session.setMaxInactiveInterval(this.maxInactiveInterval);
String sessionId = generateSessionId();
-
- String jvmRoute = getJvmRoute();
- // @todo Move appending of jvmRoute generateSessionId()???
- if (jvmRoute != null) {
- sessionId += '.' + jvmRoute;
- }
- synchronized (sessions) {
- while (sessions.get(sessionId) != null){ // Guarantee uniqueness
- duplicates++;
- sessionId = generateSessionId();
- // @todo Move appending of jvmRoute generateSessionId()???
- if (jvmRoute != null) {
- sessionId += '.' + jvmRoute;
- }
- }
- }
-
session.setId(sessionId);
sessionCounter++;
@@ -789,30 +772,40 @@
protected synchronized String generateSessionId() {
byte random[] = new byte[16];
+ String jvmRoute = getJvmRoute();
+ String result = null;
// Render the result as a String of hexadecimal digits
- StringBuffer result = new StringBuffer();
- int resultLenBytes = 0;
- while (resultLenBytes < this.sessionIdLength) {
- getRandomBytes(random);
- random = getDigest().digest(random);
- for (int j = 0;
- j < random.length && resultLenBytes < this.sessionIdLength;
- j++) {
- byte b1 = (byte) ((random[j] & 0xf0) >> 4);
- byte b2 = (byte) (random[j] & 0x0f);
- if (b1 < 10)
- result.append((char) ('0' + b1));
- else
- result.append((char) ('A' + (b1 - 10)));
- if (b2 < 10)
- result.append((char) ('0' + b2));
- else
- result.append((char) ('A' + (b2 - 10)));
- resultLenBytes++;
+ StringBuffer buffer = new StringBuffer();
+ do {
+ int resultLenBytes = 0;
+ if (result != null)
+ buffer = new StringBuffer();
+ while (resultLenBytes < this.sessionIdLength) {
+ getRandomBytes(random);
+ random = getDigest().digest(random);
+ for (int j = 0;
+ j < random.length && resultLenBytes < this.sessionIdLength;
+ j++) {
+ byte b1 = (byte) ((random[j] & 0xf0) >> 4);
+ byte b2 = (byte) (random[j] & 0x0f);
+ if (b1 < 10)
+ buffer.append((char) ('0' + b1));
+ else
+ buffer.append((char) ('A' + (b1 - 10)));
+ if (b2 < 10)
+ buffer.append((char) ('0' + b2));
+ else
+ buffer.append((char) ('A' + (b2 - 10)));
+ resultLenBytes++;
+ }
}
- }
- return (result.toString());
+ if (jvmRoute != null) {
+ buffer.append('.').append(jvmRoute);
+ }
+ result = buffer.toString();
+ } while (sessions.get(result) != null);
+ return (result);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]