[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