[jboss-cvs] JBossAS SVN: r75964 - in projects/ejb3/trunk/transactions: src/main/java/org/jboss/ejb3/tx and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Jul 17 11:05:22 EDT 2008
Author: wolfc
Date: 2008-07-17 11:05:22 -0400 (Thu, 17 Jul 2008)
New Revision: 75964
Modified:
projects/ejb3/trunk/transactions/pom.xml
projects/ejb3/trunk/transactions/src/main/java/org/jboss/ejb3/tx/TxUtil.java
projects/ejb3/trunk/transactions/src/test/java/org/jboss/ejb3/test/tx/getrollback/GetRollbackTestBean.java
projects/ejb3/trunk/transactions/src/test/java/org/jboss/ejb3/test/tx/getrollback/unit/GetRollbackTestCase.java
Log:
Fixed ClassCastException with lifecycle callbacks
Modified: projects/ejb3/trunk/transactions/pom.xml
===================================================================
--- projects/ejb3/trunk/transactions/pom.xml 2008-07-17 15:04:28 UTC (rev 75963)
+++ projects/ejb3/trunk/transactions/pom.xml 2008-07-17 15:05:22 UTC (rev 75964)
@@ -101,7 +101,7 @@
<dependency>
<groupId>org.jboss.ejb3</groupId>
<artifactId>jboss-ejb3-interceptors</artifactId>
- <version>0.13.0</version>
+ <version>0.13.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.jboss.javaee</groupId>
Modified: projects/ejb3/trunk/transactions/src/main/java/org/jboss/ejb3/tx/TxUtil.java
===================================================================
--- projects/ejb3/trunk/transactions/src/main/java/org/jboss/ejb3/tx/TxUtil.java 2008-07-17 15:04:28 UTC (rev 75963)
+++ projects/ejb3/trunk/transactions/src/main/java/org/jboss/ejb3/tx/TxUtil.java 2008-07-17 15:05:22 UTC (rev 75964)
@@ -107,7 +107,10 @@
protected static TransactionAttributeType getTxType(Advisor advisor, Method method)
{
- TransactionAttribute tx = (TransactionAttribute) advisor.resolveAnnotation(method, TransactionAttribute.class);
+ TransactionAttribute tx = null;
+
+ if(method != null)
+ tx = (TransactionAttribute) advisor.resolveAnnotation(method, TransactionAttribute.class);
if (tx == null)
tx = (TransactionAttribute) advisor.resolveAnnotation(TransactionAttribute.class);
@@ -123,7 +126,11 @@
private static TransactionAttributeType getTxType(Invocation invocation)
{
- return getTxType(invocation.getAdvisor(), ((MethodInvocation) invocation).getActualMethod());
+ // Use the method tx attribute if we're invoking a business method, else the bean attribute
+ Method method = null;
+ if(invocation instanceof MethodInvocation)
+ method = ((MethodInvocation) invocation).getActualMethod();
+ return getTxType(invocation.getAdvisor(), method);
}
public static UserTransaction getUserTransaction(BeanContext<?> ctx)
Modified: projects/ejb3/trunk/transactions/src/test/java/org/jboss/ejb3/test/tx/getrollback/GetRollbackTestBean.java
===================================================================
--- projects/ejb3/trunk/transactions/src/test/java/org/jboss/ejb3/test/tx/getrollback/GetRollbackTestBean.java 2008-07-17 15:04:28 UTC (rev 75963)
+++ projects/ejb3/trunk/transactions/src/test/java/org/jboss/ejb3/test/tx/getrollback/GetRollbackTestBean.java 2008-07-17 15:05:22 UTC (rev 75964)
@@ -26,6 +26,7 @@
import static javax.ejb.TransactionAttributeType.REQUIRED;
import javax.ejb.EJBContext;
+import javax.ejb.PrePassivate;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
@@ -41,6 +42,8 @@
{
private EJBContext ctx = new MockEJBContext();
+ public boolean prePassivateRan = false;
+
@TransactionAttribute(MANDATORY)
public boolean mandatory()
{
@@ -59,6 +62,14 @@
return ctx.getRollbackOnly();
}
+ @PrePassivate
+ public void prePassivate()
+ {
+ ctx.getRollbackOnly();
+
+ prePassivateRan = true;
+ }
+
@TransactionAttribute(REQUIRED)
public boolean required()
{
Modified: projects/ejb3/trunk/transactions/src/test/java/org/jboss/ejb3/test/tx/getrollback/unit/GetRollbackTestCase.java
===================================================================
--- projects/ejb3/trunk/transactions/src/test/java/org/jboss/ejb3/test/tx/getrollback/unit/GetRollbackTestCase.java 2008-07-17 15:04:28 UTC (rev 75963)
+++ projects/ejb3/trunk/transactions/src/test/java/org/jboss/ejb3/test/tx/getrollback/unit/GetRollbackTestCase.java 2008-07-17 15:05:22 UTC (rev 75964)
@@ -23,14 +23,23 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
import java.net.URL;
+import java.util.List;
import javax.ejb.EJBTransactionRolledbackException;
+import javax.ejb.PrePassivate;
import javax.naming.InitialContext;
import javax.transaction.TransactionManager;
+import org.jboss.aop.Advisor;
+import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.joinpoint.ConstructionInvocation;
+import org.jboss.ejb3.interceptors.aop.LifecycleCallbacks;
import org.jboss.ejb3.interceptors.container.BeanContext;
import org.jboss.ejb3.interceptors.direct.DirectContainer;
import org.jboss.ejb3.test.tx.getrollback.GetRollbackTestBean;
@@ -51,9 +60,31 @@
{
private static UnitTestBootstrap bootstrap;
- private static DirectContainer<GetRollbackTestBean> container;
+ private static TestContainer<GetRollbackTestBean> container;
private BeanContext<GetRollbackTestBean> instance;
+ private static class TestContainer<T> extends DirectContainer<T>
+ {
+ public TestContainer(String name, String domainName, Class<? extends T> beanClass)
+ {
+ super(name, domainName, beanClass);
+ }
+
+ protected void invokeCallback(BeanContext<?> component, Class<? extends Annotation> lifecycleAnnotationType) throws Throwable
+ {
+ List<Class<?>> lifecycleInterceptorClasses = getInterceptorRegistry().getLifecycleInterceptorClasses();
+ Advisor advisor = getAdvisor();
+ Interceptor interceptors[] = LifecycleCallbacks.createLifecycleCallbackInterceptors(advisor, lifecycleInterceptorClasses, component, lifecycleAnnotationType);
+
+ Constructor<?> constructor = getBeanClass().getConstructor();
+ Object initargs[] = null;
+ ConstructionInvocation invocation = new ConstructionInvocation(interceptors, constructor, initargs);
+ invocation.setAdvisor(advisor);
+ invocation.setTargetObject(component.getInstance());
+ invocation.invokeNext();
+ }
+ }
+
private void expectException(String methodName, Class<? extends Exception> exceptionClass) throws Throwable
{
try
@@ -98,7 +129,7 @@
bootstrap.deploy(getResource("instance/beans.xml"));
// TODO: should not use Stateful Container
- container = new DirectContainer<GetRollbackTestBean>("GetRollbackTest", "Stateless Container", GetRollbackTestBean.class);
+ container = new TestContainer<GetRollbackTestBean>("GetRollbackTest", "Stateless Container", GetRollbackTestBean.class);
}
@AfterClass
@@ -117,7 +148,8 @@
@After
public void tearDown() throws Exception
{
- container.destroy(instance);
+ if(instance != null)
+ container.destroy(instance);
}
@@ -162,6 +194,29 @@
}
/**
+ * This test is to make sure there is no ClassCastException in TxUtil.getTxType.
+ * It's actually not allowed by spec to do PrePassivate on a Stateless and it's
+ * also not allowed to do getRollbackOnly within a lifecycle method.
+ */
+ @Test
+ public void testPrePassivate() throws Throwable
+ {
+ InitialContext ctx = new InitialContext();
+ TransactionManager tm = (TransactionManager) ctx.lookup("java:/TransactionManager");
+ tm.begin();
+ try
+ {
+ container.invokeCallback(instance, PrePassivate.class);
+
+ assertTrue(instance.getInstance().prePassivateRan);
+ }
+ finally
+ {
+ tm.rollback();
+ }
+ }
+
+ /**
* Test method for {@link org.jboss.ejb3.test.tx.getrollback.GetRollbackTestBean#required()}.
* @throws Throwable
*/
More information about the jboss-cvs-commits
mailing list