Author: dblevins
Date: Thu Sep 22 16:43:05 2011
New Revision: 1174253
URL: http://svn.apache.org/viewvc?rev=1174253&view=rev
Log:
Merge UserTransaction references more precisely -- always merge unless the
target is a BMT bean
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java?rev=1174253&r1=1174252&r2=1174253&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java
Thu Sep 22 16:43:05 2011
@@ -25,6 +25,7 @@ import org.apache.openejb.jee.JndiConsum
import org.apache.openejb.jee.JndiReference;
import org.apache.openejb.jee.ResourceEnvRef;
import org.apache.openejb.jee.ResourceRef;
+import org.apache.openejb.jee.TransactionType;
import javax.ejb.EJBContext;
import javax.ejb.EntityContext;
@@ -78,6 +79,11 @@ public class MergeWebappJndiContext impl
merge(bean.getMessageDestinationRefMap(),
webApp.getMessageDestinationRefMap());
merge(bean.getPersistenceContextRefMap(),
webApp.getPersistenceContextRefMap());
merge(bean.getPersistenceUnitRefMap(),
webApp.getPersistenceUnitRefMap());
+
+ mergeUserTransaction(bean.getResourceRefMap(),
webApp.getResourceRefMap(), webApp);
+ mergeUserTransaction(bean.getResourceEnvRefMap(),
webApp.getResourceEnvRefMap(), webApp);
+ mergeUserTransaction(webApp.getResourceRefMap(),
bean.getResourceRefMap(), bean);
+ mergeUserTransaction(webApp.getResourceEnvRefMap(),
bean.getResourceEnvRefMap(), bean);
}
for (EnterpriseBean a : ejbJar.getEnterpriseBeans()) {
@@ -96,14 +102,10 @@ public class MergeWebappJndiContext impl
merge(a.getPersistenceContextRefMap(),
b.getPersistenceContextRefMap());
merge(a.getPersistenceUnitRefMap(),
b.getPersistenceUnitRefMap());
+ mergeUserTransaction(a.getResourceRefMap(),
b.getResourceRefMap(), b);
+ mergeUserTransaction(a.getResourceEnvRefMap(),
b.getResourceEnvRefMap(), b);
}
}
-
- for (EnterpriseBean bean : ejbJar.getEnterpriseBeans()) {
- mergeUserTransaction(bean.getResourceRefMap(),
webApp.getResourceRefMap());
- mergeUserTransaction(bean.getResourceEnvRefMap(),
webApp.getResourceEnvRefMap());
- }
-
}
/**
@@ -168,7 +170,12 @@ public class MergeWebappJndiContext impl
return a instanceof ResourceRef || a instanceof ResourceEnvRef;
}
- private <R extends JndiReference> void mergeUserTransaction(Map<String, R>
from, Map<String, R> to) {
+ private <R extends JndiReference> void mergeUserTransaction(Map<String, R>
from, Map<String, R> to, JndiConsumer consumer) {
+ if (consumer instanceof EnterpriseBean) {
+ final EnterpriseBean enterpriseBean = (EnterpriseBean) consumer;
+ if (enterpriseBean.getTransactionType() != TransactionType.BEAN)
return;
+ }
+
for (R a : from.values()) {
if (!UserTransaction.class.getName().equals(a.getType())) continue;