[jboss-cvs] JBossAS SVN: r108472 - in trunk: server/src/main/java/org/jboss/web/deployers and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Oct 7 02:05:43 EDT 2010
Author: jaikiran
Date: 2010-10-07 02:05:42 -0400 (Thu, 07 Oct 2010)
New Revision: 108472
Modified:
trunk/server/pom.xml
trunk/server/src/main/java/org/jboss/web/deployers/AbstractWarDeployer.java
trunk/testsuite/src/main/org/jboss/test/web/servlets/StandaloneENCAnnotationsServlet.java
Log:
JBAS-8406 Add a dependency on annotated resource injections in a web module. Temporary workaround till we have switchboard
Modified: trunk/server/pom.xml
===================================================================
--- trunk/server/pom.xml 2010-10-06 22:03:07 UTC (rev 108471)
+++ trunk/server/pom.xml 2010-10-07 06:05:42 UTC (rev 108472)
@@ -257,6 +257,11 @@
</dependency>
<dependency>
+ <groupId>org.jboss.ejb3.ejbref.resolver</groupId>
+ <artifactId>ejbref-resolver-spi</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>org.jboss.integration</groupId>
<artifactId>jboss-deployment-spi</artifactId>
</dependency>
Modified: trunk/server/src/main/java/org/jboss/web/deployers/AbstractWarDeployer.java
===================================================================
--- trunk/server/src/main/java/org/jboss/web/deployers/AbstractWarDeployer.java 2010-10-06 22:03:07 UTC (rev 108471)
+++ trunk/server/src/main/java/org/jboss/web/deployers/AbstractWarDeployer.java 2010-10-07 06:05:42 UTC (rev 108472)
@@ -35,9 +35,12 @@
import java.util.Set;
import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.jboss.beans.metadata.api.annotations.Inject;
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.spi.ControllerState;
import org.jboss.deployers.spi.DeploymentException;
import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer;
import org.jboss.deployers.spi.deployer.helpers.AttachmentLocator;
@@ -45,6 +48,8 @@
import org.jboss.deployers.structure.spi.DeploymentUnit;
import org.jboss.deployers.structure.spi.main.MainDeployerInternals;
import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+import org.jboss.ejb3.ejbref.resolver.spi.EjbReference;
+import org.jboss.ejb3.ejbref.resolver.spi.EjbReferenceResolver;
import org.jboss.jpa.resolvers.PersistenceUnitDependencyResolver;
import org.jboss.kernel.plugins.bootstrap.basic.KernelConstants;
import org.jboss.managed.api.ManagedObject;
@@ -58,6 +63,8 @@
import org.jboss.metadata.ear.jboss.JBossAppMetaData;
import org.jboss.metadata.ear.spec.ModuleMetaData;
import org.jboss.metadata.ear.spec.WebModuleMetaData;
+import org.jboss.metadata.javaee.spec.AnnotatedEJBReferenceMetaData;
+import org.jboss.metadata.javaee.spec.AnnotatedEJBReferencesMetaData;
import org.jboss.metadata.javaee.spec.PersistenceContextReferenceMetaData;
import org.jboss.metadata.javaee.spec.PersistenceContextReferencesMetaData;
import org.jboss.metadata.javaee.spec.PersistenceUnitReferenceMetaData;
@@ -72,6 +79,8 @@
import org.jboss.system.metadata.ServiceDependencyMetaData;
import org.jboss.system.metadata.ServiceInjectionValueMetaData;
import org.jboss.system.metadata.ServiceMetaData;
+import org.jboss.system.metadata.ServiceMetaDataVisitor;
+import org.jboss.system.microcontainer.ServiceControllerContext;
import org.jboss.vfs.VFS;
import org.jboss.vfs.VFSUtils;
import org.jboss.vfs.VirtualFile;
@@ -110,6 +119,8 @@
public static final String WEB_APP = "org.jboss.web.AbstractWebContainer.webApp";
public static final String WEB_MODULE = "org.jboss.web.AbstractWebContainer.webModule";
public static final String ERROR = "org.jboss.web.AbstractWebContainer.error";
+
+ private static final String JNDI_DEPENDENCY_PREFIX = "jndi:";
/** A mapping of deployed warUrl strings to the WebApplication object */
protected HashMap deploymentMap = new HashMap();
@@ -133,6 +144,9 @@
private MainDeployerInternals mainDeployer;
private PersistenceUnitDependencyResolver persistenceUnitDependencyResolver;
+
+ /** EJB reference resolver */
+ private EjbReferenceResolver ejbRefResolver;
/**
* Create a new AbstractWarDeployer.
@@ -261,7 +275,14 @@
{
this.persistenceUnitDependencyResolver = resolver;
}
+
+ @Inject
+ public void setEjbReferenceResolver(EjbReferenceResolver resolver)
+ {
+ this.ejbRefResolver = resolver;
+ }
+
/** Get the session attribute number under which the caller Subject is stored
* @jmx:managed-attribute
*/
@@ -738,6 +759,32 @@
dependencies.add(sdmd);
}
}
+
+ // JBAS-8406 Add dependency on @EJB(s). This is a bit of duplicacy, since the TomcatInjectionContainer
+ // through various handler would also do the same. But since the TomcatInjectionContainer comes too late
+ // in the picture and since we already have similar duplicacy for @PersistenceContext and @PersistenceUnit (see few lines
+ // above) and more importantly, since this works, let's just have it here.
+ if (metaData.getJndiEnvironmentRefsGroup() != null)
+ {
+ AnnotatedEJBReferencesMetaData annotatedEjbRefs = metaData.getJndiEnvironmentRefsGroup().getAnnotatedEjbReferences();
+ if (annotatedEjbRefs != null && !annotatedEjbRefs.isEmpty())
+ {
+ for (AnnotatedEJBReferenceMetaData annotatedEjbRef : annotatedEjbRefs)
+ {
+ // Note: @EJB(beanName="") is set as "link" in AnnotatedEJBReferenceMetadata.
+ // Hence, we use the getLink() method to get hold of the beanName during resolution.
+ String beanName = annotatedEjbRef.getLink();
+ EjbReference ejbReference = new EjbReference(beanName, annotatedEjbRef.getBeanInterface().getName(), annotatedEjbRef.getMappedName());
+ String jndiName = this.ejbRefResolver.resolveEjb(unit, ejbReference);
+ if (jndiName != null)
+ {
+ ServiceDependencyMetaData sdmd = this.createJNDIDependency(jndiName);
+ dependencies.add(sdmd);
+ }
+ }
+ }
+ }
+
webModule.setDependencies(dependencies);
@@ -751,7 +798,7 @@
}
catch (Exception e)
{
- throw DeploymentException.rethrowAsDeploymentException("Error creating rar deployment " + unit.getName(), e);
+ throw DeploymentException.rethrowAsDeploymentException("Error creating web module " + unit.getName(), e);
}
}
@@ -810,4 +857,52 @@
}
return virtualFile.toURL();
}
+
+ /**
+ * Creates and returns a {@link ServiceDependencyMetaData} corresponding to the
+ * passed jndi name
+ *
+ * @param jndiName The jndi name
+ * @return
+ */
+ private ServiceDependencyMetaData createJNDIDependency(String jndiName)
+ {
+ String dependency = JNDI_DEPENDENCY_PREFIX + jndiName;
+ ServiceDependencyMetaData sdmd = new InstalledServiceDependencyMetaData();
+ sdmd.setIDependOn(dependency);
+ return sdmd;
+ }
+
+ /**
+ *
+ * Similar to {@link ServiceDependencyMetaData} except that this expects the
+ * dependency to be in {@link ControllerState#INSTALLED}, unlike {@link ServiceDependencyMetaData}
+ * which expects it to be either in {@link ControllerState#START} or {@link ControllerState#CREATE}
+ *
+ */
+ private class InstalledServiceDependencyMetaData extends ServiceDependencyMetaData
+ {
+ /**
+ * @see ServiceDependencyMetaData#visit(ServiceMetaDataVisitor)
+ *
+ */
+ @Override
+ public void visit(ServiceMetaDataVisitor visitor)
+ {
+ ServiceControllerContext context = visitor.getControllerContext();
+ Object name = context.getName();
+ Object dependency = this.getIDependOn();
+ try
+ {
+ dependency = getIDependOnObjectName().getCanonicalName();
+ }
+ catch (MalformedObjectNameException ignored)
+ {
+ }
+ // add a dependency on INSTALLED state of the dependency item
+ visitor.addDependency(new AbstractDependencyItem(name, dependency, ControllerState.CREATE, ControllerState.INSTALLED));
+ visitor.addDependency(new AbstractDependencyItem(name, dependency, ControllerState.START, ControllerState.INSTALLED));
+ visitor.visit(this);
+ }
+ }
}
Modified: trunk/testsuite/src/main/org/jboss/test/web/servlets/StandaloneENCAnnotationsServlet.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/web/servlets/StandaloneENCAnnotationsServlet.java 2010-10-06 22:03:07 UTC (rev 108471)
+++ trunk/testsuite/src/main/org/jboss/test/web/servlets/StandaloneENCAnnotationsServlet.java 2010-10-07 06:05:42 UTC (rev 108472)
@@ -71,7 +71,7 @@
mappedName="jbosstest/ejbs/UnsecuredEJB")
StatelessSessionHome sshome;
@EJB(name="ejb/CtsBmp", beanInterface=EntityHome.class,
- mappedName="jbosstest/ejbs/CtsBmp")
+ mappedName="ejbcts/BMPBean")
EntityHome entityHome;
@EJB(name="ejb/local/bean3", beanInterface=StatelessSessionLocalHome.class,
mappedName="jbosstest/ejbs/local/ENCBean1")
More information about the jboss-cvs-commits
mailing list