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) {
/*