[jboss-cvs] JBossAS SVN: r60247 - trunk/ejb3/src/main/org/jboss/ejb3/cache/tree.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sat Feb 3 23:59:10 EST 2007


Author: bstansberry at jboss.com
Date: 2007-02-03 23:59:10 -0500 (Sat, 03 Feb 2007)
New Revision: 60247

Modified:
   trunk/ejb3/src/main/org/jboss/ejb3/cache/tree/StatefulTreeCache.java
Log:
[EJBTHREE-863] Set the correct TCCL before calling prePassivate()

Modified: trunk/ejb3/src/main/org/jboss/ejb3/cache/tree/StatefulTreeCache.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/cache/tree/StatefulTreeCache.java	2007-02-04 02:48:52 UTC (rev 60246)
+++ trunk/ejb3/src/main/org/jboss/ejb3/cache/tree/StatefulTreeCache.java	2007-02-04 04:59:10 UTC (rev 60247)
@@ -39,6 +39,7 @@
 import org.jboss.cache.InvocationContext;
 import org.jboss.cache.Region;
 import org.jboss.ejb3.Container;
+import org.jboss.ejb3.EJBContainer;
 import org.jboss.ejb3.Pool;
 import org.jboss.ejb3.cache.ClusteredStatefulCache;
 import org.jboss.ejb3.stateful.ProxiedStatefulBeanContext;
@@ -373,16 +374,25 @@
          if(!fqn.isChildOrEquals(cacheNode)) return;
 
          StatefulBeanContext bean = null;
-         try {
+         ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
+         try 
+         {
             InvocationContext ctx = cache.getInvocationContext();
             ctx.setOptionOverrides(getBypassOption());
             bean = (StatefulBeanContext) cache.get(fqn, "bean");
-            if (bean != null && !bean.inUse)
-            {
+            if (bean != null)
+            {               
+               if (bean.inUse)
+               {
+                  // Abort the eviction
+                  throw new IllegalStateException("Cannot passivate bean " + fqn + " -- it is currently in use");
+               }
+               
                if(log.isTraceEnabled())
                {
                   log.trace("nodePassivated(): send prePassivate event to bean at fqn: " +fqn);
                }
+               Thread.currentThread().setContextClassLoader(((EJBContainer) bean.getContainer()).getClassloader());
                bean.prePassivate();
             }
          } 
@@ -420,7 +430,11 @@
             {
                throw e;
             }
-         }         
+         }
+         finally
+         {
+            Thread.currentThread().setContextClassLoader(oldCl);
+         }
       }
    }
    




More information about the jboss-cvs-commits mailing list