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 2005/02/09 00:15:06 UTC
cvs commit: jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session DeltaManager.java
fhanik 2005/02/08 15:15:06
Modified: modules/cluster/src/share/org/apache/catalina/cluster/session
DeltaManager.java
Log:
Set the context class loader while doing a state transfer, otherwise static struts classes fail loading
Revision Changes Path
1.38 +70 -60 jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java
Index: DeltaManager.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- DeltaManager.java 7 Feb 2005 21:56:32 -0000 1.37
+++ DeltaManager.java 8 Feb 2005 23:15:06 -0000 1.38
@@ -357,52 +357,28 @@
ObjectInputStream ois = null;
Loader loader = null;
ClassLoader classLoader = null;
+ ClassLoader originalLoader = Thread.currentThread().getContextClassLoader();
try {
- fis = new ByteArrayInputStream(data);
- BufferedInputStream bis = new BufferedInputStream(fis);
- if (container != null)
- loader = container.getLoader();
- if (loader != null)
- classLoader = loader.getClassLoader();
- if (classLoader != null) {
- ois = new CustomObjectInputStream(bis, classLoader);
- } else {
- ois = new ObjectInputStream(bis);
- }
- } catch (IOException e) {
- log.error(sm.getString("standardManager.loading.ioe", e), e);
- if (ois != null) {
- try {
- ois.close();
- } catch (IOException f) {
- ;
- }
- ois = null;
- }
- throw e;
- }
-
- // Load the previously unloaded active sessions
- synchronized (sessions) {
+
try {
- Integer count = (Integer) ois.readObject();
- int n = count.intValue();
- for (int i = 0; i < n; i++) {
- DeltaSession session = getNewDeltaSession();
- session.readObjectData(ois);
- session.setManager(this);
- session.setValid(true);
- session.setPrimarySession(false);
- //in case the nodes in the cluster are out of
- //time synch, this will make sure that we have the
- //correct timestamp, isValid returns true, cause accessCount=1
- session.access();
- //make sure that the session gets ready to expire if needed
- session.setAccessCount(0);
- sessions.put(session.getId(), session);
+ fis = new ByteArrayInputStream(data);
+ BufferedInputStream bis = new BufferedInputStream(fis);
+ if (container != null)
+ loader = container.getLoader();
+ if (loader != null)
+ classLoader = loader.getClassLoader();
+ if (classLoader != null) {
+ log.debug(
+ "\n\n\n[CLUSTER] Loading the object data with a class loader.\n\n\n");
+ ois = new CustomObjectInputStream(bis, classLoader);
+ Thread.currentThread().setContextClassLoader(classLoader);
+ } else {
+ log.debug(
+ "\n\n\n[CLUSTER] Loading the object data without a class loader.\n\n\n");
+ ois = new ObjectInputStream(bis);
}
- } catch (ClassNotFoundException e) {
- log.error(sm.getString("standardManager.loading.cnfe", e), e);
+ } catch (IOException e) {
+ log.error(sm.getString("standardManager.loading.ioe", e), e);
if (ois != null) {
try {
ois.close();
@@ -412,27 +388,61 @@
ois = null;
}
throw e;
- } catch (IOException e) {
- log.error(sm.getString("standardManager.loading.ioe", e), e);
- if (ois != null) {
+ }
+ // Load the previously unloaded active sessions
+ synchronized (sessions) {
+ try {
+ Integer count = (Integer) ois.readObject();
+ int n = count.intValue();
+ for (int i = 0; i < n; i++) {
+ DeltaSession session = getNewDeltaSession();
+ session.readObjectData(ois);
+ session.setManager(this);
+ session.setValid(true);
+ session.setPrimarySession(false);
+ //in case the nodes in the cluster are out of
+ //time synch, this will make sure that we have the
+ //correct timestamp, isValid returns true, cause accessCount=1
+ session.access();
+ //make sure that the session gets ready to expire if needed
+ session.setAccessCount(0);
+ sessions.put(session.getId(), session);
+ }
+ } catch (ClassNotFoundException e) {
+ log.error(sm.getString("standardManager.loading.cnfe", e),
+ e);
+ if (ois != null) {
+ try {
+ ois.close();
+ } catch (IOException f) {
+ ;
+ }
+ ois = null;
+ }
+ throw e;
+ } catch (IOException e) {
+ log.error(sm.getString("standardManager.loading.ioe", e), e);
+ if (ois != null) {
+ try {
+ ois.close();
+ } catch (IOException f) {
+ ;
+ }
+ ois = null;
+ }
+ throw e;
+ } finally {
+ // Close the input stream
try {
- ois.close();
+ if (ois != null)
+ ois.close();
} catch (IOException f) {
- ;
+ // ignored
}
- ois = null;
}
- throw e;
- } finally {
- // Close the input stream
- try {
- if (ois != null)
- ois.close();
- } catch (IOException f) {
- // ignored
- }
-
}
+ } finally {
+ if ( originalLoader != null ) Thread.currentThread().setContextClassLoader(originalLoader);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org