[jboss-cvs] JBossAS SVN: r71494 - in branches/InjectionPrototype/server/src/main/org/jboss: deployment/dependency and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Mar 31 14:05:18 EDT 2008


Author: scott.stark at jboss.org
Date: 2008-03-31 14:05:18 -0400 (Mon, 31 Mar 2008)
New Revision: 71494

Modified:
   branches/InjectionPrototype/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java
   branches/InjectionPrototype/server/src/main/org/jboss/deployment/dependency/JndiDependencyMetaData.java
   branches/InjectionPrototype/server/src/main/org/jboss/ejb/Container.java
   branches/InjectionPrototype/server/src/main/org/jboss/ejb/EjbModule.java
   branches/InjectionPrototype/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java
Log:
Checkpoint


Modified: branches/InjectionPrototype/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java
===================================================================
--- branches/InjectionPrototype/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java	2008-03-31 18:04:32 UTC (rev 71493)
+++ branches/InjectionPrototype/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java	2008-03-31 18:05:18 UTC (rev 71494)
@@ -26,12 +26,15 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.jboss.deployers.spi.DeploymentException;
 import org.jboss.deployers.spi.deployer.DeploymentStages;
 import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.deployment.dependency.ContainerDependencyMetaData;
+import org.jboss.deployment.dependency.JndiDependencyMetaData;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.client.jboss.JBossClientMetaData;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
@@ -41,6 +44,8 @@
 import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
 import org.jboss.metadata.ejb.spec.BusinessLocalsMetaData;
 import org.jboss.metadata.ejb.spec.BusinessRemotesMetaData;
+import org.jboss.metadata.javaee.spec.AbstractEJBReferenceMetaData;
+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.EJBLocalReferencesMetaData;
@@ -62,6 +67,10 @@
  */
 public class MappedReferenceMetaDataResolverDeployer extends AbstractRealDeployer
 {
+   /** Key for Map<String, ContainerDependencyMetaData> attachment */
+   public static final String ENDPOINT_MAP_KEY = "MappedReferenceMetaDataResolverDeployer.endpointMap";
+   /** Key for Set<ContainerDependencyMetaData> attachment */
+   public static final String DEPENDS_SET_KEY = "MappedReferenceMetaDataResolverDeployer.dependsSet";
    private static Logger log = Logger.getLogger(MappedReferenceMetaDataResolverDeployer.class);
    /** */
    private boolean failOnUnresolvedRefs;
@@ -109,12 +118,12 @@
 
       // Create a map of the reference endpoints if it does not exist in the top unit
       DeploymentUnit top = unit.getTopLevel();
-      Map<String, String> endpointMap = top.getAttachment("MappedReferenceMetaDataResolverDeployer.endpointMap", Map.class);
+      Map<String, ContainerDependencyMetaData> endpointMap = top.getAttachment(ENDPOINT_MAP_KEY, Map.class);
       if(endpointMap == null)
       {
-         endpointMap = new ConcurrentHashMap<String, String>();
+         endpointMap = new ConcurrentHashMap<String, ContainerDependencyMetaData>();
          mapEndpoints(top, endpointMap);
-         top.addAttachment("MappedReferenceMetaDataResolverDeployer.endpointMap", endpointMap, Map.class);
+         top.addAttachment(ENDPOINT_MAP_KEY, endpointMap, Map.class);
       }
 
       dump(unit);
@@ -130,7 +139,7 @@
       {
          // Process web app references
          List<String> unresolvedPaths = new ArrayList<String>();
-         resolve(unit, endpointMap, webMetaData.getJndiEnvironmentRefsGroup(), unresolvedPaths);
+         //resolve(unit, endpointMap, webMetaData.getJndiEnvironmentRefsGroup(), unresolvedPaths);
          if(unresolvedPaths != null && unresolvedPaths.size() > 0)
             log.warn("Unresolved references exist in JBossWebMetaData:"+unresolvedPaths);
       }
@@ -138,10 +147,17 @@
       {
          // Process client app references
          List<String> unresolvedPaths = new ArrayList<String>();
-         resolve(unit, endpointMap, clientMetaData.getJndiEnvironmentRefsGroup(), unresolvedPaths);
+         //resolve(unit, endpointMap, clientMetaData.getJndiEnvironmentRefsGroup(), unresolvedPaths);
          if(unresolvedPaths != null && unresolvedPaths.size() > 0)
             log.warn("Unresolved references exist in JBossClientMetaData: "+unresolvedPaths);
       }
+      // Add the unique set of ContainerDependencyMetaData
+      Set<ContainerDependencyMetaData> depends = new HashSet<ContainerDependencyMetaData>();
+      for(ContainerDependencyMetaData cdmd : endpointMap.values())
+      {
+         depends.add(cdmd);
+      }
+      top.addAttachment(DEPENDS_SET_KEY, depends, Set.class);
    }
 
    /**
@@ -150,39 +166,44 @@
     * @param unit - the deployment top level unit to start the mapping from
     * @param endpointMap - the endpoint
     */
-   protected void mapEndpoints(DeploymentUnit unit, Map<String, String> endpointMap)
+   protected void mapEndpoints(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap)
    {
       boolean trace = log.isTraceEnabled();
       // First map the ejbs
       mapEjbs(unit, endpointMap, trace);
       // Map all sources of message-destinations
       mapMessageDestinations(unit, endpointMap, trace);
+      // Display the endpoint map for debugging
+      displayEndpoints(unit.getName(), endpointMap);
    }
-   protected void mapMessageDestinations(DeploymentUnit unit, Map<String, String> endpointMap, boolean trace)
+
+   protected void mapMessageDestinations(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap, boolean trace)
    {
       String vfsPath = unit.getRelativePath();
       JBossMetaData ejbMetaData = unit.getAttachment(JBossMetaData.class);
       MessageDestinationsMetaData msgDestinations = null;
+      ClassLoader loader = unit.getClassLoader();
       if(ejbMetaData != null)
       {
          ejbMetaData.getAssemblyDescriptor().getMessageDestinations();
-         mapMessageDestinations(vfsPath, msgDestinations, endpointMap, trace);
+         mapMessageDestinations(vfsPath, msgDestinations, endpointMap, loader, trace);
       }
       JBossWebMetaData webMetaData = unit.getAttachment(JBossWebMetaData.class);
       if(webMetaData != null)
       {
          msgDestinations = webMetaData.getMessageDestinations();
-         mapMessageDestinations(vfsPath, msgDestinations, endpointMap, trace);
+         mapMessageDestinations(vfsPath, msgDestinations, endpointMap, loader, trace);
       }
       JBossClientMetaData clientMetaData = unit.getAttachment(JBossClientMetaData.class);
       if(clientMetaData != null)
       {
          msgDestinations = clientMetaData.getMessageDestinations();
-         mapMessageDestinations(vfsPath, msgDestinations, endpointMap, trace);
+         mapMessageDestinations(vfsPath, msgDestinations, endpointMap, loader, trace);
       }
    }
    protected void mapMessageDestinations(String vfsPath, MessageDestinationsMetaData msgDestinations,
-         Map<String, String> endpointMap, boolean trace)
+         Map<String, ContainerDependencyMetaData> endpointMap,
+         ClassLoader loader, boolean trace)
    {
       if(msgDestinations == null || msgDestinations.size() == 0)
          return;
@@ -197,7 +218,10 @@
             continue;
          }
          String destPath = prefix + "/" + destName;
-         endpointMap.put(destPath, mappedName);
+         ContainerDependencyMetaData destMD = new ContainerDependencyMetaData(mappedName);
+         JndiDependencyMetaData jdmd = new JndiDependencyMetaData(mappedName, loader);
+         destMD.addJndiDependency(jdmd);
+         endpointMap.put(destPath, destMD);
          if(trace)
             log.trace("mapMessageDestinations: "+destPath+", mappedName: "+mappedName);
       }
@@ -211,7 +235,7 @@
     * @param unit
     * @param endpointMap
     */
-   protected void mapEjbs(DeploymentUnit unit, Map<String, String> endpointMap, boolean trace)
+   protected void mapEjbs(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap, boolean trace)
    {
       JBossMetaData ejbMetaData = unit.getAttachment(JBossMetaData.class);
       JBossEnterpriseBeansMetaData beans = null;
@@ -223,13 +247,19 @@
          String prefix = "ejb/" + vfsPath;
          for(JBossEnterpriseBeanMetaData bean : beans)
          {
-            String ejbPath = prefix + "/" + bean.getEjbName();
-            String mappedName = bean.getMappedName();
-            if(mappedName != null)
+            // The unique id for this ejb in the deployment
+            String ejbCompID = prefix + "/" + bean.getEjbName();
+            ContainerDependencyMetaData cdmd = new ContainerDependencyMetaData(ejbCompID);
+            endpointMap.put(ejbCompID, cdmd);
+            ArrayList<String> mappings = new ArrayList<String>();
+            // Alternate mappings
+            String ejbNameKey = "ejb/" + bean.getEjbName();
+            if(endpointMap.containsKey(ejbNameKey) == false)
             {
-               endpointMap.put(ejbPath, mappedName);
+               endpointMap.put(ejbNameKey, cdmd);
+               mappings.add(ejbNameKey);
                if(trace)
-                  log.trace("mapEjbs: "+ejbPath+", mappedName: "+mappedName);
+                  log.trace("mapEjbs, root ejb-name"+ejbNameKey);
             }
             // Create mappings based on the bean business interfaces
             if(bean instanceof JBossSessionBeanMetaData)
@@ -241,15 +271,28 @@
                {
                   for(String local : locals)
                   {
+                     // Add ejb/vfsPath/iface
                      String ifacePath = prefix + "/" + local;
                      if(endpointMap.containsKey(ifacePath))
                         log.debug(ejbName+" duplicates business local: "+local+", existing: "+endpointMap.get(ifacePath));
                      else
                      {
-                        endpointMap.put(ifacePath, ejbName);
+                        endpointMap.put(ifacePath, cdmd);
+                        mappings.add(ifacePath);
                         if(trace)
                            log.trace("mapEjbs, business-local: "+ifacePath+", ejbName: "+ejbName);
                      }
+                     // Add ejb/iface
+                     ifacePath = "ejb/" + local;
+                     if(endpointMap.containsKey(ifacePath))
+                        log.debug(ejbName+" duplicates business local: "+local+", existing: "+endpointMap.get(ifacePath));
+                     else
+                     {
+                        endpointMap.put(ifacePath, cdmd);
+                        mappings.add(ifacePath);
+                        if(trace)
+                           log.trace("mapEjbs, business-local: "+ifacePath+", ejbName: "+ejbName);
+                     }
                   }
                }
                BusinessRemotesMetaData remotes = sbean.getBusinessRemotes();
@@ -257,17 +300,32 @@
                {
                   for(String remote : remotes)
                   {
+                     // Add ejb/vfsPath/iface
                      String ifacePath = prefix + "/" + remote;
                      if(endpointMap.containsKey(ifacePath))
                         log.debug(ejbName+" duplicates business remote: "+remote+", existing: "+endpointMap.get(ifacePath));
                      else
                      {
-                        endpointMap.put(ifacePath, ejbName);
+                        endpointMap.put(ifacePath, cdmd);
+                        mappings.add(ifacePath);
                         if(trace)
                            log.trace("mapEjbs, business-remote: "+ifacePath+", ejbName: "+ejbName);
                      }
+                     // Add ejb/iface
+                     ifacePath = "ejb/" + remote;
+                     if(endpointMap.containsKey(ifacePath))
+                        log.debug(ejbName+" duplicates business remote: "+remote+", existing: "+endpointMap.get(ifacePath));
+                     else
+                     {
+                        endpointMap.put(ifacePath, cdmd);
+                        mappings.add(ifacePath);
+                        if(trace)
+                           log.trace("mapEjbs, business-remote: "+ifacePath+", ejbName: "+ejbName);
+                     }
                   }
                }
+               if(trace)
+                  log.trace("mapEjbs: "+ejbCompID+", mappings: "+mappings);
             }
          }
       }
@@ -281,21 +339,33 @@
       }
    }
 
-   protected void resolve(DeploymentUnit unit, Map<String, String> endpointMap, Environment env, List<String> unresolvedRefs)
+   /**
+    * 
+    * @param unit
+    * @param endpointMap
+    * @param referenceeKey
+    * @param env
+    * @param unresolvedRefs
+    */
+   protected void resolve(DeploymentUnit unit,
+         Map<String, ContainerDependencyMetaData> endpointMap,
+         String referenceeKey,
+         Environment env, List<String> unresolvedRefs)
    {
       if(env == null)
          return;
 
       AnnotatedEJBReferencesMetaData annotatedRefs = env.getAnnotatedEjbReferences();
+      //TODO: resolveEjbAnnotatedRefs(unit, endpointMap, referenceeKey, annotatedRefs, unresolvedRefs);
       EJBLocalReferencesMetaData localRefs = env.getEjbLocalReferences();
-      resolveEjbLocalRefs(unit, endpointMap, localRefs, unresolvedRefs);
+      //TODO: resolveEjbLocalRefs(unit, endpointMap, referenceeKey, localRefs, unresolvedRefs);
       EJBReferencesMetaData ejbRefs = env.getEjbReferences();
-      resolveEjbRefs(unit, endpointMap, ejbRefs, unresolvedRefs);
+      //TODO: resolveEjbRefs(unit, endpointMap, referenceeKey, ejbRefs, unresolvedRefs);
       MessageDestinationReferencesMetaData msgRefs = env.getMessageDestinationReferences();
-      resolveMsgRefs(unit, endpointMap, msgRefs, unresolvedRefs);
+      //TODO: resolveMsgRefs(unit, endpointMap, referenceeKey, msgRefs, unresolvedRefs);
       // TODO, other references
    }
-   protected List<String> resolve(DeploymentUnit unit, Map<String, String> endpointMap,
+   protected List<String> resolve(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap,
          JBossEnterpriseBeansMetaData beans)
    {
       ArrayList<String> unresolvedRefs = new ArrayList<String>();
@@ -304,69 +374,112 @@
 
       for(JBossEnterpriseBeanMetaData bean : beans)
       {
-         EJBLocalReferencesMetaData localRefs = bean.getEjbLocalReferences();
-         resolveEjbLocalRefs(unit, endpointMap, localRefs, unresolvedRefs);
-         EJBReferencesMetaData ejbRefs = bean.getEjbReferences();
-         resolveEjbRefs(unit, endpointMap, ejbRefs, unresolvedRefs);
          Environment env = bean.getJndiEnvironmentRefsGroup();
-         resolve(unit, endpointMap, env, unresolvedRefs);
+         //TODO: resolve(unit, endpointMap, env, unresolvedRefs);
       }
       return unresolvedRefs;
    }
 
+   protected void resolveEjbAnnotatedRefs(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap,
+      AnnotatedEJBReferencesMetaData annotatedRefs, List<String> unresolvedRefs)
+   {
+      if(annotatedRefs == null)
+         return;
+
+      String vfsPath = unit.getRelativePath();
+      ArrayList<String> searched = new ArrayList<String>();
+      for(AnnotatedEJBReferenceMetaData ref : annotatedRefs)
+      {
+         Class iface = ref.getBeanInterface();
+         String link = ref.getLink();
+         if(link != null)
+         {
+            String key = "ejb/" + vfsPath + "/" + link;
+            
+         }
+      }
+   }
+
    /**
     *
     * @param unit
     * @param localRefs
     * @param unresolvedRefs
     */
-   protected void resolveEjbLocalRefs(DeploymentUnit unit, Map<String, String> endpointMap,
+   protected void resolveEjbLocalRefs(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap,
          EJBLocalReferencesMetaData localRefs, List<String> unresolvedRefs)
    {
       if(localRefs == null)
          return;
+
       String vfsPath = unit.getRelativePath();
       String prefix = "ejb/" + vfsPath;
       ArrayList<String> searched = new ArrayList<String>();
       for(EJBLocalReferenceMetaData ref : localRefs)
       {
+         if (ref.getIgnoreDependency() != null)
+         {
+            log.debug("IGNORING <ejb-local-ref> DEPENDENCY: " + ref);
+            return;
+         }
+
          String link = ref.getLink();
+         String type = ref.getType();
          //String target = findLocalEjbLink(unit, link, searched);
-         // First look
-         String ejbPath = prefix + "/" + ref.getEjbRefName();
-         String target = endpointMap.get(ejbPath);
+         // First look for ejb/vfsPath/ejbName
+         String ejbPath = prefix + "/" + link;
+         ContainerDependencyMetaData target = endpointMap.get(ejbPath);
          if(target == null)
-            unresolvedRefs.add(ref.getEjbRefName()+"/ejb-local-ref/"+link+" available: " + searched);
-         else
          {
-            ref.setResolvedJndiName(target);
+            // ejb/
          }
+         if(target == null)
+            unresolvedRefs.add(ref.getEjbRefName()+"/ejb-local-ref/"+link+" available: " + searched);
+         // 
       }
    }
-   protected void resolveEjbRefs(DeploymentUnit unit, Map<String, String> endpointMap,
+   protected void resolveEjbRefs(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap,
          EJBReferencesMetaData ejbRefs, List<String> unresolvedRefs)
    {
       if(ejbRefs == null)
          return;
+
+      String vfsPath = unit.getRelativePath();
       ArrayList<String> searched = new ArrayList<String>();
       for(EJBReferenceMetaData ref : ejbRefs)
       {
+         if (ref.getIgnoreDependency() != null)
+         {
+            log.debug("IGNORING <ejb-ref> DEPENDENCY: " + ref);
+            return;
+         }
+
          String mappedName = ref.getMappedName();
          if(mappedName == null || mappedName.length() == 0)
          {
-            String link = ref.getLink();
-            String target = null;
-            if(link != null)
-               target = findEjbLink(unit, link, searched);
-            if(target == null)
-               unresolvedRefs.add(ref.getEjbRefName()+"/ejb-ref/"+link+ " available: " + searched);
+            ContainerDependencyMetaData dmd = null;
+            String[] keys = buildReferenceKeys(ref, vfsPath);
+            for(String key : keys)
+            {
+               dmd = endpointMap.get(key);
+               if(dmd != null)
+                  break;
+            }
+            if(dmd != null)
+            {
+               dmd.addInjectionTargets(ref.getInjectionTargets());
+            }
             else
-               mappedName = target;
+               unresolvedRefs.add(ref.toString());
          }
-         ref.setResolvedJndiName(mappedName);
+         else
+         {
+            // Create a JNDI dependency
+            ref.setResolvedJndiName(mappedName);            
+         }
       }
    }
-   protected void resolveMsgRefs(DeploymentUnit unit, Map<String, String> endpointMap,
+   protected void resolveMsgRefs(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap,
          MessageDestinationReferencesMetaData msgRefs, List<String> unresolvedRefs)
    {
       if(msgRefs == null)
@@ -384,9 +497,8 @@
             if(target == null)
                unresolvedRefs.add(ref.getMessageDestinationRefName()+"/message-destination-ref/"+link + " available: " + searched);
             else
-               mappedName = target.getMappedName();
+               ref.setMappedName(target.getMappedName());
          }
-         ref.setResolvedJndiName(mappedName);
       }
    }
 
@@ -438,6 +550,86 @@
       return resolveMessageDestination(di, link, searched);
    }
 
+   /**
+    * ejb/{iface}/{ejbName}/{vfsPath}
+    * 
+    * @param ref
+    * @return
+    */
+   private String[] buildReferenceKeys(EJBReferenceMetaData ref, String vfsPath)
+   {
+      ArrayList<String> tmp = new ArrayList<String>();
+
+      // Interface specified
+      if(ref.getHome() != null)
+      {
+         // Local to the referencee jar
+         String key = "ejb/" + vfsPath + ref.getHome();
+         tmp.add(key);
+         // Global
+         key = "ejb/" + ref.getHome();
+         tmp.add(key);
+      }
+      else if(ref.getRemote() != null)
+      {
+         String key = "ejb/" + vfsPath + ref.getRemote();
+         tmp.add(key);
+         // Global
+         key = "ejb/" + ref.getRemote();
+         tmp.add(key);         
+      }
+      // TODO: invoker bindings
+
+      // Process more generic resolution if an interface was not specified
+      if(tmp.size() == 0)
+      {
+         buildReferenceKeys(ref, tmp);
+      }
+
+      String[] keys = new String[tmp.size()];
+      tmp.toArray(keys);
+      return keys;
+   }
+   private String[] buildReferenceKeys(EJBLocalReferenceMetaData ref, String vfsPath)
+   {
+      ArrayList<String> tmp = new ArrayList<String>();
+
+      // Interface specified
+      if(ref.getLocalHome() != null)
+      {
+         // Local to the referencee jar
+         String key = "ejb/" + vfsPath + ref.getLocalHome();
+         tmp.add(key);
+         // Global
+         key = "ejb/" + ref.getLocalHome();
+         tmp.add(key);
+      }
+      else if(ref.getLocal() != null)
+      {
+         String key = "ejb/" + vfsPath + ref.getLocal();
+         tmp.add(key);
+         // Global
+         key = "ejb/" + ref.getLocal();
+         tmp.add(key);         
+      }
+
+      // Process more generic resolution if an interface was not specified
+      if(tmp.size() == 0)
+      {
+         buildReferenceKeys(ref, tmp);
+      }
+
+      String[] keys = new String[tmp.size()];
+      tmp.toArray(keys);
+      return keys;
+   }
+   private void buildReferenceKeys(AbstractEJBReferenceMetaData ref, ArrayList<String> keys)
+   {
+      // Link specified
+      String link = ref.getLink();
+      
+   }
+
    private static String resolveLink(DeploymentUnit di, String link, ArrayList<String> searched, boolean isLocal)
    {
       if (link == null)
@@ -528,6 +720,7 @@
          log.trace("Resolving absolute link, di: " + unit);
       }
 
+      
       String ejbName = null;
 
       // Search all ejb DeploymentUnits
@@ -823,4 +1016,15 @@
             dump(child, tmp, depth+1);
       }
    }
+   private void displayEndpoints(String unitName, Map<String, ContainerDependencyMetaData> endpointMap)
+   {
+      StringBuilder tmp = new StringBuilder(unitName+" endpoint mappings:\n");
+      for(Map.Entry<String, ContainerDependencyMetaData> entry : endpointMap.entrySet())
+      {
+         tmp.append("  + "+entry.getKey()+" -> "+entry.getValue().getComponentID());
+         tmp.append('\n');
+      }
+      log.info(tmp.toString());
+   }
+
 }

Modified: branches/InjectionPrototype/server/src/main/org/jboss/deployment/dependency/JndiDependencyMetaData.java
===================================================================
--- branches/InjectionPrototype/server/src/main/org/jboss/deployment/dependency/JndiDependencyMetaData.java	2008-03-31 18:04:32 UTC (rev 71493)
+++ branches/InjectionPrototype/server/src/main/org/jboss/deployment/dependency/JndiDependencyMetaData.java	2008-03-31 18:05:18 UTC (rev 71494)
@@ -58,11 +58,16 @@
     * @param jndiName - the name to lookup
     * @param loader - the ClassLoader to use as the TCL during lookup.
     */
+   public JndiDependencyMetaData(String jndiName, ClassLoader loader)
+   {
+      this(jndiName, loader, ControllerState.INSTALLED);
+   }
    public JndiDependencyMetaData(String jndiName, ClassLoader loader,
          ControllerState whenRequired)
    {
       this.jndiName = jndiName;
       this.loader = loader;
+      this.whenRequired = whenRequired;
    }
 
    public Object getDependency()

Modified: branches/InjectionPrototype/server/src/main/org/jboss/ejb/Container.java
===================================================================
--- branches/InjectionPrototype/server/src/main/org/jboss/ejb/Container.java	2008-03-31 18:04:32 UTC (rev 71493)
+++ branches/InjectionPrototype/server/src/main/org/jboss/ejb/Container.java	2008-03-31 18:05:18 UTC (rev 71494)
@@ -257,6 +257,38 @@
       }
    }
 
+   /** Build a JMX name using the pattern jboss.j2ee:service=EJB,jndiName=[jndiName]
+   where the [jndiName] is either the bean remote home JNDI binding, or
+   the local home JNDI binding if the bean has no remote interfaces.
+   @param beanMetaData
+   */
+   public static ObjectName getJmxName(BeanMetaData beanMetaData)
+   {
+      ObjectName jmxName = null;
+      if (beanMetaData == null)
+      {
+         throw new IllegalStateException("Container metaData is null");
+      }
+
+      String jndiName = beanMetaData.getContainerObjectNameJndiName();
+      if (jndiName == null)
+      {
+         throw new IllegalStateException("Container jndiName is null");
+      }
+
+      // The name must be escaped since the jndiName may be arbitrary
+      String name = BASE_EJB_CONTAINER_NAME + ",jndiName=" + jndiName;
+      try
+      {
+         jmxName = ObjectNameConverter.convert(name);
+      }
+      catch (MalformedObjectNameException e)
+      {
+         throw new RuntimeException("Failed to create ObjectName, msg=" + e.getMessage());
+      }
+      return jmxName;
+   }
+
    // Public --------------------------------------------------------
 
    public Class getLocalClass()
@@ -729,27 +761,7 @@
       if (jmxName == null)
       {
          BeanMetaData beanMetaData = getBeanMetaData();
-         if (beanMetaData == null)
-         {
-            throw new IllegalStateException("Container metaData is null");
-         }
-
-         String jndiName = beanMetaData.getContainerObjectNameJndiName();
-         if (jndiName == null)
-         {
-            throw new IllegalStateException("Container jndiName is null");
-         }
-
-         // The name must be escaped since the jndiName may be arbitrary
-         String name = BASE_EJB_CONTAINER_NAME + ",jndiName=" + jndiName;
-         try
-         {
-            jmxName = ObjectNameConverter.convert(name);
-         }
-         catch (MalformedObjectNameException e)
-         {
-            throw new RuntimeException("Failed to create ObjectName, msg=" + e.getMessage());
-         }
+         jmxName = getJmxName(beanMetaData);
       }
       return jmxName;
    }

Modified: branches/InjectionPrototype/server/src/main/org/jboss/ejb/EjbModule.java
===================================================================
--- branches/InjectionPrototype/server/src/main/org/jboss/ejb/EjbModule.java	2008-03-31 18:04:32 UTC (rev 71493)
+++ branches/InjectionPrototype/server/src/main/org/jboss/ejb/EjbModule.java	2008-03-31 18:05:18 UTC (rev 71494)
@@ -136,11 +136,11 @@
    // Attributes ----------------------------------------------------
 
    /** HashMap<ejbName, Container> the containers for this deployment unit. */
-   HashMap containers = new HashMap();
+   HashMap<String, Container> containers = new HashMap<String, Container>();
    /** The containers in their ApplicationMetaData ordering */
-   LinkedList containerOrdering = new LinkedList();
+   LinkedList<Container> containerOrdering = new LinkedList<Container>();
    /** HashMap<ejbName, EJBLocalHome> of local homes */
-   HashMap localHomes = new HashMap();
+   HashMap<String, EJBLocalHome> localHomes = new HashMap<String, EJBLocalHome>();
 
    /** Class loader of this deployment unit. */
    ClassLoader classLoader = null;

Modified: branches/InjectionPrototype/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java
===================================================================
--- branches/InjectionPrototype/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java	2008-03-31 18:04:32 UTC (rev 71493)
+++ branches/InjectionPrototype/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java	2008-03-31 18:05:18 UTC (rev 71494)
@@ -25,22 +25,30 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
 
 import org.jboss.aop.microcontainer.aspects.jmx.JMX;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.deployers.spi.DeploymentException;
 import org.jboss.deployers.vfs.spi.deployer.AbstractSimpleVFSRealDeployer;
 import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+import org.jboss.deployment.MappedReferenceMetaDataResolverDeployer;
+import org.jboss.deployment.dependency.ContainerDependencyMetaData;
+import org.jboss.ejb.EjbContainer;
 import org.jboss.ejb.EjbModule;
+import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment;
 import org.jboss.metadata.ApplicationMetaData;
 import org.jboss.metadata.ejb.jboss.ContainerConfigurationMetaData;
 import org.jboss.metadata.ejb.jboss.InvokerProxyBindingMetaData;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeansMetaData;
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.javaee.spec.ResourceInjectionTargetMetaData;
 import org.jboss.system.metadata.ServiceAttributeMetaData;
 import org.jboss.system.metadata.ServiceConstructorMetaData;
 import org.jboss.system.metadata.ServiceDependencyMetaData;
@@ -254,13 +262,21 @@
          ccm.setIDependOn(ccmServiceName);
          dependencies.add(ccm);
       }
-      // Add dependencies on the invoker services in use
+
+      // The deployment ejb endpoint dependencies
+      Map<String, ContainerDependencyMetaData> ejbCDMD = 
+         (Map<String, ContainerDependencyMetaData>) unit.getAttachment(MappedReferenceMetaDataResolverDeployer.ENDPOINT_MAP_KEY);
+
+      // Add dependencies on the invoker services in use and create
+      // mc bean metadata for the containers for dependency injection
       JBossEnterpriseBeansMetaData beans = deployment.getEnterpriseBeans();
+      List<BeanMetaData> mcBeans = new ArrayList<BeanMetaData>();
       Iterator<JBossEnterpriseBeanMetaData> beansIter = beans.iterator();
       HashSet<String> invokerNames = new HashSet<String>();
       HashSet<String> beanDepends = new HashSet<String>();
       while( beansIter.hasNext() )
       {
+         // Get the ejb metadata for the bean
          JBossEnterpriseBeanMetaData bmd = beansIter.next();
          Set<String> depends = bmd.getDepends();
          if (depends != null)
@@ -288,8 +304,38 @@
                dependencies.add(invoker);
             }
          }
+         // Get the ContainerDependencyMetaData for the bean
+         String unitName = unit.getName();
+         String key = "ejb/" + unit.getRelativePath() + "/" + bmd.getEjbName();
+         if(ejbCDMD != null)
+         {
+            ContainerDependencyMetaData beanCDMD = ejbCDMD.get(key);
+            if(beanCDMD == null)
+            {
+               log.warn("Failed to find ContainerDependencyMetaData for: "+key);
+               continue;
+            }
+            // 
+            AbstractBeanMetaData mcBMD = new AbstractBeanMetaData();
+            mcBMD.setBean(EjbContainer.class.getName());
+            mcBMD.setName(beanCDMD.getContainerName());
+            // Add injection dependencies
+            Set<ResourceInjectionTargetMetaData> injections = beanCDMD.getInjectionTargets();
+            for(ResourceInjectionTargetMetaData injection : injections)
+            {
+               String clazz = injection.getInjectionTargetClass();
+               String target = injection.getInjectionTargetName();
+            }
+            // Add aliases for jndi names?
+            HashSet aliases = new HashSet();
+            mcBMD.setAliases(aliases);
+         }
       }
 
+      // The ejb container mc beans view for dependency injection
+      AbstractKernelDeployment ejbModuleMC = new AbstractKernelDeployment();
+      //ejbModuleMC.setBeans(beans);
+      
       // Add any declared dependencies
       /* TODO: this is too coarse as bean to bean depends are being pulled up to the module level
          and an ejb module cannot depend on the beans it creates. The ejb deployer needs to




More information about the jboss-cvs-commits mailing list