You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2006/05/21 20:26:02 UTC
svn commit: r408460 - in /tomcat/container/tc5.5.x/modules:
cluster/src/share/org/apache/catalina/cluster/session/
ha/src/share/org/apache/catalina/ha/session/
Author: fhanik
Date: Sun May 21 11:26:01 2006
New Revision: 408460
URL: http://svn.apache.org/viewvc?rev=408460&view=rev
Log:
When applying a new attribute, make sure to set the threads context class loader correctly.
Modified:
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/BackupManager.java
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/ClusterManagerBase.java
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/DeltaManager.java
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/DeltaSession.java
Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java?rev=408460&r1=408459&r2=408460&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java (original)
+++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java Sun May 21 11:26:01 2006
@@ -198,6 +198,20 @@
// ------------------------------------------------------------- Properties
+ public static ClassLoader[] getClassLoaders(Container container) {
+ Loader loader = null;
+ ClassLoader classLoader = null;
+ if (container != null) loader = container.getLoader();
+ if (loader != null) classLoader = loader.getClassLoader();
+ else classLoader = Thread.currentThread().getContextClassLoader();
+ if ( classLoader == Thread.currentThread().getContextClassLoader() ) {
+ return new ClassLoader[] {classLoader};
+ } else {
+ return new ClassLoader[] {classLoader,Thread.currentThread().getContextClassLoader()};
+ }
+ }
+
+
/**
* Return descriptive information about this Manager implementation and the
* corresponding version number, in the format
@@ -678,19 +692,8 @@
ByteArrayInputStream fis = null;
ReplicationStream ois = null;
Loader loader = null;
- ClassLoader classLoader = null;
- //fix to be able to run the DeltaManager
- //stand alone without a container.
- //use the Threads context class loader
- if (container != null)
- loader = container.getLoader();
- if (loader != null)
- classLoader = loader.getClassLoader();
- else
- classLoader = Thread.currentThread().getContextClassLoader();
- //end fix
fis = new ByteArrayInputStream(data);
- ois = new ReplicationStream(fis, classLoader);
+ ois = new ReplicationStream(fis, getClassLoaders(this.container)[0]);
session.getDeltaRequest().readExternal(ois);
ois.close();
return session.getDeltaRequest();
@@ -1482,7 +1485,10 @@
if(isSendClusterDomainOnly() && !checkSenderDomain(msg,sender)) {
return;
}
+ ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
try {
+ ClassLoader[] loaders = getClassLoaders(container);
+ if ( loaders != null && loaders.length > 0 ) Thread.currentThread().setContextClassLoader(loaders[0]);
if (log.isDebugEnabled())
log.debug(sm.getString("deltaManager.receiveMessage.eventType",
getName(), msg.getEventTypeString(), sender));
@@ -1524,6 +1530,8 @@
} catch (Exception x) {
log.error(sm.getString("deltaManager.receiveMessage.error",
getName()), x);
+ } finally {
+ Thread.currentThread().setContextClassLoader(contextLoader);
}
}
Modified: tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/BackupManager.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/BackupManager.java?rev=408460&r1=408459&r2=408460&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/BackupManager.java (original)
+++ tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/BackupManager.java Sun May 21 11:26:01 2006
@@ -140,16 +140,7 @@
}
public ClassLoader[] getClassLoaders() {
- Loader loader = null;
- ClassLoader classLoader = null;
- if (container != null) loader = container.getLoader();
- if (loader != null) classLoader = loader.getClassLoader();
- if ( classLoader == null ) classLoader = Thread.currentThread().getContextClassLoader();
- if ( classLoader == Thread.currentThread().getContextClassLoader() ) {
- return new ClassLoader[] {classLoader};
- } else {
- return new ClassLoader[] {classLoader,Thread.currentThread().getContextClassLoader()};
- }
+ return ClusterManagerBase.getClassLoaders(this.container);
}
/**
Modified: tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/ClusterManagerBase.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/ClusterManagerBase.java?rev=408460&r1=408459&r2=408460&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/ClusterManagerBase.java (original)
+++ tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/ClusterManagerBase.java Sun May 21 11:26:01 2006
@@ -24,6 +24,7 @@
import java.io.ByteArrayInputStream;
import java.io.IOException;
import org.apache.catalina.tribes.io.ReplicationStream;
+import org.apache.catalina.Container;
/**
*
@@ -33,7 +34,8 @@
public abstract class ClusterManagerBase extends ManagerBase implements Lifecycle, PropertyChangeListener, ClusterManager{
- public ClassLoader[] getClassLoaders() {
+
+ public static ClassLoader[] getClassLoaders(Container container) {
Loader loader = null;
ClassLoader classLoader = null;
if (container != null) loader = container.getLoader();
@@ -44,6 +46,11 @@
} else {
return new ClassLoader[] {classLoader,Thread.currentThread().getContextClassLoader()};
}
+ }
+
+
+ public ClassLoader[] getClassLoaders() {
+ return getClassLoaders(container);
}
/**
Modified: tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/DeltaManager.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/DeltaManager.java?rev=408460&r1=408459&r2=408460&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/DeltaManager.java (original)
+++ tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/DeltaManager.java Sun May 21 11:26:01 2006
@@ -1282,7 +1282,11 @@
if(isSendClusterDomainOnly() && !checkSenderDomain(msg,sender)) {
return;
}
+ ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
try {
+
+ ClassLoader[] loaders = getClassLoaders();
+ if ( loaders != null && loaders.length > 0) Thread.currentThread().setContextClassLoader(loaders[0]);
if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.eventType",getName(), msg.getEventTypeString(), sender));
switch (msg.getEventType()) {
@@ -1321,6 +1325,8 @@
} //switch
} catch (Exception x) {
log.error(sm.getString("deltaManager.receiveMessage.error",getName()), x);
+ } finally {
+ Thread.currentThread().setContextClassLoader(contextLoader);
}
}
Modified: tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/DeltaSession.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/DeltaSession.java?rev=408460&r1=408459&r2=408460&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/DeltaSession.java (original)
+++ tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/ha/session/DeltaSession.java Sun May 21 11:26:01 2006
@@ -41,6 +41,8 @@
import org.apache.catalina.tribes.tipis.ReplicatedMapEntry;
import org.apache.catalina.util.Enumerator;
import org.apache.catalina.util.StringManager;
+import org.apache.catalina.session.StandardManager;
+import org.apache.catalina.session.ManagerBase;
/**
*
@@ -133,6 +135,18 @@
return getDeltaRequest().serialize();
}
+ public ClassLoader[] getClassLoaders() {
+ if ( manager instanceof BackupManager ) return ((BackupManager)manager).getClassLoaders();
+ else if ( manager instanceof ClusterManagerBase ) return ((ClusterManagerBase)manager).getClassLoaders();
+ else if ( manager instanceof StandardManager ) {
+ StandardManager sm = (StandardManager)manager;
+ return ClusterManagerBase.getClassLoaders(sm.getContainer());
+ } else if ( manager instanceof ManagerBase ) {
+ ManagerBase mb = (ManagerBase)manager;
+ return ClusterManagerBase.getClassLoaders(mb.getContainer());
+ }//end if
+ return null;
+ }
/**
* Applies a diff to an existing object.
@@ -144,7 +158,14 @@
public void applyDiff(byte[] diff, int offset, int length) throws IOException, ClassNotFoundException {
ReplicationStream stream = ((ClusterManager)getManager()).getReplicationStream(diff,offset,length);
getDeltaRequest().readExternal(stream);
- getDeltaRequest().execute(this);
+ ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ ClassLoader[] loaders = getClassLoaders();
+ if ( loaders != null && loaders.length >0 ) Thread.currentThread().setContextClassLoader(loaders[0]);
+ getDeltaRequest().execute(this);
+ }finally {
+ Thread.currentThread().setContextClassLoader(contextLoader);
+ }
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org