[jboss-cvs] JBossAS SVN: r64075 - in trunk/ejb3/src/main/org/jboss/ejb3: dependency and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jul 16 13:28:50 EDT 2007


Author: wolfc
Date: 2007-07-16 13:28:50 -0400 (Mon, 16 Jul 2007)
New Revision: 64075

Added:
   trunk/ejb3/src/main/org/jboss/ejb3/dependency/
   trunk/ejb3/src/main/org/jboss/ejb3/dependency/EjbLinkDemandMetaData.java
Modified:
   trunk/ejb3/src/main/org/jboss/ejb3/EJBContainer.java
   trunk/ejb3/src/main/org/jboss/ejb3/MCDependencyPolicy.java
   trunk/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DependencyPolicy.java
   trunk/ejb3/src/main/org/jboss/ejb3/javaee/AbstractJavaEEComponent.java
   trunk/ejb3/src/main/org/jboss/ejb3/javaee/JavaEEComponent.java
   trunk/ejb3/src/main/org/jboss/ejb3/javaee/JavaEEComponentHelper.java
Log:
EJBTHREE-1014: proper demand for ejb link

Modified: trunk/ejb3/src/main/org/jboss/ejb3/EJBContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/EJBContainer.java	2007-07-16 16:57:12 UTC (rev 64074)
+++ trunk/ejb3/src/main/org/jboss/ejb3/EJBContainer.java	2007-07-16 17:28:50 UTC (rev 64075)
@@ -69,6 +69,7 @@
 import org.jboss.ejb3.interceptor.LifecycleInterceptorHandler;
 import org.jboss.ejb3.javaee.JavaEEComponent;
 import org.jboss.ejb3.javaee.JavaEEComponentHelper;
+import org.jboss.ejb3.javaee.JavaEEModule;
 import org.jboss.ejb3.metamodel.AssemblyDescriptor;
 import org.jboss.ejb3.metamodel.EnterpriseBean;
 import org.jboss.ejb3.security.JaccHelper;
@@ -1090,6 +1091,11 @@
       return info;
    }
    
+   public JavaEEModule getModule()
+   {
+      return deployment;
+   }
+   
    public String toString()
    {
       return getObjectName().getCanonicalName();

Modified: trunk/ejb3/src/main/org/jboss/ejb3/MCDependencyPolicy.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/MCDependencyPolicy.java	2007-07-16 16:57:12 UTC (rev 64074)
+++ trunk/ejb3/src/main/org/jboss/ejb3/MCDependencyPolicy.java	2007-07-16 17:28:50 UTC (rev 64075)
@@ -28,6 +28,7 @@
 import org.jboss.beans.metadata.plugins.AbstractSupplyMetaData;
 import org.jboss.beans.metadata.spi.DemandMetaData;
 import org.jboss.beans.metadata.spi.SupplyMetaData;
+import org.jboss.ejb3.dependency.EjbLinkDemandMetaData;
 import org.jboss.ejb3.javaee.JavaEEComponent;
 
 /**
@@ -38,15 +39,15 @@
  */
 public class MCDependencyPolicy implements DependencyPolicy
 {
-   private JavaEEComponent module;
+   private JavaEEComponent component;
    private Set<DemandMetaData> dependencies = new HashSet<DemandMetaData>();
    private Set<SupplyMetaData> supplies = new HashSet<SupplyMetaData>();
 
-   public MCDependencyPolicy(JavaEEComponent module)
+   public MCDependencyPolicy(JavaEEComponent component)
    {
-      assert module != null : "module is null";
+      assert component != null : "component is null";
       
-      this.module = module;
+      this.component = component;
    }
    
    public void addDependency(String dependency)
@@ -76,6 +77,15 @@
       addDependency("Class:" + businessInterface.getName());
    }
    
+   /**
+    * Add a dependency on an enterprise bean.
+    * 
+    * Optionally the ejb link is prefixed with the path name to
+    * another ejb-jar file separated with a '#' to the enterprise bean's name.
+    * 
+    * @param ejbLink        the name of the target enterprise bean
+    * @param businessInterface
+    */
    public void addDependency(String ejbLink, Class<?> businessInterface)
    {
       assert ejbLink != null : "ejbLink is null";
@@ -83,6 +93,7 @@
       // Note that businessInterface is always ignored during resolving.
       
       // FIXME: less hacky
+      
       int hashIndex = ejbLink.indexOf('#');
       if (hashIndex != -1)
       {
@@ -99,10 +110,10 @@
 //            return null;
 //         }
          String ejbName = ejbLink.substring(hashIndex + 1);
-         addDependency(module.createObjectName(unitName, ejbName));
+         addDependency(component.createObjectName(unitName, ejbName));
       }
       else
-         addDependency(module.createObjectName(ejbLink));
+         dependencies.add(new EjbLinkDemandMetaData(component, ejbLink));
    }
    
    public Set<DemandMetaData> getDependencies()

Added: trunk/ejb3/src/main/org/jboss/ejb3/dependency/EjbLinkDemandMetaData.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/dependency/EjbLinkDemandMetaData.java	                        (rev 0)
+++ trunk/ejb3/src/main/org/jboss/ejb3/dependency/EjbLinkDemandMetaData.java	2007-07-16 17:28:50 UTC (rev 64075)
@@ -0,0 +1,174 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.dependency;
+
+import java.io.Serializable;
+import java.util.Iterator;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+
+import org.jboss.beans.metadata.spi.DemandMetaData;
+import org.jboss.beans.metadata.spi.MetaDataVisitor;
+import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.ejb3.javaee.JavaEEComponent;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.util.JBossObject;
+import org.jboss.util.JBossStringBuilder;
+
+/**
+ * Note that this one is only used for an ejb link which doesn't have a module
+ * specified.
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class EjbLinkDemandMetaData extends JBossObject
+   implements DemandMetaData, Serializable
+{
+   private static final long serialVersionUID = 1L;
+   
+   /** The demand */
+   private ObjectName demand;
+   
+   /** When the dependency is required */
+   private ControllerState whenRequired = ControllerState.DESCRIBED;
+
+   /**
+    * 
+    * @param component      the component which needs the enterprise bean
+    * @param ejbName        the name of the enterprise bean to find
+    */
+   public EjbLinkDemandMetaData(JavaEEComponent component, String ejbName)
+   {
+      try
+      {
+         this.demand = new ObjectName(component.createObjectName(null, ejbName));
+      }
+      catch (MalformedObjectNameException e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+
+   public Object getDemand()
+   {
+      return demand;
+   }
+
+   public ControllerState getWhenRequired()
+   {
+      return whenRequired;
+   }
+
+   public void describeVisit(MetaDataVisitor vistor)
+   {
+      vistor.describeVisit(this);
+   }
+
+   public Iterator<? extends MetaDataVisitorNode> getChildren()
+   {
+      return null;
+   }
+
+   public void initialVisit(MetaDataVisitor visitor)
+   {
+      KernelControllerContext context = visitor.getControllerContext();
+      DependencyItem item = new EjbLinkDemandDependencyItem(context.getName());
+      visitor.addDependency(item);
+      visitor.initialVisit(this);
+   }
+   
+   @Override
+   public void toString(JBossStringBuilder buffer)
+   {
+      buffer.append("demand=").append(demand);
+      if (whenRequired != null)
+         buffer.append(" whenRequired=").append(whenRequired.getStateString());
+   }
+   
+   @Override
+   public void toShortString(JBossStringBuilder buffer)
+   {
+      buffer.append(demand);
+   }
+
+   private class EjbLinkDemandDependencyItem extends AbstractDependencyItem
+   {
+      public EjbLinkDemandDependencyItem(Object name)
+      {
+         super(name, null, whenRequired, null);
+      }
+      
+      @Override
+      public boolean resolve(Controller controller)
+      {
+         for(ControllerContext context : controller.getContextsByState(ControllerState.INSTALLED))
+         {
+            try
+            {
+               ObjectName otherName = new ObjectName(context.getName().toString());
+               
+               if(demand.apply(otherName))
+               {
+                  setIDependOn(context.getName());
+                  addDependsOnMe(controller, context);
+                  setResolved(true);
+                  return isResolved();
+               }
+            }
+            catch (MalformedObjectNameException e)
+            {
+               // ignore this context
+            }
+         }
+         setResolved(false);
+         return isResolved();
+      }
+      
+      @Override
+      public void toString(JBossStringBuilder buffer)
+      {
+         super.toString(buffer);
+         buffer.append(" demand=").append(demand.getCanonicalName());
+      }
+      
+      @Override
+      public void toShortString(JBossStringBuilder buffer)
+      {
+         buffer.append(getName()).append(" demands ").append(demand.getCanonicalName());
+      }
+
+      @Override
+      public String toHumanReadableString()
+      {
+         StringBuilder builder = new StringBuilder();
+         builder.append("Demands '").append(demand.getCanonicalName());
+         return builder.toString();
+      }
+   }
+}


Property changes on: trunk/ejb3/src/main/org/jboss/ejb3/dependency/EjbLinkDemandMetaData.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: trunk/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DependencyPolicy.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DependencyPolicy.java	2007-07-16 16:57:12 UTC (rev 64074)
+++ trunk/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DependencyPolicy.java	2007-07-16 17:28:50 UTC (rev 64075)
@@ -32,9 +32,9 @@
  */
 public class JBoss5DependencyPolicy extends MCDependencyPolicy
 {
-   public JBoss5DependencyPolicy(JavaEEComponent module)
+   public JBoss5DependencyPolicy(JavaEEComponent component)
    {
-      super(module);
+      super(component);
    }
    
    public void addDatasource(String jndiName)

Modified: trunk/ejb3/src/main/org/jboss/ejb3/javaee/AbstractJavaEEComponent.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/javaee/AbstractJavaEEComponent.java	2007-07-16 16:57:12 UTC (rev 64074)
+++ trunk/ejb3/src/main/org/jboss/ejb3/javaee/AbstractJavaEEComponent.java	2007-07-16 17:28:50 UTC (rev 64075)
@@ -47,4 +47,9 @@
    {
       return JavaEEComponentHelper.createObjectName(module, unitName, ejbName);
    }
+   
+   public JavaEEModule getModule()
+   {
+      return module;
+   }
 }

Modified: trunk/ejb3/src/main/org/jboss/ejb3/javaee/JavaEEComponent.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/javaee/JavaEEComponent.java	2007-07-16 16:57:12 UTC (rev 64074)
+++ trunk/ejb3/src/main/org/jboss/ejb3/javaee/JavaEEComponent.java	2007-07-16 17:28:50 UTC (rev 64075)
@@ -47,4 +47,9 @@
     * @return
     */
    String createObjectName(String unitName, String ejbName);
+   
+   /**
+    * Returns the module of which this component is a part.
+    */
+   JavaEEModule getModule();
 }

Modified: trunk/ejb3/src/main/org/jboss/ejb3/javaee/JavaEEComponentHelper.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/javaee/JavaEEComponentHelper.java	2007-07-16 16:57:12 UTC (rev 64074)
+++ trunk/ejb3/src/main/org/jboss/ejb3/javaee/JavaEEComponentHelper.java	2007-07-16 17:28:50 UTC (rev 64075)
@@ -34,11 +34,28 @@
  */
 public class JavaEEComponentHelper
 {
+   /**
+    * Create an object name refering to the enterprise bean in this module.
+    * 
+    * @param module
+    * @param ejbName
+    * @return
+    */
    public static String createObjectName(JavaEEModule module, String ejbName)
    {
       return createObjectName(module, module.getName(), ejbName);
    }
    
+   /**
+    * Create an object name refering the enterprise bean in another module.
+    * 
+    * If the module name is not known, it will create an object name pattern.
+    * 
+    * @param module         this module
+    * @param unitName       the name of the other module or null if not known
+    * @param ejbName        the name of the enterprise bean
+    * @return               the canonical object name
+    */
    public static String createObjectName(JavaEEModule module, String unitName, String ejbName)
    {
       // TODO: currently it's only for EJB3 service
@@ -50,8 +67,15 @@
          sb.append(ear.getName());
          sb.append(",");
       }
-      sb.append("jar=");
-      sb.append(unitName);
+      if(unitName == null)
+      {
+         sb.append("*");
+      }
+      else
+      {
+         sb.append("jar=");
+         sb.append(unitName);
+      }
       sb.append(",name=");
       sb.append(ejbName);
       try




More information about the jboss-cvs-commits mailing list