You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ga...@apache.org on 2010/08/25 20:46:09 UTC

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

Author: gawor
Date: Wed Aug 25 18:46:09 2010
New Revision: 989289

URL: http://svn.apache.org/viewvc?rev=989289&view=rev
Log:
OPENEJB-1340: Merge InjectionTargets of the bean and interceptors. Patch from Ivan

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=989289&r1=989288&r2=989289&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Wed Aug 25 18:46:09 2010
@@ -127,6 +127,7 @@ import org.apache.openejb.jee.Filter;
 import org.apache.openejb.jee.Handler;
 import org.apache.openejb.jee.HandlerChains;
 import org.apache.openejb.jee.InitMethod;
+import org.apache.openejb.jee.Injectable;
 import org.apache.openejb.jee.InjectionTarget;
 import org.apache.openejb.jee.Interceptor;
 import org.apache.openejb.jee.InterceptorBinding;
@@ -1514,22 +1515,33 @@ public class AnnotationDeployer implemen
                  * mandated by the design of the spec.
                  */
                 for (EnterpriseBean bean : enterpriseBeans) {
-                    // DMB: TODO, we should actually check to see if the ref exists in the bean's enc.
-                    bean.getEnvEntry().addAll(interceptor.getEnvEntry());
-                    bean.getEjbRef().addAll(interceptor.getEjbRef());
-                    bean.getEjbLocalRef().addAll(interceptor.getEjbLocalRef());
-                    bean.getResourceRef().addAll(interceptor.getResourceRef());
-                    bean.getResourceEnvRef().addAll(interceptor.getResourceEnvRef());
-                    bean.getPersistenceContextRef().addAll(interceptor.getPersistenceContextRef());
-                    bean.getPersistenceUnitRef().addAll(interceptor.getPersistenceUnitRef());
-                    bean.getMessageDestinationRef().addAll(interceptor.getMessageDestinationRef());
-                    bean.getServiceRef().addAll(interceptor.getServiceRef());
+                    // Just simply merge the injection targets of the interceptors to enterprise beans
+                    mergeJndiReferences(interceptor.getEnvEntryMap(), bean.getEnvEntryMap());
+                    mergeJndiReferences(interceptor.getEjbRefMap(), bean.getEjbRefMap());
+                    mergeJndiReferences(interceptor.getEjbLocalRefMap(), bean.getEjbLocalRefMap());
+                    mergeJndiReferences(interceptor.getResourceRefMap(), bean.getResourceRefMap());
+                    mergeJndiReferences(interceptor.getResourceEnvRefMap(), bean.getResourceEnvRefMap());
+                    mergeJndiReferences(interceptor.getPersistenceContextRefMap(), bean.getPersistenceContextRefMap());
+                    mergeJndiReferences(interceptor.getPersistenceUnitRefMap(), bean.getPersistenceUnitRefMap());
+                    mergeJndiReferences(interceptor.getMessageDestinationRefMap(), bean.getMessageDestinationRefMap());
+                    mergeJndiReferences(interceptor.getServiceRefMap(), bean.getServiceRefMap());
                 }
             }
 
             return ejbModule;
         }
 
+        private <T extends Injectable> void mergeJndiReferences(Map<String, T> from, Map<String, T> to) {
+            for (Map.Entry<String, T> entry : from.entrySet()) {
+                Injectable injectable = to.get(entry.getKey());
+                if (injectable == null) {
+                    to.put(entry.getKey(), entry.getValue());
+                } else {
+                    injectable.getInjectionTarget().addAll(entry.getValue().getInjectionTarget());
+                }
+            }
+        }
+        
         //TODO why is this necessary, we scan for exceptions with this annotation elsewhere.
         private void processApplicationExceptions(Class<?> clazz, AssemblyDescriptor assemblyDescriptor) {
             /*