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;
+ }
}
+
}