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/18 06:36:42 UTC

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

Author: dblevins
Date: Sun Sep 18 04:36:41 2011
New Revision: 1172195

URL: http://svn.apache.org/viewvc?rev=1172195&view=rev
Log:
Simply don't merge "private" resources rather than removing them afterwards.  Consider UserTransaction a private resource

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=1172195&r1=1172194&r2=1172195&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 Sun Sep 18 04:36:41 2011
@@ -24,10 +24,13 @@ import org.apache.openejb.jee.InjectionT
 import org.apache.openejb.jee.JndiConsumer;
 import org.apache.openejb.jee.JndiReference;
 import org.apache.openejb.jee.ResourceEnvRef;
+import org.apache.openejb.jee.sun.ResourceRef;
 
 import javax.ejb.EJBContext;
+import javax.ejb.EntityContext;
 import javax.ejb.MessageDrivenContext;
 import javax.ejb.SessionContext;
+import javax.transaction.UserTransaction;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.Iterator;
@@ -63,8 +66,6 @@ public class MergeWebappJndiContext impl
     private void merge(EjbModule ejbModule, WebModule webModule) {
         final JndiConsumer webApp = webModule.getWebApp();
 
-        removePrivateReferences(webApp);
-
         final EjbJar ejbJar = ejbModule.getEjbJar();
 
         for (EnterpriseBean bean : ejbJar.getEnterpriseBeans()) {
@@ -98,7 +99,6 @@ public class MergeWebappJndiContext impl
             }
         }
 
-        removePrivateReferences(webApp);
     }
 
     /**
@@ -115,6 +115,9 @@ public class MergeWebappJndiContext impl
 
     private <R extends JndiReference> void copy(Map<String, R> from, Map<String, R> to) {
         for (R a : from.values()) {
+
+            if (isPrivateReference(a)) continue;
+
             final R b = to.get(a.getKey());
 
             // New entry
@@ -144,23 +147,19 @@ public class MergeWebappJndiContext impl
         }
     }
 
-    private void removePrivateReferences(JndiConsumer webApp) {
-        Class[] types = {EJBContext.class, SessionContext.class, MessageDrivenContext.class};
-        final Iterator<ResourceEnvRef> refs = webApp.getResourceEnvRef().iterator();
-        while (refs.hasNext()) {
-            final ResourceEnvRef ref = refs.next();
-            if (isInvalid(types, ref)) refs.remove();
-        }
-    }
+    private <R extends JndiReference> boolean isPrivateReference(R a) {
+        if (!isResourceRef(a)) return false;
+
+        Class[] types = {EJBContext.class, EntityContext.class, SessionContext.class, MessageDrivenContext.class, UserTransaction.class};
 
-    private boolean isInvalid(Class[] types, ResourceEnvRef ref) {
-        boolean invalid = false;
         for (Class type : types) {
-            if (type.getName().equals(ref.getType())) {
-                invalid= true;
-                break;
-            }
+            if (type.getName().equals(a.getType())) return true;
         }
-        return invalid;
+
+        return false;
+    }
+
+    private <R extends JndiReference> boolean isResourceRef(R a) {
+        return a instanceof ResourceRef || a instanceof ResourceEnvRef;
     }
 }