You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2011/07/18 10:32:36 UTC

svn commit: r1147777 - /geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbRefBuilder.java

Author: xuhaihong
Date: Mon Jul 18 08:32:36 2011
New Revision: 1147777

URL: http://svn.apache.org/viewvc?rev=1147777&view=rev
Log:
Check jndi reference whether exists first to avoid overwriting the existing referece.

Modified:
    geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbRefBuilder.java

Modified: geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbRefBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbRefBuilder.java?rev=1147777&r1=1147776&r2=1147777&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbRefBuilder.java (original)
+++ geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbRefBuilder.java Mon Jul 18 08:32:36 2011
@@ -22,7 +22,6 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -37,6 +36,7 @@ import org.apache.geronimo.gbean.GBeanIn
 import org.apache.geronimo.j2ee.annotation.ReferenceType;
 import org.apache.geronimo.j2ee.deployment.EARContext;
 import org.apache.geronimo.j2ee.deployment.Module;
+import org.apache.geronimo.j2ee.deployment.NamingBuilder;
 import org.apache.geronimo.j2ee.deployment.annotation.EJBAnnotationHelper;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
 import org.apache.geronimo.j2ee.jndi.JndiKey;
@@ -116,7 +116,7 @@ public class EjbRefBuilder extends Abstr
         if ((module != null) && (module.getClassFinder() != null)) {
             processAnnotations(specDD, module);
         }
-        
+
         addRefs(specDD, refMap, localRefMap, sharedContext);
 
         Map<String, List<InjectionTarget>> injectionsMap = new HashMap<String, List<InjectionTarget>>();
@@ -138,7 +138,7 @@ public class EjbRefBuilder extends Abstr
             EjbModuleBuilder.EarData earData = EjbModuleBuilder.EarData.KEY.get(module.getRootEarContext().getGeneralData());
 
             AppInfo appInfo = new AppInfo();
-            
+
             if (earData != null) {
                appInfo = earData.getAppInfo();
             }
@@ -163,18 +163,15 @@ public class EjbRefBuilder extends Abstr
             JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(ejbEncInfo, null, moduleId, module.getModuleURI(), moduleId, getClass().getClassLoader());
 
             map = jndiEncBuilder.buildMap();
-            
+
             for (EjbLocalReferenceInfo ejbLocalReferenceInfo : ejbEncInfo.ejbLocalReferences) {
                 ejbLocalRefNames.add(ejbLocalReferenceInfo.referenceName);
             }
         } catch (OpenEJBException e) {
             throw new DeploymentException(e);
         }
-        
 
-        
         Map<JndiKey,Map<String,Object>> moduleJndiContext = module.getJndiContext();
-        
 
         for (Map.Entry<String, Object> entry : map.entrySet()) {
             String name = entry.getKey();
@@ -185,26 +182,37 @@ public class EjbRefBuilder extends Abstr
                     name.startsWith("app/") ||
                     name.startsWith("module/") ||
                     name.startsWith("comp/")) {
+
                 ReferenceType referenceType = ejbLocalRefNames.contains(name) ? ReferenceType.EJB_LOCAL : ReferenceType.EJB;
+
+                List<InjectionTarget> injections = injectionsMap.get(name);
+                if(injections == null) {
+                    injections = Collections.<InjectionTarget>emptyList();
+                }
+
+                String fullName = "java:" + name;
+                if (lookupJndiContextMap(module, fullName) != null) {
+                    addInjections(name, referenceType, injections, NamingBuilder.INJECTION_KEY.get(sharedContext));
+                    continue;
+                }
                 if (uri != null) {
                     //handle ejb ref for application client module
                     value = createClientRef(value);
                     handleJndiUrlReference(value, referenceType, moduleJndiContext, injectionsMap, sharedContext);
                 }
-                name = "java:" + name;
                 if (value instanceof Serializable) {
-                    List<InjectionTarget> injections = injectionsMap.get(name);
-                    if (injections == null) {
-                        log.warn("No entry in ejb-jar.xml for name:\n " + name + "\n Known names:\n " + injectionsMap.keySet());
-                        injections = Collections.emptyList();
+                    if (injections.size() == 0) {
+                        if (log.isDebugEnabled()) {
+                            log.debug("No entry in deployment descriptor for name:\n " + fullName + "\n Known names:\n " + injectionsMap.keySet());
+                        }
                     }
-                    put(name, value, referenceType, module.getJndiContext(), injections, sharedContext);
+                    put(fullName, value, referenceType, module.getJndiContext(), injections, sharedContext);
                 }
             }
         }
-        
+
         if (uri != null) {
-            
+
             Map<String, Object> appclientAppContext = new HashMap<String, Object>();
             Map<String, Object> sharedAppScopeContext = module.getJndiScope(JndiScope.app);
             for (Entry<String, Object> entry : sharedAppScopeContext.entrySet()) {
@@ -214,10 +222,10 @@ public class EjbRefBuilder extends Abstr
 
         }
     }
-    
+
     /*
      * In following cases,
-     * 
+     *
      * <application-client>
      * ...
      * <ejb-ref>
@@ -225,10 +233,10 @@ public class EjbRefBuilder extends Abstr
      *   <lookup-name>java:app/xxxx</lookup-name>
      * </ejb-ref>
      * </application-client>
-     * 
+     *
      * we need to convert the corresponding app ejb ref into ClientEjbReference
      * so that they could be used in application client.
-     * 
+     *
      */
     private void handleJndiUrlReference(Object value, ReferenceType ReferenceType, Map<JndiKey, Map<String, Object>> moduleJndiContext, Map<String, List<InjectionTarget>> injectionsMap,
             Map<EARContext.Key, Object> sharedContext) {
@@ -254,14 +262,14 @@ public class EjbRefBuilder extends Abstr
         valueToConvert = createClientRef(valueToConvert);
 
         name = "java:" + name;
-        
+
         List<InjectionTarget> injections = injectionsMap.get(name);
         if (injections == null) {
             injections = Collections.emptyList();
         }
         put(name, valueToConvert, ReferenceType, moduleJndiContext, injections, sharedContext);
     }
-        
+
 
     private Object createClientRef(Object value) {
         if (value instanceof IntraVmJndiReference) {
@@ -294,7 +302,7 @@ public class EjbRefBuilder extends Abstr
 
             // merge info in alt-DD to spec DD.
             if (ejbRefType != null) {
-                
+
                 if (ejbRefType.getNsCorbaloc() != null) {
                    continue;
                 }
@@ -325,7 +333,7 @@ public class EjbRefBuilder extends Abstr
                 spec_ejbRef.setMappedName(getStringValue(spec_ejbRef.getMappedName()));
 
                 // handle external refs
-                
+
                 if (ejbRefType.getPattern() != null) {
                     // external ear ref
                     // set mapped name to the deploymentId of the external ref
@@ -342,12 +350,12 @@ public class EjbRefBuilder extends Abstr
                 if (ejbRefType.getEjbLink() != null) {
                     spec_ejbRef.setEjbLink(getStringValue(ejbRefType.getEjbLink()));
                 }
-                    
+
 
 
                 // openejb handling of injection-targets
                 if (spec_ejbRef.getInjectionTarget() != null) {
-                    
+
                     List<InjectionTarget> injectionTargetsToAdd=new ArrayList<InjectionTarget>();
                     for (InjectionTarget injectionTargetType : spec_ejbRef.getInjectionTarget()) {
                         InjectionTarget newInjectionTarget = new InjectionTarget();
@@ -417,7 +425,7 @@ public class EjbRefBuilder extends Abstr
                 // openejb handling of injection-targets
                 if (localRefFromSpecDD.getInjectionTarget() != null) {
                     List<InjectionTarget> injectionTargetsToAdd=new ArrayList<InjectionTarget>();
-                    
+
                     for (InjectionTarget injectionTargetType : localRefFromSpecDD.getInjectionTarget()) {
                         InjectionTarget injectionTarget = new InjectionTarget();
                         injectionTarget.setInjectionTargetClass(getStringValue(injectionTargetType
@@ -426,7 +434,7 @@ public class EjbRefBuilder extends Abstr
                                 .getInjectionTargetName()));
                         injectionTargetsToAdd.add(injectionTarget);
                     }
-                    
+
                     localRefFromSpecDD.getInjectionTarget().addAll(injectionTargetsToAdd);
                 }
                 // TODO: geronimo's handling of injection-target