Author: markt
Date: Mon Dec 14 22:54:20 2009
New Revision: 890530
URL: http://svn.apache.org/viewvc?rev=890530&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=47774
Ensure any session listeners are called with the Thread CCL set to the web
application's class loader
Modified:
tomcat/trunk/java/org/apache/catalina/connector/Request.java
Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=890530&r1=890529&r2=890530&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Mon Dec 14
22:54:20 2009
@@ -2181,11 +2181,29 @@
} catch (IOException e) {
// Can't find the session
}
- if ((session != null) && session.isValid())
- return (true);
- else
- return (false);
+ // The call to session.isValid() can trigger session listeners so make
+ // sure we are using the webapp's class loader in case the listeners
are
+ // triggered
+ ClassLoader oldTccl = null;
+ if (context.getLoader() != null &&
+ context.getLoader().getClassLoader() != null) {
+ oldTccl = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(
+ context.getLoader().getClassLoader());
+ }
+
+ boolean result = false;
+ try {
+ if ((session != null) && session.isValid()) {
+ result = true;
+ }
+ } finally {
+ if (oldTccl != null) {
+ Thread.currentThread().setContextClassLoader(oldTccl);
+ }
+ }
+ return result;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]