[jboss-cvs] JBossAS SVN: r77949 - trunk/tomcat/src/main/org/jboss/web/tomcat/service/injection.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Sep 4 04:49:29 EDT 2008


Author: emuckenhuber
Date: 2008-09-04 04:49:28 -0400 (Thu, 04 Sep 2008)
New Revision: 77949

Modified:
   trunk/tomcat/src/main/org/jboss/web/tomcat/service/injection/WebEJBHandler.java
   trunk/tomcat/src/main/org/jboss/web/tomcat/service/injection/WebEJBRemoteHandler.java
Log:
[JBAS-5673] update injection handlers

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/service/injection/WebEJBHandler.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/service/injection/WebEJBHandler.java	2008-09-04 07:13:44 UTC (rev 77948)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/service/injection/WebEJBHandler.java	2008-09-04 08:49:28 UTC (rev 77949)
@@ -28,6 +28,8 @@
 import org.jboss.deployment.spi.DeploymentEndpointResolver;
 import org.jboss.injection.InjectionContainer;
 import org.jboss.logging.Logger;
+import org.jboss.metadata.javaee.spec.AnnotatedEJBReferenceMetaData;
+import org.jboss.metadata.javaee.spec.AnnotatedEJBReferencesMetaData;
 import org.jboss.metadata.javaee.spec.EJBLocalReferenceMetaData;
 import org.jboss.metadata.javaee.spec.Environment;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
@@ -58,7 +60,12 @@
       super.loadXml(xml, container);
       if (xml != null)
       {
-         if (xml.getEjbLocalReferences() != null) loadEjbLocalXml(xml.getEjbLocalReferences(), container);
+         // local references
+         if (xml.getEjbLocalReferences() != null)
+            loadEjbLocalXml(xml.getEjbLocalReferences(), container);
+         // annotated references
+         if (xml.getAnnotatedEjbReferences() != null)
+            loadEjbRefXml(xml.getAnnotatedEjbReferences(), container);
       }
    }
 
@@ -72,4 +79,15 @@
          ejbRefXml(ref, interfaceName, container, errorType);
       }
    }
+   
+   protected void loadEjbRefXml(AnnotatedEJBReferencesMetaData refs, InjectionContainer container)
+   {
+      for (AnnotatedEJBReferenceMetaData ref : refs)
+      {
+         String interfaceName = ref.getBeanInterface().getName();
+         String errorType = "@EJB";
+
+         ejbRefXml(ref, interfaceName, container, errorType);
+      }      
+   }
 }

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/service/injection/WebEJBRemoteHandler.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/service/injection/WebEJBRemoteHandler.java	2008-09-04 07:13:44 UTC (rev 77948)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/service/injection/WebEJBRemoteHandler.java	2008-09-04 08:49:28 UTC (rev 77949)
@@ -82,24 +82,11 @@
       if (xml != null)
       {
          log.trace("ejbRefs = " + xml.getEjbReferences());
-         if (xml.getAnnotatedEjbReferences() != null)
-            loadEjbRefXml(xml.getAnnotatedEjbReferences(), container);
          if (xml.getEjbReferences() != null)
             loadEjbRefXml(xml.getEjbReferences(), container);
       }
    }
-   
-   protected void loadEjbRefXml(AnnotatedEJBReferencesMetaData refs, InjectionContainer container)
-   {
-      for (AnnotatedEJBReferenceMetaData ref : refs)
-      {
-         String interfaceName = ref.getBeanInterface().getName();
-         String errorType = "@EJB";
 
-         ejbRefXml(ref, interfaceName, container, errorType);
-      }      
-   }
-
    protected void loadEjbRefXml(Collection<EJBReferenceMetaData> refs, InjectionContainer container)
    {
       for (EJBReferenceMetaData ref : refs)
@@ -166,6 +153,9 @@
       if(mappedName != null && mappedName.length() == 0) mappedName = null;
       if (refClass != null && (refClass.equals(Object.class) || refClass.equals(void.class))) refClass = null;
       
+      if(mappedName == null)
+         mappedName = getMappedName(encName, container);
+      
       if(mappedName != null)
       {
          addJNDIDependency(container, mappedName);
@@ -198,41 +188,9 @@
       if (mappedName != null && mappedName.trim().equals(""))
          mappedName = null;
       
-      // Initialize the lookupName to the encName
-      String lookupName = encName;
-      
-      // EJBTHREE-1289: this code should be enabled, but MappedDeploymentEndpointResolver is broken
-//      assert lookupName.startsWith("env/") : "encName used to start with 'env/'";
-//      lookupName = lookupName.substring(4);
-      
-      // mappedName can be null, because an annotation has not been augmented with resolvedJndiName
-      if (mappedName == null)
-      {
-         //
-         AnnotatedEJBReferencesMetaData amds = container.getEnvironmentRefGroup().getAnnotatedEjbReferences();
-         if(amds != null)
-         {
-            AnnotatedEJBReferenceMetaData amd = amds.get(lookupName);
-            if (amd == null && fieldName != null)
-            {
-               lookupName = fieldName;
-               amd = amds.get(lookupName);
-            }
-            if (amd != null)
-            {
-               mappedName = amd.getMappedName();
-               if (mappedName == null)
-                  mappedName = amd.getResolvedJndiName();
-            }
-         }
-      }
+      if(mappedName == null)
+         mappedName = getMappedName(encName, container, fieldName);
 
-      // The MappedDeploymentEndpointResolver should have put resolvedJndiName everywhere.
-      // If no mappedName is known by now, we have a bug.
-      assert mappedName != null : "mappedName for enc \"" + encName + "\", field \"" + fieldName
-            + "\" is null (container.environmentRefGroup.annotatedEjbReferences = "
-            + container.getEnvironmentRefGroup().getAnnotatedEjbReferences() + ")";
-      
       EncInjector injector = null;
       
       if (mappedName == null)
@@ -334,6 +292,57 @@
       return jndiName;
    }
 
+   private String getMappedName(String encName, InjectionContainer container)
+   {
+      return getMappedName(encName, container, null);
+   }
+   
+   /**
+    * Find a mapped name in the meta data which came from the mapped resolver.
+    * 
+    * @param encName
+    * @param container
+    * @param fieldName
+    * @return
+    */
+   private String getMappedName(String encName, InjectionContainer container, String fieldName)
+   {
+      String mappedName = null;
+      
+      // Initialize the lookupName to the encName
+      String lookupName = encName;
+      
+      // Currently encName has 'env/' prepended (see getEncName)
+      assert lookupName.startsWith("env/") : "encName used to start with 'env/'";
+      lookupName = lookupName.substring(4);
+      
+      // EJBTHREE-1289: find a resolved jndi name
+      AnnotatedEJBReferencesMetaData amds = webDD.getJndiEnvironmentRefsGroup().getAnnotatedEjbReferences();
+      if(amds != null)
+      {
+         AnnotatedEJBReferenceMetaData amd = amds.get(lookupName);
+         if (amd == null && fieldName != null)
+         {
+            lookupName = fieldName;
+            amd = amds.get(lookupName);
+         }
+         if (amd != null)
+         {
+            mappedName = amd.getMappedName();
+            if (mappedName == null)
+               mappedName = amd.getResolvedJndiName();
+         }
+      }
+      
+      // The MappedDeploymentEndpointResolver should have put resolvedJndiName everywhere.
+      // If no mappedName is known by now, we have a bug.
+//      assert mappedName != null : "mappedName for enc \"" + encName + "\", field \"" + fieldName
+//            + "\" is null (container.environmentRefGroup.annotatedEjbReferences = "
+//            + container.getEnvironmentRefGroup().getAnnotatedEjbReferences() + ")";
+      
+      return mappedName;
+   }
+   
    public void handleClassAnnotations(Class<?> clazz, InjectionContainer container)
    {
       EJBs ref = container.getAnnotation(EJBs.class, clazz);
@@ -401,31 +410,34 @@
          if (!container.getEncInjectors().containsKey(encName))
          {
             String mappedName = null;
+            if(ref.mappedName().length() > 0)
+               mappedName = ref.mappedName();
+            
+            if(mappedName == null)
+            {
+               EndpointInfo info = null;
+               String link = null;
+               
+               if(ref.beanName().length() > 0)
+                  link = ref.beanName();
+               
+               if(link != null)
+                  info = resolver.getEndpointInfo(link, EndpointType.EJB, vfsContext);
+               if(info == null)
+                  info = resolver.getEndpointInfo(field.getType(), EndpointType.EJB, vfsContext);
+               if(info == null)
+                  throw new IllegalStateException("No mapped-name for field: "+field+", "+ref);
+
+               ContainerDependencyMetaData cdmd = endpoints.get(info.getComponentKey());
+               if(cdmd == null)
+                  throw new IllegalStateException("Failed to resolve ContainerDependencyMetaData for info: "+info+", "+ref);
+                mappedName = cdmd.getContainerName();
+            }
+            
             if (isIgnoreDependency(container, ref))
                log.debug("IGNORING <ejb-ref> DEPENDENCY: " + encName);
             else
             {
-               String link = null;
-               EndpointInfo info = null;
-               if(ref.mappedName().length() > 0)
-                  mappedName = ref.mappedName();
-               else if(ref.beanName().length() > 0)
-                  link = ref.beanName();
-               if(mappedName == null)
-               {
-                  if(link != null)
-                     info = resolver.getEndpointInfo(link, EndpointType.EJB, vfsContext);
-                  if(info == null)
-                     info = resolver.getEndpointInfo(field.getType(), EndpointType.EJB, vfsContext);
-                  if(info == null)
-                     throw new IllegalStateException("No mapped-name for field: "+field+", "+ref);
-
-                  ContainerDependencyMetaData cdmd = endpoints.get(info.getComponentKey());
-                  if(cdmd == null)
-                     throw new IllegalStateException("Failed to resolve ContainerDependencyMetaData for info: "+info+", "+ref);
-                   mappedName = cdmd.getContainerName();
-               }
-
                ejbRefDependency(mappedName, ref.beanName(), container, field.getType(), "@EJB", encName);
             }
             ejbRefEncInjector(mappedName, encName, field.getName(), field.getType(), ref.beanName(), "@EJB", container);




More information about the jboss-cvs-commits mailing list