[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