[jboss-cvs] JBossAS SVN: r78711 - in projects/ejb3/trunk/core/src: test/java/org/jboss/ejb3/core/test/ejbthree670 and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Sep 19 08:45:49 EDT 2008


Author: wolfc
Date: 2008-09-19 08:45:48 -0400 (Fri, 19 Sep 2008)
New Revision: 78711

Modified:
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/MyStateful21Bean.java
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/MyStatefulBean.java
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/unit/PreDestroyCallsTestCase.java
Log:
EJBTHREE-670: not invoking pre-destroy in StatefulRemoveInterceptor

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java	2008-09-19 12:45:00 UTC (rev 78710)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java	2008-09-19 12:45:48 UTC (rev 78711)
@@ -22,13 +22,14 @@
 package org.jboss.ejb3.stateful;
 
 import java.lang.reflect.Method;
+
 import javax.transaction.RollbackException;
 import javax.transaction.Synchronization;
 import javax.transaction.SystemException;
 import javax.transaction.Transaction;
 
+import org.jboss.aop.joinpoint.Invocation;
 import org.jboss.aop.joinpoint.MethodInvocation;
-import org.jboss.aop.joinpoint.Invocation;
 import org.jboss.ejb3.aop.AbstractInterceptor;
 import org.jboss.ejb3.tx.TxUtil;
 import org.jboss.logging.Logger;
@@ -76,18 +77,18 @@
       {
          try
          {
-            StatefulBeanContext ctx = container.getCache().get(id);
-            container.invokePreDestroy(ctx);
+            container.getCache().remove(id);
          }
-         catch (Throwable t)
+         catch(Throwable t)
          {
-            if (!retainIfException)
-            {
-               container.getCache().remove(id);
-            }
+            // An exception thrown from afterCompletion is gobbled up
+            log.error("Removing bean " + id + " from " + container + " failed", t);
+            if(t instanceof Error)
+               throw (Error) t;
+            if(t instanceof RuntimeException)
+               throw (RuntimeException) t;
             throw new RuntimeException(t);
          }
-         container.getCache().remove(id);
       }
    }
 

Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/MyStateful21Bean.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/MyStateful21Bean.java	2008-09-19 12:45:00 UTC (rev 78710)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/MyStateful21Bean.java	2008-09-19 12:45:48 UTC (rev 78711)
@@ -47,7 +47,7 @@
    private static final Logger log = Logger.getLogger(MyStateful21Bean.class);
    
    private String name;
-   private int preDestroyCalls = 0;
+   public static int preDestroyCalls = 0;
    
    public void ejbActivate() throws EJBException, RemoteException
    {

Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/MyStatefulBean.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/MyStatefulBean.java	2008-09-19 12:45:00 UTC (rev 78710)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/MyStatefulBean.java	2008-09-19 12:45:48 UTC (rev 78711)
@@ -41,7 +41,7 @@
    private static final Logger log = Logger.getLogger(MyStatefulBean.class);
    
    private String name;
-   private int preDestroyCalls = 0;
+   public static int preDestroyCalls = 0;
    
    @PreDestroy
    public void preDestroy()

Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/unit/PreDestroyCallsTestCase.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/unit/PreDestroyCallsTestCase.java	2008-09-19 12:45:00 UTC (rev 78710)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree670/unit/PreDestroyCallsTestCase.java	2008-09-19 12:45:48 UTC (rev 78711)
@@ -27,6 +27,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.ejb.NoSuchEJBException;
+import javax.naming.NamingException;
 import javax.transaction.TransactionManager;
 
 import org.jboss.ejb3.core.test.common.AbstractEJB3TestCase;
@@ -37,6 +39,7 @@
 import org.jboss.ejb3.core.test.ejbthree670.MyStatefulBean;
 import org.jboss.ejb3.session.SessionContainer;
 import org.junit.AfterClass;
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -60,6 +63,13 @@
       AbstractEJB3TestCase.afterClass();
    }
    
+   @Before
+   public void before()
+   {
+      MyStateful21Bean.preDestroyCalls = 0;
+      MyStatefulBean.preDestroyCalls = 0;
+   }
+   
    @BeforeClass
    public static void beforeClass() throws Exception
    {
@@ -69,8 +79,7 @@
       containers.add(deploySessionEjb(MyStateful21Bean.class));
    }
    
-   @Test
-   public void test1() throws Exception
+   private MyStateful runMyStatefulTest() throws NamingException
    {
       MyStateful session = (MyStateful) getInitialContext().lookup("MyStatefulBean/remote");
       session.setName("Test");
@@ -86,9 +95,26 @@
             fail("pre destroy called multiple times");
          throw e;
       }
+      return session;
    }
    
    @Test
+   public void test1() throws Exception
+   {
+      MyStateful session = runMyStatefulTest();
+      try
+      {
+         session.remove();
+         fail("Should have thrown NoSuchEJBException");
+      }
+      catch(NoSuchEJBException e)
+      {
+         // okay
+      }
+      assertEquals("number of PreDestroy calls", 1, MyStatefulBean.preDestroyCalls);
+   }
+   
+   @Test
    public void test21() throws Exception
    {
       MyStateful21Home home = (MyStateful21Home) getInitialContext().lookup("MyStateful21Bean/home");
@@ -106,6 +132,7 @@
             fail("pre destroy called multiple times");
          throw e;
       }
+      assertEquals("number of PreDestroy calls", 1, MyStateful21Bean.preDestroyCalls);
    }
    
    @Test
@@ -126,20 +153,32 @@
             fail("pre destroy called multiple times");
          throw e;
       }
+      assertEquals("number of PreDestroy calls", 1, MyStateful21Bean.preDestroyCalls);
    }
    
    @Test
    public void testWithInTransaction() throws Exception
    {
+      MyStateful session;
       TransactionManager tm = lookup("java:/TransactionManager", TransactionManager.class);
       tm.begin();
       try
       {
-         test1();
+         session = runMyStatefulTest();
       }
       finally
       {
          tm.rollback();
       }
+      try
+      {
+         session.remove();
+         fail("Should have thrown NoSuchEJBException");
+      }
+      catch(NoSuchEJBException e)
+      {
+         // okay
+      }
+      assertEquals("number of PreDestroy calls", 1, MyStatefulBean.preDestroyCalls);
    }
 }




More information about the jboss-cvs-commits mailing list