fhanik 2004/11/19 09:20:02
Modified: modules/cluster/src/share/org/apache/catalina/cluster/session
Tag: TOMCAT_5_0 DeltaRequest.java
Log:
Fixed synchronization issues, since its getting more common that people still
have to have multiple threads accessing their session
Revision Changes Path
No revision
No revision
1.7.2.1 +28 -11
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaRequest.java
Index: DeltaRequest.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaRequest.java,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -r1.7 -r1.7.2.1
--- DeltaRequest.java 27 Feb 2004 14:58:56 -0000 1.7
+++ DeltaRequest.java 19 Nov 2004 17:20:02 -0000 1.7.2.1
@@ -35,6 +35,9 @@
public class DeltaRequest implements Externalizable {
+
+ public static org.apache.commons.logging.Log log =
+ org.apache.commons.logging.LogFactory.getLog( DeltaRequest.class );
public static final int TYPE_ATTRIBUTE = 0;
public static final int TYPE_PRINCIPAL = 1;
@@ -93,13 +96,18 @@
addAction(TYPE_ISNEW,action,NAME_ISNEW,new Boolean(n));
}
- protected void addAction(int type,
+ protected synchronized void addAction(int type,
int action,
String name,
Object value) {
AttributeInfo info = null;
if ( this.actionPool.size() > 0 ) {
- info = (AttributeInfo)actionPool.removeFirst();
+ try {
+ info = (AttributeInfo) actionPool.removeFirst();
+ }catch ( Exception x ) {
+ log.error("Error removing actions:",x);
+ info = new AttributeInfo(type, action, name, value);
+ }
info.init(type,action,name,value);
} else {
info = new AttributeInfo(type, action, name, value);
@@ -111,7 +119,7 @@
actions.addLast(info);
}
- public void execute(DeltaSession session) {
+ public synchronized void execute(DeltaSession session) {
if ( !this.sessionId.equals( session.getId() ) )
throw new java.lang.IllegalArgumentException("Session id
mismatch, not executing the delta request");
session.access();
@@ -148,11 +156,15 @@
session.endAccess();
}
- public void reset() {
+ public synchronized void reset() {
while ( actions.size() > 0 ) {
- AttributeInfo info = (AttributeInfo)actions.removeFirst();
- info.recycle();
- actionPool.addLast(info);
+ try {
+ AttributeInfo info = (AttributeInfo) actions.removeFirst();
+ info.recycle();
+ actionPool.addLast(info);
+ }catch ( Exception x ) {
+ log.error("Error removing actions:",x);
+ }
}
actions.clear();
}
@@ -170,12 +182,12 @@
return actions.size();
}
- public void clear() {
+ public synchronized void clear() {
actions.clear();
actionPool.clear();
}
- public void readExternal(java.io.ObjectInput in) throws
java.io.IOException,
+ public synchronized void readExternal(java.io.ObjectInput in) throws
java.io.IOException,
java.lang.ClassNotFoundException {
//sessionId - String
//recordAll - boolean
@@ -192,7 +204,12 @@
for (int i = 0; i < cnt; i++) {
AttributeInfo info = null;
if (this.actionPool.size() > 0) {
- info = (AttributeInfo) actionPool.removeFirst();
+ try {
+ info = (AttributeInfo) actionPool.removeFirst();
+ } catch (Exception x) {
+ log.error("Error removing actions:", x);
+ info = new AttributeInfo( -1, -1, null, null);
+ }
}
else {
info = new AttributeInfo(-1,-1,null,null);
@@ -204,7 +221,7 @@
- public void writeExternal(java.io.ObjectOutput out ) throws
java.io.IOException {
+ public synchronized void writeExternal(java.io.ObjectOutput out ) throws
java.io.IOException {
//sessionId - String
//recordAll - boolean
//size - int
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]