[jboss-cvs] JBossAS SVN: r109228 - projects/cluster/ha-server-cache-ispn/trunk/src/main/java/org/jboss/web/tomcat/service/session/distributedcache/ispn.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 10 10:44:01 EST 2010


Author: pferraro
Date: 2010-11-10 10:44:00 -0500 (Wed, 10 Nov 2010)
New Revision: 109228

Modified:
   projects/cluster/ha-server-cache-ispn/trunk/src/main/java/org/jboss/web/tomcat/service/session/distributedcache/ispn/DefaultLockManagerSource.java
Log:
Create lock entry using this object's class loader, not the thread context classloader, as lock managers are a shared resource.

Modified: projects/cluster/ha-server-cache-ispn/trunk/src/main/java/org/jboss/web/tomcat/service/session/distributedcache/ispn/DefaultLockManagerSource.java
===================================================================
--- projects/cluster/ha-server-cache-ispn/trunk/src/main/java/org/jboss/web/tomcat/service/session/distributedcache/ispn/DefaultLockManagerSource.java	2010-11-10 15:10:44 UTC (rev 109227)
+++ projects/cluster/ha-server-cache-ispn/trunk/src/main/java/org/jboss/web/tomcat/service/session/distributedcache/ispn/DefaultLockManagerSource.java	2010-11-10 15:44:00 UTC (rev 109228)
@@ -21,6 +21,7 @@
  */
 package org.jboss.web.tomcat.service.session.distributedcache.ispn;
 
+import java.security.AccessController;
 import java.util.HashSet;
 import java.util.IdentityHashMap;
 import java.util.Map;
@@ -36,6 +37,7 @@
 import org.jboss.ha.core.framework.server.CoreGroupCommunicationService;
 import org.jboss.ha.framework.server.lock.SharedLocalYieldingClusterLockManager;
 import org.jboss.logging.Logger;
+import org.jboss.util.loading.ContextClassLoaderSwitcher;
 import org.jgroups.Channel;
 
 /**
@@ -55,6 +57,10 @@
    // Store LockManagers in static map so they can be shared across DCMs
    private static final Map<CacheContainer, LockManagerEntry> lockManagers = new IdentityHashMap<CacheContainer, LockManagerEntry>();
    
+   // Need to cast since ContextClassLoaderSwitcher.NewInstance does not generically implement PrivilegedAction<ContextClassLoaderSwitcher>
+   @SuppressWarnings("unchecked")
+   private final ContextClassLoaderSwitcher switcher = (ContextClassLoaderSwitcher) AccessController.doPrivileged(ContextClassLoaderSwitcher.INSTANTIATOR);
+   
    /**
     * {@inheritDoc}
     * @see org.jboss.web.tomcat.service.session.distributedcache.ispn.LockManagerSource#getLockManager(org.infinispan.Cache)
@@ -73,9 +79,18 @@
          if (entry == null)
          {
             JGroupsTransport transport = (JGroupsTransport) cache.getAdvancedCache().getRpcManager().getTransport();
-
-            entry = new LockManagerEntry(transport.getChannel());
             
+            ContextClassLoaderSwitcher.SwitchContext context = this.switcher.getSwitchContext(this.getClass().getClassLoader());
+            
+            try
+            {
+               entry = new LockManagerEntry(transport.getChannel());
+            }
+            finally
+            {
+               context.reset();
+            }
+            
             trace("Started lock manager for cluster %s", entry);
             
             ((EmbeddedCacheManager) container).addListener(this);



More information about the jboss-cvs-commits mailing list