[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