[jboss-cvs] JBossAS SVN: r109478 - in trunk/weld-int/deployer: src/main/java/org/jboss/weld/integration/deployer/env and 5 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Nov 25 13:10:21 EST 2010
Author: marius.bogoevici
Date: 2010-11-25 13:10:20 -0500 (Thu, 25 Nov 2010)
New Revision: 109478
Modified:
trunk/weld-int/deployer/pom.xml
trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/WeldBootstrapDeployer.java
trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JBossBeanManagerObjectFactory.java
trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JavaEEComponentJndiBinderDeployer.java
trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JndiBinder.java
trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/metadata/WeldEjbInterceptorMetadataDeployer.java
trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299InjectorDeployer.java
trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/instantiator/Jsr299BeanInstantiatorDeployer.java
trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/util/JndiUtils.java
Log:
JBAS-8666 and others - fix integration btw CDI/EJB
- remove JNDI binding done by weld-int
- WeldEjbInterceptorMetadataDeployer processes InterceptorMetaData for CDI integration interceptors allowing Switchboard/Injector to process @Resource annotations
- change dependencies to ensure that global JNDI binding to take place before the containers are started (avoid deadlock)
Modified: trunk/weld-int/deployer/pom.xml
===================================================================
--- trunk/weld-int/deployer/pom.xml 2010-11-25 17:58:12 UTC (rev 109477)
+++ trunk/weld-int/deployer/pom.xml 2010-11-25 18:10:20 UTC (rev 109478)
@@ -13,14 +13,15 @@
<description>Weld deployers for JBoss AS</description>
<build>
- <plugins>
- <plugin>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <skipTests>false</skipTests>
- </configuration>
- </plugin>
-
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skipTests>false</skipTests>
+ <!-- use the endorsed directory for tests, we need to use javax.annotations 1.1 -->
+ <argLine>-Djava.endorsed.dirs="${project.build.directory}/endorsed"</argLine>
+ </configuration>
+ </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
@@ -33,6 +34,32 @@
</execution>
</executions>
</plugin>
+
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <!-- org.jboss.spec.javax.annotation:jboss-annotations-api_1.1_spec needs to be
+ in endorsed because Java SE too ships javax.annotation.Resource which doesn't have the
+ lookup() method -->
+ <artifactItem>
+ <groupId>org.jboss.spec.javax.annotation</groupId>
+ <artifactId>jboss-annotations-api_1.1_spec</artifactId>
+ <type>jar</type>
+ <overWrite>true</overWrite>
+ <outputDirectory>${project.build.directory}/endorsed</outputDirectory>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
@@ -486,6 +513,31 @@
<groupId>org.jboss.ejb3.instantiator</groupId>
<artifactId>jboss-ejb3-instantiator-impl</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>org.jboss.metadata</groupId>
+ <artifactId>jboss-metadata-ejb</artifactId>
+ <scope>provided</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.jboss.javaee</groupId>
+ <artifactId>jboss-jms-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.javaee</groupId>
+ <artifactId>jboss-transaction-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.javaee</groupId>
+ <artifactId>jboss-ejb-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.spec.javax.annotation</groupId>
+ <artifactId>jboss-annotations-api_1.1_spec</artifactId>
+ </dependency>
</dependencies>
Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/WeldBootstrapDeployer.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/WeldBootstrapDeployer.java 2010-11-25 17:58:12 UTC (rev 109477)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/WeldBootstrapDeployer.java 2010-11-25 18:10:20 UTC (rev 109478)
@@ -151,9 +151,9 @@
install.addParameterMetaData(Object.class.getName(), bootstrapName);
install.addParameterMetaData(Iterable.class.getName(), bootstrap.createInject(ejbServicesValue.getUnderlyingValue(), "ejbContainerNames"));
install.addParameterMetaData(String.class.getName(), "Start");
- install.addParameterMetaData(String.class.getName(), "Create");
+ install.addParameterMetaData(String.class.getName(), ControllerState.PRE_INSTALL.getStateString());
- ParameterMetaDataBuilder jndiInstall = bootstrap.addInstallWithParameters("bind", "JndiBinder");
+ ParameterMetaDataBuilder jndiInstall = bootstrap.addInstallWithParameters("bind", "JndiBinder", ControllerState.INSTALLED, ControllerState.START);
jndiInstall.addParameterMetaData(DeploymentUnit.class.getName(), unit);
ParameterMetaDataBuilder jndiUninstall = bootstrap.addUninstallWithParameters("unbind", "JndiBinder");
Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JBossBeanManagerObjectFactory.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JBossBeanManagerObjectFactory.java 2010-11-25 17:58:12 UTC (rev 109477)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JBossBeanManagerObjectFactory.java 2010-11-25 18:10:20 UTC (rev 109478)
@@ -40,10 +40,11 @@
{
Reference reference = (Reference) o;
StringRefAddr refAddr = (StringRefAddr) reference.get(JndiBinder.REFADDR_ID);
+ String beanManagerId = (String)refAddr.getContent();
if (Container.available())
{
Container container = Container.instance();
- String beanManagerId = (String)refAddr.getContent();
+
for (Map.Entry<BeanDeploymentArchive, BeanManagerImpl> mapElement : container.beanDeploymentArchives().entrySet())
{
if (mapElement.getKey().getId().equals(beanManagerId))
@@ -52,6 +53,10 @@
}
}
}
- throw new NamingException("Cannot resolve BeanManager");
+ else
+ {
+ throw new NamingException("Cannot resolve BeanManager: container not available");
+ }
+ throw new NamingException("Cannot resolve BeanManager for id " + beanManagerId);
}
}
Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JavaEEComponentJndiBinderDeployer.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JavaEEComponentJndiBinderDeployer.java 2010-11-25 17:58:12 UTC (rev 109477)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JavaEEComponentJndiBinderDeployer.java 2010-11-25 18:10:20 UTC (rev 109478)
@@ -59,60 +59,6 @@
@Override
public void deploy(DeploymentUnit deploymentUnit, JBossEnterpriseBeanMetaData jBossEnterpriseBeanMetaData) throws DeploymentException
{
- BeanMetaData bbBMD = getBootstrapBeanAttachment(deploymentUnit.getTopLevel());
- if (bbBMD == null)
- {
- return;
- }
-
- if (informer.getModuleType(deploymentUnit).equals(org.jboss.reloaded.naming.deployers.javaee.JavaEEModuleInformer.ModuleType.EJB))
- {
- if (jBossEnterpriseBeanMetaData instanceof JBossSessionBean31MetaData &&
- ((JBossSessionBean31MetaData)jBossEnterpriseBeanMetaData).isSingleton())
- {
- String containerName = jBossEnterpriseBeanMetaData.getContainerName() == null ?
- jBossEnterpriseBeanMetaData.getGeneratedContainerName() :
- jBossEnterpriseBeanMetaData.getContainerName();
-
- BeanMetaData containerBeanMetadata = deploymentUnit.getParent().getAttachment(BeanMetaData.class + ":" + containerName, BeanMetaData.class);
- BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(containerBeanMetadata);
- builder.addDependency(getJndiBinderName(deploymentUnit));
- builder.addDependency(DeployersUtils.getBootstrapBeanName(deploymentUnit));
- }
-
- String jndiBinderName = getJndiBinderName(deploymentUnit);
- BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(jndiBinderName, JavaEEComponentJndiBinder.class.getName());
- AbstractInjectionValueMetaData javaComponent = new AbstractInjectionValueMetaData(getComponentBeanName(deploymentUnit));
- builder.addConstructorParameter(JavaEEComponent.class.getName(), javaComponent);
- builder.addInstall("bindToJavaComp");
- deploymentUnit.getParent().addAttachment(jndiBinderName, builder.getBeanMetaData());
- }
}
- private String getJndiBinderName(DeploymentUnit deploymentUnit)
- {
- return getComponentBeanName(deploymentUnit) + "_CompJndiBinder";
- }
-
- private BeanMetaData getBootstrapBeanAttachment(DeploymentUnit deploymentUnit)
- {
- String bootstrapName = DeployersUtils.getBootstrapBeanName(deploymentUnit.getTopLevel());
- String bbAttachmentName = bootstrapName + "_" + BeanMetaData.class.getSimpleName();
-
- BeanMetaData bbBMD = deploymentUnit.getTopLevel().getAttachment(bbAttachmentName, BeanMetaData.class);
- return bbBMD;
- }
-
- private String getComponentBeanName(DeploymentUnit deploymentUnit)
- {
- String appName = informer.getApplicationName(deploymentUnit);
- String moduleName = informer.getModuleName(deploymentUnit);
- String componentName = informer.getComponentName(deploymentUnit);
- String name = "jboss.naming:";
- if(appName != null)
- name += "application=" + appName + ",";
- name += "module=" + moduleName + ",component=" + componentName;
- return name;
- }
-
}
Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JndiBinder.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JndiBinder.java 2010-11-25 17:58:12 UTC (rev 109477)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/jndi/JndiBinder.java 2010-11-25 18:10:20 UTC (rev 109478)
@@ -145,7 +145,7 @@
{
if (hasJndiBoundBeanManager(unit))
{
- String path = JndiUtils.getJndiSubcontexPathtForBeanManager(moduleInformer, unit);
+ String path = JndiUtils.getJndiSubcontexPathForBeanManager(moduleInformer, unit);
Context subcontext = Util.createSubcontext(rootContext, path);
Reference reference = new Reference(BeanManager.class.getName(), "org.jboss.weld.integration.deployer.jndi.JBossBeanManagerObjectFactory", null);
reference.add(new StringRefAddr(REFADDR_ID, IdFactory.getIdFromClassLoader(unit.getClassLoader())));
@@ -179,7 +179,7 @@
{
if (hasJndiBoundBeanManager(unit))
{
- String path = JndiUtils.getJndiSubcontexPathtForBeanManager(moduleInformer, unit);
+ String path = JndiUtils.getJndiSubcontexPathForBeanManager(moduleInformer, unit);
Context subcontext = (Context) rootContext.lookup(path);
subcontext.unbind("BeanManager");
rootContext.destroySubcontext(path);
Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/metadata/WeldEjbInterceptorMetadataDeployer.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/metadata/WeldEjbInterceptorMetadataDeployer.java 2010-11-25 17:58:12 UTC (rev 109477)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/metadata/WeldEjbInterceptorMetadataDeployer.java 2010-11-25 18:10:20 UTC (rev 109478)
@@ -21,12 +21,16 @@
*/
package org.jboss.weld.integration.deployer.metadata;
+import java.lang.reflect.AnnotatedElement;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import org.jboss.deployers.spi.DeploymentException;
import org.jboss.deployers.spi.deployer.DeploymentStages;
import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+import org.jboss.metadata.annotation.creator.ejb.InterceptorMetaDataCreator;
+import org.jboss.metadata.annotation.finder.DefaultAnnotationFinder;
import org.jboss.metadata.ejb.jboss.JBossAssemblyDescriptorMetaData;
import org.jboss.metadata.ejb.jboss.JBossMetaData;
import org.jboss.metadata.ejb.spec.AroundInvokeMetaData;
@@ -39,8 +43,10 @@
import org.jboss.metadata.ejb.spec.InterceptorMetaData;
import org.jboss.metadata.ejb.spec.InterceptorsMetaData;
import org.jboss.vfs.VirtualFile;
-import org.jboss.weld.integration.deployer.DeployersUtils;
+import org.jboss.weld.integration.ejb.SessionBeanInterceptor;
+import org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor;
+
/**
* Adds wb custom interceptor to ejb deployments.
*
@@ -49,10 +55,14 @@
@SuppressWarnings("deprecation")
public class WeldEjbInterceptorMetadataDeployer extends WeldAwareMetadataDeployer<JBossMetaData>
{
- public static final String INJECTION_INTERCEPTOR_CLASS_NAME = "org.jboss.weld.integration.ejb.SessionBeanInterceptor";
- public static final String CONTEXT_INTERCEPTOR_CLASS_NAME = "org.jboss.weld.ejb.SessionBeanInterceptor";
- public static final String BINDINGS_INTERCEPTOR_CLASS_NAME = "org.jboss.weld.integration.ejb.interceptor.Jsr299BindingsInterceptor";
+ private static final Class<SessionBeanInterceptor> INJECTION_INTERCEPTOR_CLASS = SessionBeanInterceptor.class;
+ private static final Class<org.jboss.weld.ejb.SessionBeanInterceptor> CONTEXT_INTERCEPTOR_CLASS = org.jboss.weld.ejb.SessionBeanInterceptor.class;
+ private static final Class<Jsr299BindingsInterceptor> BINDINGS_INTERCEPTOR_CLASS = Jsr299BindingsInterceptor.class;
+ public static final String INJECTION_INTERCEPTOR_CLASS_NAME = INJECTION_INTERCEPTOR_CLASS.getName();
+ public static final String CONTEXT_INTERCEPTOR_CLASS_NAME = CONTEXT_INTERCEPTOR_CLASS.getName();
+ public static final String BINDINGS_INTERCEPTOR_CLASS_NAME = BINDINGS_INTERCEPTOR_CLASS.getName();
+
private InterceptorMetaData injectionIMD;
private InterceptorMetaData bindingsIMD;
private InterceptorMetaData contextIMD;
@@ -60,19 +70,25 @@
private InterceptorBindingMetaData bindingsIBMD;
private InterceptorBindingMetaData contextIBMD;
+ private InterceptorMetaDataCreator interceptorMetaDataCreator;
+
public WeldEjbInterceptorMetadataDeployer()
{
super(JBossMetaData.class, true);
+ interceptorMetaDataCreator = new InterceptorMetaDataCreator(new DefaultAnnotationFinder<AnnotatedElement>());
+
+
addInput("merged." + JBossMetaData.class.getName());
setStage(DeploymentStages.POST_CLASSLOADER);
+ //create and process metadata for JSR299 interceptors
+ InterceptorsMetaData interceptorsMetaData = interceptorMetaDataCreator.create(Arrays.<Class<?>>asList(INJECTION_INTERCEPTOR_CLASS, CONTEXT_INTERCEPTOR_CLASS, BINDINGS_INTERCEPTOR_CLASS));
+
// create interceptor metadata instance for session beans
- injectionIMD = new InterceptorMetaData();
- injectionIMD.setInterceptorClass(INJECTION_INTERCEPTOR_CLASS_NAME);
+ injectionIMD = interceptorsMetaData.get(INJECTION_INTERCEPTOR_CLASS_NAME);
- contextIMD = new InterceptorMetaData();
- contextIMD.setInterceptorClass(CONTEXT_INTERCEPTOR_CLASS_NAME);
+ contextIMD = interceptorsMetaData.get(CONTEXT_INTERCEPTOR_CLASS_NAME);
if (contextIMD.getAroundInvokes() == null)
{
@@ -84,8 +100,7 @@
contextIMD.getAroundInvokes().add(aroundInvokeMetaData);
// create interceptor metadata instance for JSR-299 specific bindings
- bindingsIMD = new InterceptorMetaData();
- bindingsIMD.setInterceptorClass(BINDINGS_INTERCEPTOR_CLASS_NAME);
+ bindingsIMD = interceptorsMetaData.get(BINDINGS_INTERCEPTOR_CLASS_NAME);
// create interceptor binding metadata instance
injectionIBMD = createInterceptorBindingMetadata(INJECTION_INTERCEPTOR_CLASS_NAME);
Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299InjectorDeployer.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299InjectorDeployer.java 2010-11-25 17:58:12 UTC (rev 109477)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299InjectorDeployer.java 2010-11-25 18:10:20 UTC (rev 109478)
@@ -46,7 +46,7 @@
public Jsr299InjectorDeployer()
{
super(InjectionManager.class);
- setStage(DeploymentStages.POST_CLASSLOADER);
+ setStage(DeploymentStages.REAL);
setOutput(InjectionManager.class);
}
@@ -65,7 +65,6 @@
Jsr299Injector injector = new Jsr299Injector(IdFactory.getIdFromClassLoader(unit.getClassLoader()));
BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(getJsr299InjectorMcBeanName(unit), Jsr299Injector.class.getName());
AbstractInjectionValueMetaData injectionValueMetaData = new AbstractInjectionValueMetaData(DeployersUtils.getBootstrapBeanName(unit));
- injectionValueMetaData.setInjectionOption(InjectOption.CALLBACK);
builder.addPropertyMetaData("bootstrapBean", injectionValueMetaData);
builder.addUninstall("release");
kernelController.install(builder.getBeanMetaData(), injector);
Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/instantiator/Jsr299BeanInstantiatorDeployer.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/instantiator/Jsr299BeanInstantiatorDeployer.java 2010-11-25 17:58:12 UTC (rev 109477)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/instantiator/Jsr299BeanInstantiatorDeployer.java 2010-11-25 18:10:20 UTC (rev 109478)
@@ -55,21 +55,6 @@
beanMetaDataBuilder.setBean(Jsr299BeanInstantiator.class.getName());
beanMetaDataBuilder.addPropertyMetaData("bdaId", IdFactory.getIdFromClassLoader(unit.getClassLoader()));
AbstractInjectionValueMetaData bootstrapBean = new AbstractInjectionValueMetaData(DeployersUtils.getBootstrapBeanName(unit));
- bootstrapBean.setInjectionOption(InjectOption.CALLBACK);
beanMetaDataBuilder.addPropertyMetaData("bootstrapBean", bootstrapBean);
-
- //
- if (ejb instanceof JBossSessionBean31MetaData &&
- ((JBossSessionBean31MetaData) ejb).isSingleton())
- {
- String containerName = ejb.getContainerName() == null ?
- ejb.getGeneratedContainerName() :
- ejb.getContainerName();
-
- BeanMetaData containerBeanMetadata = unit.getAttachment(BeanMetaData.class + ":" + containerName, BeanMetaData.class);
- BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(containerBeanMetadata);
- builder.addDependency(DeployersUtils.getBootstrapBeanName(unit));
- builder.addDependency(beanMetaDataBuilder.getBeanMetaData().getName());
- }
}
}
Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/util/JndiUtils.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/util/JndiUtils.java 2010-11-25 17:58:12 UTC (rev 109477)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/util/JndiUtils.java 2010-11-25 18:10:20 UTC (rev 109478)
@@ -35,7 +35,7 @@
*/
public static final String BEAN_MANAGER_GLOBAL_SUBCONTEXT = "cdi";
- public static String getJndiSubcontexPathtForBeanManager(JavaEEModuleInformer moduleInformer, DeploymentUnit unit)
+ public static String getJndiSubcontexPathForBeanManager(JavaEEModuleInformer moduleInformer, DeploymentUnit unit)
{
String applicationName = moduleInformer.getApplicationName(unit);
String path = (applicationName == null) ? "" : (applicationName + "/");
@@ -45,6 +45,8 @@
public static String getGlobalBeanManagerPath(JavaEEModuleInformer moduleInformer, DeploymentUnit unit)
{
- return "java:global/" + BEAN_MANAGER_GLOBAL_SUBCONTEXT + "/" + getJndiSubcontexPathtForBeanManager(moduleInformer, unit) + "/BeanManager";
+ DeploymentUnit deploymentUnit = unit.isComponent() ? unit.getParent() : unit;
+ String subcontexPathForBeanManager = getJndiSubcontexPathForBeanManager(moduleInformer, deploymentUnit);
+ return "java:global/" + BEAN_MANAGER_GLOBAL_SUBCONTEXT + "/" + subcontexPathForBeanManager + "/BeanManager";
}
}
More information about the jboss-cvs-commits
mailing list