[jboss-cvs] JBossAS SVN: r79149 - trunk/tomcat/src/main/org/jboss/web/tomcat/service/session.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Oct 6 08:42:28 EDT 2008


Author: bstansberry at jboss.com
Date: 2008-10-06 08:42:27 -0400 (Mon, 06 Oct 2008)
New Revision: 79149

Modified:
   trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheManager.java
Log:
[JBAS-6040] Ensure correct TCCL is set before accessing clustered web session cache

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheManager.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheManager.java	2008-10-06 12:35:24 UTC (rev 79148)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheManager.java	2008-10-06 12:42:27 UTC (rev 79149)
@@ -21,6 +21,7 @@
 */
 package org.jboss.web.tomcat.service.session;
 
+import java.security.AccessController;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -44,6 +45,7 @@
 import org.jboss.metadata.web.jboss.ReplicationGranularity;
 import org.jboss.metadata.web.jboss.ReplicationTrigger;
 import org.jboss.metadata.web.jboss.SnapshotMode;
+import org.jboss.util.loading.ContextClassLoaderSwitcher;
 import org.jboss.web.tomcat.service.session.distributedcache.spi.BatchingManager;
 import org.jboss.web.tomcat.service.session.distributedcache.spi.ClusteringNotSupportedException;
 import org.jboss.web.tomcat.service.session.distributedcache.spi.DistributableSessionMetadata;
@@ -1440,6 +1442,7 @@
 
       synchronized (session)
       {
+         ContextClassLoaderSwitcher.SwitchContext switcher = null; 
          boolean doTx = false; 
          try
          {
@@ -1457,6 +1460,11 @@
             // session if data gravitation occurs. 
             SessionReplicationContext.startCacheActivity();
             
+            // Tomcat calls Manager.findSession before setting the tccl,
+            // so we need to do it :(
+            switcher = getContextClassLoaderSwitcher().getSwitchContext();
+            switcher.setClassLoader(tcl_);
+            
             session = proxy_.loadSession(realId, session);
             
             if (session != null)
@@ -1492,6 +1500,10 @@
                }
             }
             finally {
+               if (switcher != null)
+               {
+                  switcher.reset();
+               }
                SessionReplicationContext.finishCacheActivity();
             }
          }
@@ -2160,6 +2172,11 @@
       return sb.toString();
    }   
    
+   private static ContextClassLoaderSwitcher getContextClassLoaderSwitcher()
+   {
+      return (ContextClassLoaderSwitcher) AccessController.doPrivileged(ContextClassLoaderSwitcher.INSTANTIATOR);
+   }
+   
    // ------------------------------------------------------------ Inner Classes
    
    private class OwnedSessionUpdate




More information about the jboss-cvs-commits mailing list