[jboss-cvs] JBossAS SVN: r68489 - trunk/server/src/main/org/jboss/deployment.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Dec 21 04:42:39 EST 2007


Author: scott.stark at jboss.org
Date: 2007-12-21 04:42:39 -0500 (Fri, 21 Dec 2007)
New Revision: 68489

Modified:
   trunk/server/src/main/org/jboss/deployment/ReferenceMetaDataResolverDeployer.java
Log:
Initial support for MessageDestinationReferenceMetaData

Modified: trunk/server/src/main/org/jboss/deployment/ReferenceMetaDataResolverDeployer.java
===================================================================
--- trunk/server/src/main/org/jboss/deployment/ReferenceMetaDataResolverDeployer.java	2007-12-21 09:40:11 UTC (rev 68488)
+++ trunk/server/src/main/org/jboss/deployment/ReferenceMetaDataResolverDeployer.java	2007-12-21 09:42:39 UTC (rev 68489)
@@ -31,7 +31,6 @@
 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.deployers.structure.spi.main.MainDeployerStructure;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.client.jboss.JBossClientMetaData;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
@@ -48,6 +47,9 @@
 import org.jboss.metadata.javaee.spec.EJBReferencesMetaData;
 import org.jboss.metadata.javaee.spec.Environment;
 import org.jboss.metadata.javaee.spec.MessageDestinationMetaData;
+import org.jboss.metadata.javaee.spec.MessageDestinationReferenceMetaData;
+import org.jboss.metadata.javaee.spec.MessageDestinationReferencesMetaData;
+import org.jboss.metadata.javaee.spec.MessageDestinationsMetaData;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
 
 /**
@@ -108,19 +110,21 @@
          // Process ejb references
          List<String> unresolvedPaths = resolve(unit, beans);
          if(unresolvedPaths != null && unresolvedPaths.size() > 0)
-            log.warn("Unresolved references exist in JBossMetaData: "+unresolvedPaths);
+            log.warn("Unresolved references exist in JBossMetaData: "+unresolvedPaths);         
       }
       if(webMetaData != null)
       {
          // Process web app references
-         List<String>  unresolvedPaths = resolve(unit, webMetaData.getJndiEnvironmentRefsGroup());         
+         List<String> unresolvedPaths = new ArrayList<String>();
+         resolve(unit, webMetaData.getJndiEnvironmentRefsGroup(), unresolvedPaths);         
          if(unresolvedPaths != null && unresolvedPaths.size() > 0)
             log.warn("Unresolved references exist in JBossWebMetaData: "+unresolvedPaths);
       }
       if(clientMetaData != null)
       {
          // Process client app references
-         List<String>  unresolvedPaths = resolve(unit, clientMetaData.getJndiEnvironmentRefsGroup());
+         List<String> unresolvedPaths = new ArrayList<String>();
+         resolve(unit, clientMetaData.getJndiEnvironmentRefsGroup(), unresolvedPaths);
          if(unresolvedPaths != null && unresolvedPaths.size() > 0)
             log.warn("Unresolved references exist in JBossClientMetaData: "+unresolvedPaths);
       }
@@ -160,20 +164,20 @@
       }
    }
 
-   protected List<String> resolve(DeploymentUnit unit, Environment env)
+   protected void resolve(DeploymentUnit unit, Environment env, List<String> unresolvedRefs)
    {
       if(env == null)
-         return null;
+         return;
 
-      ArrayList<String> unresolvedRefs = new ArrayList<String>();
       AnnotatedEJBReferencesMetaData annotatedRefs = env.getAnnotatedEjbReferences();
       
       EJBLocalReferencesMetaData localRefs = env.getEjbLocalReferences();
       resolveEjbLocalRefs(unit, localRefs, unresolvedRefs);
       EJBReferencesMetaData ejbRefs = env.getEjbReferences();
       resolveEjbRefs(unit, ejbRefs, unresolvedRefs);
+      MessageDestinationReferencesMetaData msgRefs = env.getMessageDestinationReferences();
+      resolveMsgRefs(unit, msgRefs, unresolvedRefs);
       // TODO, other references
-      return unresolvedRefs;
    }
    protected List<String> resolve(DeploymentUnit unit, JBossEnterpriseBeansMetaData beans)
    {
@@ -187,11 +191,13 @@
          resolveEjbLocalRefs(unit, localRefs, unresolvedRefs);
          EJBReferencesMetaData ejbRefs = bean.getEjbReferences();
          resolveEjbRefs(unit, ejbRefs, unresolvedRefs);
+         Environment env = bean.getJndiEnvironmentRefsGroup();
+         resolve(unit, env, unresolvedRefs);
       }
       return unresolvedRefs;
    }
 
-   protected void resolveEjbLocalRefs(DeploymentUnit unit, EJBLocalReferencesMetaData localRefs, ArrayList<String> unresolvedRefs)
+   protected void resolveEjbLocalRefs(DeploymentUnit unit, EJBLocalReferencesMetaData localRefs, List<String> unresolvedRefs)
    {
       if(localRefs == null)
          return;
@@ -206,7 +212,7 @@
             ref.setMappedName(target);
       }      
    }
-   protected void resolveEjbRefs(DeploymentUnit unit, EJBReferencesMetaData ejbRefs, ArrayList<String> unresolvedRefs)
+   protected void resolveEjbRefs(DeploymentUnit unit, EJBReferencesMetaData ejbRefs, List<String> unresolvedRefs)
    {
       if(ejbRefs == null)
          return;
@@ -227,6 +233,27 @@
          }
       }      
    }
+   protected void resolveMsgRefs(DeploymentUnit unit, MessageDestinationReferencesMetaData msgRefs, List<String> unresolvedRefs)
+   {
+      if(msgRefs == null)
+         return;
+      ArrayList<MessageDestinationMetaData> searched = new ArrayList<MessageDestinationMetaData>();
+      for(MessageDestinationReferenceMetaData ref : msgRefs)
+      {
+         String mappedName = ref.getMappedName();
+         if(mappedName == null || mappedName.length() == 0)
+         {
+            String link = ref.getLink();
+            MessageDestinationMetaData target = null;
+            if(link != null)
+               target = findMessageDestination(unit, link, searched);
+            if(target == null)
+               unresolvedRefs.add(ref.getMessageDestinationRefName()+"/message-destination-ref/"+link + " available: " + searched);
+            else
+               ref.setMappedName(target.getMappedName());
+         }
+      }
+   }
 
    /**
     * Resolves an &lt;ejb-link&gt; target for an &lt;ejb-ref&gt; entry and
@@ -264,16 +291,15 @@
     * Resolves a &lt;message-destination&gt; target for a &lt;message-destination-link&gt; 
     * entry and returns the name of the target in the JNDI tree.
     *
-    * @param server the main deployer
     * @param di DeploymentUnit
     * @param link Content of the &lt;message-driven-link&gt; entry.
     *
     * @return The JNDI Entry of the target; <code>null</code> if
     *         no appropriate target could be found.
     */
-   public static MessageDestinationMetaData findMessageDestination(MainDeployerStructure server, DeploymentUnit di, String link)
+   public static MessageDestinationMetaData findMessageDestination(DeploymentUnit di, String link, ArrayList<MessageDestinationMetaData> searched)
    {
-      return resolveMessageDestination(server, di, link);
+      return resolveMessageDestination(di, link, searched);
    }
 
    private static String resolveLink(DeploymentUnit di, String link, ArrayList<String> searched, boolean isLocal)
@@ -457,7 +483,7 @@
       return jndiName;
    }
 
-   private static MessageDestinationMetaData resolveMessageDestination(MainDeployerStructure server, DeploymentUnit di, String link)
+   private static MessageDestinationMetaData resolveMessageDestination(DeploymentUnit di, String link, ArrayList<MessageDestinationMetaData> searched)
    {
       if (link == null)
          return null;
@@ -471,16 +497,16 @@
 
       if (link.indexOf('#') != -1)
          // link is specified in the form path/file.jar#Bean
-         return resolveRelativeMessageDestination(di, link);
+         return resolveRelativeMessageDestination(di, link, searched);
       else
       {
          // link contains a Bean Name, scan the DeploymentUnit tree
          DeploymentUnit top = di.getTopLevel();
-         return resolveAbsoluteMessageDestination(top, link);
+         return resolveAbsoluteMessageDestination(top, link, searched);
       }
    }
 
-   private static MessageDestinationMetaData resolveRelativeMessageDestination(DeploymentUnit unit, String link)
+   private static MessageDestinationMetaData resolveRelativeMessageDestination(DeploymentUnit unit, String link, ArrayList<MessageDestinationMetaData> searched)
    {
       String path = link.substring(0, link.indexOf('#'));
       String destinationName = link.substring(link.indexOf('#') + 1);
@@ -500,40 +526,56 @@
       if (log.isTraceEnabled())
          log.trace("Found appropriate DeploymentUnit: " + targetUnit);
 
+      MessageDestinationMetaData md = null;
+      MessageDestinationsMetaData mds = null;
       if (targetUnit.getAttachment(JBossMetaData.class) != null)
       {
          JBossMetaData appMD = targetUnit.getAttachment(JBossMetaData.class);
-         return appMD.getAssemblyDescriptor().getMessageDestination(destinationName);
+         mds = appMD.getAssemblyDescriptor().getMessageDestinations();
+         md = mds.get(destinationName);
       }
       if (targetUnit.getAttachment(JBossWebMetaData.class) != null)
       {
          JBossWebMetaData webMD = targetUnit.getAttachment(JBossWebMetaData.class);
-         return webMD.getMessageDestination(destinationName);
+         mds = webMD.getMessageDestinations();
+         md = mds.get(destinationName);
       }
-      else
+
+      if(md == null)
       {
          log.warn("DeploymentUnit " + targetUnit + " is not an EJB .jar " + "file!");
-         return null;
+         if(mds != null)
+            searched.addAll(mds);
       }
+      return md;
    }
 
-   private static MessageDestinationMetaData resolveAbsoluteMessageDestination(DeploymentUnit unit, String link)
+   private static MessageDestinationMetaData resolveAbsoluteMessageDestination(DeploymentUnit unit, String link, ArrayList<MessageDestinationMetaData> searched)
    {
       if (log.isTraceEnabled())
          log.trace("Resolving absolute link, di: " + unit);
 
       // Search current DeploymentUnit
+      MessageDestinationMetaData md = null;
+      MessageDestinationsMetaData mds = null;
       if (unit.getAttachment(JBossMetaData.class) != null)
       {
          JBossMetaData appMD = unit.getAttachment(JBossMetaData.class);
-         MessageDestinationMetaData mdMD = appMD.getAssemblyDescriptor().getMessageDestination(link);
-         if (mdMD != null)
-            return mdMD;
+         mds = appMD.getAssemblyDescriptor().getMessageDestinations();
+         searched.addAll(mds);
+         md = mds.get(link);
+         if (md != null)
+            return md;
       }
+
       if (unit.getAttachment(JBossWebMetaData.class) != null)
       {
          JBossWebMetaData webMD = unit.getAttachment(JBossWebMetaData.class);
-         return webMD.getMessageDestination(link);
+         mds = webMD.getMessageDestinations();
+         searched.addAll(mds);
+         md = mds.get(link);
+         if(md != null)
+            return md;
       }
 
       // Search each subcontext
@@ -541,7 +583,7 @@
       while (it.hasNext())
       {
          DeploymentUnit child = it.next();
-         MessageDestinationMetaData mdMD = resolveAbsoluteMessageDestination(child, link);
+         MessageDestinationMetaData mdMD = resolveAbsoluteMessageDestination(child, link, searched);
          if (mdMD != null)
             return mdMD;
       }




More information about the jboss-cvs-commits mailing list