You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2011/09/22 18:43:05 UTC

svn commit: r1174253 - /openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java

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;