[jboss-cvs] JBossAS SVN: r80309 - in projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549: unit and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Oct 31 06:32:43 EDT 2008


Author: wolfc
Date: 2008-10-31 06:32:43 -0400 (Fri, 31 Oct 2008)
New Revision: 80309

Modified:
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/BlockingPersistenceManager.java
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/ForcePassivationCache.java
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/unit/PassivationDoesNotPreventNewActivityUnitTestCase.java
Log:
EJBTHREE-1549: invocation during passivation should pass without exception

Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/BlockingPersistenceManager.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/BlockingPersistenceManager.java	2008-10-31 09:12:07 UTC (rev 80308)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/BlockingPersistenceManager.java	2008-10-31 10:32:43 UTC (rev 80309)
@@ -21,12 +21,20 @@
  */
 package org.jboss.ejb3.core.test.ejbthree1549;
 
+import java.io.IOException;
+import java.rmi.MarshalledObject;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CyclicBarrier;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager;
+import javax.ejb.EJBException;
+
+import org.jboss.ejb3.Container;
+import org.jboss.ejb3.cache.simple.StatefulSessionPersistenceManager;
 import org.jboss.ejb3.stateful.StatefulBeanContext;
 import org.jboss.logging.Logger;
 
@@ -40,7 +48,7 @@
  * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
  * @version $Revision: $
  */
-public class BlockingPersistenceManager extends StatefulSessionFilePersistenceManager
+public class BlockingPersistenceManager implements StatefulSessionPersistenceManager
 {
    // --------------------------------------------------------------------------------||
    // Class Members ------------------------------------------------------------------||
@@ -62,12 +70,48 @@
     * should take place
     */
    public static final CyclicBarrier BARRIER = new CyclicBarrier(2);
+   
+   private Map<Object, MarshalledObject<StatefulBeanContext>> passivated = new ConcurrentHashMap<Object, MarshalledObject<StatefulBeanContext>>();
 
    // --------------------------------------------------------------------------------||
    // Required Implementations -------------------------------------------------------||
    // --------------------------------------------------------------------------------||
 
-   @Override
+   public StatefulBeanContext activateSession(Object id)
+   {
+      log.info("Activating " + id);
+      MarshalledObject<StatefulBeanContext> o = passivated.remove(id);
+      if(o == null)
+         throw new EJBException("Can't find bean " + id);
+      try
+      {
+         return o.get();
+      }
+      catch (IOException e)
+      {
+         throw new EJBException(e);
+      }
+      catch (ClassNotFoundException e)
+      {
+         throw new EJBException(e);
+      }
+   }
+
+   public void destroy() throws Exception
+   {
+      passivated.clear();
+   }
+
+   public List<StatefulBeanContext> getPassivatedBeans()
+   {
+      // very stupid and slow, don't do this
+      throw new RuntimeException("NYI");
+   }
+
+   public void initialize(Container container) throws Exception
+   {
+   }
+   
    public void passivateSession(StatefulBeanContext ctx)
    {
 
@@ -90,7 +134,12 @@
          {
             // Mock Passivate
             log.info("Mock Passivation on " + ctx.getId());
+            passivated.put(ctx.getId(), new MarshalledObject<StatefulBeanContext>(ctx));
          }
+         catch(IOException e)
+         {
+            throw new EJBException(e);
+         }
          finally
          {
             // Release the passivation lock
@@ -112,4 +161,12 @@
          BARRIER.reset();
       }
    }
+   
+   public void removePassivated(Object id)
+   {
+      MarshalledObject<StatefulBeanContext> o = passivated.remove(id);
+      if(o == null)
+         throw new EJBException("Can't find bean " + id);
+   }
+
 }

Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/ForcePassivationCache.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/ForcePassivationCache.java	2008-10-31 09:12:07 UTC (rev 80308)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/ForcePassivationCache.java	2008-10-31 10:32:43 UTC (rev 80309)
@@ -56,6 +56,7 @@
     * Internal lock used to manually block the passivation task from running
     */
    private static final Object START_PASSIVATION_LOCK = new Object();
+   private static volatile boolean passivationForced = false;
 
    // --------------------------------------------------------------------------------||
    // Functional Methods -------------------------------------------------------------||
@@ -75,6 +76,7 @@
       log.info("Awaiting lock to force passivation");
       synchronized (START_PASSIVATION_LOCK)
       {
+         passivationForced = true;
          // Notify that passivation should run
          log.info("Notifying passivation via manual force...");
          START_PASSIVATION_LOCK.notify();
@@ -170,9 +172,13 @@
          // Get a lock on our monitor
          synchronized (START_PASSIVATION_LOCK)
          {
-            // Wait until we're signaled
-            log.info("Waiting to be notified to run passivation...");
-            START_PASSIVATION_LOCK.wait();
+            if(!passivationForced)
+            {
+               // Wait until we're signaled
+               log.info("Waiting to be notified to run passivation...");
+               START_PASSIVATION_LOCK.wait();
+            }
+            passivationForced = false;
          }
 
          // Log that we've been notified

Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/unit/PassivationDoesNotPreventNewActivityUnitTestCase.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/unit/PassivationDoesNotPreventNewActivityUnitTestCase.java	2008-10-31 09:12:07 UTC (rev 80308)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1549/unit/PassivationDoesNotPreventNewActivityUnitTestCase.java	2008-10-31 10:32:43 UTC (rev 80309)
@@ -21,8 +21,8 @@
  */
 package org.jboss.ejb3.core.test.ejbthree1549.unit;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.fail;
 
 import java.io.Serializable;
 import java.lang.reflect.Proxy;
@@ -143,16 +143,13 @@
       ForcePassivationCache.POST_PASSIVATE_BARRIER.await(5, TimeUnit.SECONDS);
       log.info("Test sees Cache reports passivation completed.");
       
-      try
-      {
-         next = result.get(5, TimeUnit.SECONDS);
-         log.info("Got counter from " + sessionId + ": " + next);
-         fail("bean was passivated during this call");
-      }
-      catch(Exception e)
-      {
-         // good
-      }
+      int duringPassivation = result.get(5, TimeUnit.SECONDS);
+      log.info("Got counter from " + sessionId + ": " + duringPassivation);
+      
+      int postPassivation = bean.getNextCounter();
+      log.info("Got counter from " + sessionId + ": " + postPassivation);
+      
+      assertEquals("the postPassivation counter should be 1 higher than the previous (during passivation)", duringPassivation + 1, postPassivation);
    }
    
    /**




More information about the jboss-cvs-commits mailing list