Author: dblevins
Date: Fri Jan 29 12:33:15 2010
New Revision: 904482

URL: http://svn.apache.org/viewvc?rev=904482&view=rev
Log:
Updated Fix for OPENEJB-847: Validation: @Resource UserTransaction injection 
mistakenly used on bean with Container-Managed Transactions

Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckUserTransactionRefs.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
    
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckUserTransactionRefsTest.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckUserTransactionRefs.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckUserTransactionRefs.java?rev=904482&r1=904481&r2=904482&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckUserTransactionRefs.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckUserTransactionRefs.java
 Fri Jan 29 12:33:15 2010
@@ -39,10 +39,10 @@
     public void validate(EjbModule ejbModule) {
         for (EnterpriseBean bean : ejbModule.getEjbJar().getEnterpriseBeans()) 
{
             if (bean.getTransactionType() == CONTAINER) {
-                Collection<ResourceRef> resRefs = bean.getResourceRef();
-                for (ResourceRef resRef : resRefs) {
-                    if 
("javax.transaction.UserTransaction".equals(resRef.getResType())) {
-                        error(bean, "userResourceRef.forbiddenForCmtdBeans", 
resRef.getName());
+                Collection<ResourceEnvRef> resRefs = bean.getResourceEnvRef();
+                for (ResourceEnvRef resRef : resRefs) {
+                    if 
("javax.transaction.UserTransaction".equals(resRef.getResourceEnvRefType())) {
+                        fail(bean, "userTransactionRef.forbiddenForCmtdBeans", 
resRef.getName());
                     }
                 }
             }

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties?rev=904482&r1=904481&r2=904482&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
 Fri Jan 29 12:33:15 2010
@@ -781,6 +781,6 @@
 
 # CheckUserTransactionRefs.java
 # warn(bean, "userResourceRef.forbiddenForCmtdBeans", 
resRef.getResourceEnvRefName());
-1.userResourceRef.forbiddenForCmtdBeans = Illegal resource reference to 
UserTransaction detected
-2.userResourceRef.forbiddenForCmtdBeans = Illegal resource reference to 
UserTransaction detected with JNDI name: {0}
-3.userResourceRef.forbiddenForCmtdBeans = Only session and message-driven 
beans with bean-managed transaction demarcation are allowed to use 
UserTransaction via @Resource or resource-env-ref 
+1.userTransactionRef.forbiddenForCmtdBeans = Container-Managed Transaction 
beans cannot use UserTransaction
+2.userTransactionRef.forbiddenForCmtdBeans = Container-Managed Transaction 
beans cannot use UserTransaction: fix ref {0}
+3.userTransactionRef.forbiddenForCmtdBeans = Only session and message-driven 
beans with bean-managed transaction demarcation are allowed to use 
UserTransaction.  Fix @Resource or resource-env-ref {0}

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckUserTransactionRefsTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckUserTransactionRefsTest.java?rev=904482&r1=904481&r2=904482&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckUserTransactionRefsTest.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckUserTransactionRefsTest.java
 Fri Jan 29 12:33:15 2010
@@ -16,59 +16,59 @@
  */
 package org.apache.openejb.config.rules;
 
-import org.apache.openejb.config.EjbModule;
+import junit.framework.TestCase;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.ValidationFailedException;
+import static 
org.apache.openejb.config.rules.ValidationAssertions.assertFailures;
 import org.apache.openejb.jee.EjbJar;
-import org.apache.openejb.jee.InjectionTarget;
-import org.apache.openejb.jee.ResourceRef;
 import org.apache.openejb.jee.StatelessBean;
-import static org.apache.openejb.jee.TransactionType.CONTAINER;
-import static org.hamcrest.CoreMatchers.is;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
 import org.junit.Test;
 
+import javax.annotation.Resource;
+import javax.ejb.Stateless;
+import javax.ejb.TransactionManagement;
+import javax.ejb.TransactionManagementType;
+import javax.transaction.UserTransaction;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+
 /**
  * @version $Rev$ $Date$
  */
-public class CheckUserTransactionRefsTest {
-
-    private EjbModule module;
-    private StatelessBean bean;
+public class CheckUserTransactionRefsTest extends TestCase {
 
-    private CheckUserTransactionRefs rule;
+    @Test
+    public void testSLSBwithUserTransaction() throws Exception {
 
-    @Before
-    public void initialize() {
-        bean = new StatelessBean("CheeseEjb", "org.acme.CheeseEjb");
-        bean.setTransactionType(CONTAINER);
+        Assembler assembler = new Assembler();
+        ConfigurationFactory config = new ConfigurationFactory();
 
-        module = new EjbModule(new EjbJar());
-        module.getEjbJar().addEnterpriseBean(bean);
+        EjbJar ejbJar = new EjbJar();
+        ejbJar.addEnterpriseBean(new StatelessBean(TestBean.class));
 
-        rule = new CheckUserTransactionRefs();
-        rule.module = module;
-    }
-
-    @Test
-    public void testSLSBwithUserTransaction() {
+        List<String> expectedKeys = new ArrayList<String>();
+        expectedKeys.add("userTransactionRef.forbiddenForCmtdBeans");
 
         // "@Resource UserTransaction tx" declaration
-        ResourceRef resourceRef = new ResourceRef();
-        resourceRef.setResRefName("org.acme.CheeseEjb/tx");
-        resourceRef.setResType("javax.transaction.UserTransaction");
-        resourceRef.getInjectionTarget().add(new 
InjectionTarget("org.acme.CheeseEjb", "org.acme.CheeseEjb/tx"));
-        bean.getResourceRef().add(resourceRef);
-
-        rule.validate(module);
-
-        Assert.assertThat(module.getValidation().getErrors().length, is(1));
-        Assert.assertThat(module.getValidation().getWarnings().length, is(0));
-        Assert.assertThat(module.getValidation().getFailures().length, is(0));
+        try {
+            config.configureApplication(ejbJar);
+        } catch (ValidationFailedException e) {
+            assertFailures(expectedKeys, e);
+        }
     }
 
-    @After
-    public void cleanUp() {
-        module = null;
+    @Stateless
+    @TransactionManagement(TransactionManagementType.CONTAINER)
+    public static class TestBean implements Callable {
+
+        @Resource
+        private UserTransaction userTransaction;
+
+        public Object call() throws Exception {
+            return null;
+        }
     }
+
 }


Reply via email to