[jboss-cvs] JBossAS SVN: r109230 - in branches/switchboard-integration-bean-manager: tomcat/src/main/java/org/jboss/web/tomcat/service/deployers and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 10 11:19:45 EST 2010


Author: marius.bogoevici
Date: 2010-11-10 11:19:44 -0500 (Wed, 10 Nov 2010)
New Revision: 109230

Added:
   branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299InjectorDeployer.java
   branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299NonContextualInjector.java
Modified:
   branches/switchboard-integration-bean-manager/tomcat/src/main/java/org/jboss/web/tomcat/service/TomcatInjectionContainer.java
   branches/switchboard-integration-bean-manager/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java
   branches/switchboard-integration-bean-manager/weld-int/assembly/src/main/assembly/resources/META-INF/weld-deployers-jboss-beans.xml
   branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/WebContainterIntegrationDeployer.java
Log:
very basic integration of CDI within InjectionManager - we need to also consider EJB integration

Modified: branches/switchboard-integration-bean-manager/tomcat/src/main/java/org/jboss/web/tomcat/service/TomcatInjectionContainer.java
===================================================================
--- branches/switchboard-integration-bean-manager/tomcat/src/main/java/org/jboss/web/tomcat/service/TomcatInjectionContainer.java	2010-11-10 16:15:49 UTC (rev 109229)
+++ branches/switchboard-integration-bean-manager/tomcat/src/main/java/org/jboss/web/tomcat/service/TomcatInjectionContainer.java	2010-11-10 16:19:44 UTC (rev 109230)
@@ -140,7 +140,6 @@
    private static final Properties restrictedFilters = new Properties();
    private static final Properties restrictedListeners = new Properties();
    private static final Properties restrictedServlets = new Properties();
-   private List<Injector> defaultInjectors;
    // the naming component counter-part
    private JavaEEComponent component;
    
@@ -226,11 +225,6 @@
    }
    
 
-   public void setDefaultInjectors(List<Injector> injectors)
-   {
-      this.defaultInjectors = Collections.unmodifiableList(injectors);
-   }
-
    private void checkAccess(Class<?> clazz)
    {
       if (catalinaContext.getPrivileged())
@@ -377,27 +371,34 @@
       {
          final boolean trace = log.isTraceEnabled();
 
-         final ArrayList<Injector> allInjectors = new ArrayList<Injector>();
          Map<AccessibleObject, Injector> injectors = getEncInjectionsForObject(object);
-         if (injectors != null &&  injectors.size() > 0)
+         if (injectors == null || injectors.size() == 0)
          {
-            allInjectors.addAll(injectors.values());
+            if (trace)
+            {
+               log.trace("-- no injectors found for: " + object);
+            }
          }
-         if (defaultInjectors != null && defaultInjectors.size() > 0)
+         else
          {
-            allInjectors.addAll(defaultInjectors);
+            if (trace)
+            {
+               log.trace("-- doing injections for: " + object);
+            }
+            for (Injector injector : injectors.values())
+            {
+               injector.inject(object);
+            }
          }
-         if (trace)
-            log.trace("-- doing injections for: " + object);
-         for (Injector injector : allInjectors)
-         {
-            injector.inject(object);
-         }
          // TODO: Ultimately, once the injection is completely
          // managed by InjectionManager, we should get rid of all other injectors
          // used in this method (maybe except for "defaultInjectors") and instead
          // just use the InjectionManager
          // Use the InjectionManager
+         if (trace)
+         {
+            log.trace("-- processing InjectionManager for : " + object);
+         }
          this.injectionManager.inject(object);
 
       }

Modified: branches/switchboard-integration-bean-manager/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java
===================================================================
--- branches/switchboard-integration-bean-manager/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java	2010-11-10 16:15:49 UTC (rev 109229)
+++ branches/switchboard-integration-bean-manager/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java	2010-11-10 16:19:44 UTC (rev 109230)
@@ -30,11 +30,9 @@
 import org.apache.tomcat.util.modeler.Registry;
 import org.jboss.beans.metadata.api.annotations.Inject;
 import org.jboss.dependency.spi.ControllerContext;
-import org.jboss.dependency.spi.ControllerState;
 import org.jboss.deployers.spi.DeploymentException;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
-import org.jboss.injection.Injector;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
 import org.jboss.metadata.web.spec.TldMetaData;
@@ -69,7 +67,6 @@
 import java.security.CodeSource;
 import java.security.cert.Certificate;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -200,22 +197,6 @@
          new TomcatInjectionContainer(webApp, depUnit, context, 
                getPersistenceUnitDependencyResolver(), config.getDynamicClassloaders(), component, this.getInjectionManager());
 
-      if (kernel != null)
-      {
-         // Look for a WBInjector bean defined for the current deployment unit. If not found, check the parent.
-         DeploymentUnit inspectedUnit = unit;
-         ControllerContext injectorControllerContext = null;
-         while (inspectedUnit != null && injectorControllerContext == null)
-         {
-            injectorControllerContext = kernel.getController().getContext(inspectedUnit.getName() + "_WBInjector", ControllerState.INSTANTIATED);
-            inspectedUnit = inspectedUnit.getParent();
-         }
-         if (injectorControllerContext != null)
-         {
-            injectionContainer.setDefaultInjectors(Collections.singletonList((Injector)injectorControllerContext.getTarget()));
-         }
-      }
-
       Loader webLoader = depUnit.getAttachment(Loader.class);
       if (webLoader == null)
          webLoader = getWebLoader(depUnit, metaData, loader, warUrl, injectionContainer);

Modified: branches/switchboard-integration-bean-manager/weld-int/assembly/src/main/assembly/resources/META-INF/weld-deployers-jboss-beans.xml
===================================================================
--- branches/switchboard-integration-bean-manager/weld-int/assembly/src/main/assembly/resources/META-INF/weld-deployers-jboss-beans.xml	2010-11-10 16:15:49 UTC (rev 109229)
+++ branches/switchboard-integration-bean-manager/weld-int/assembly/src/main/assembly/resources/META-INF/weld-deployers-jboss-beans.xml	2010-11-10 16:19:44 UTC (rev 109230)
@@ -126,4 +126,8 @@
   <bean name="org.jboss.switchboard.BeanManagerResourceProvider" class="org.jboss.weld.integration.deployer.jndi.BeanManagerResourceProvider">
       <property name="moduleInformer"><inject bean="NamingJavaEEModuleInformer"/></property>
   </bean>
+
+  <bean name="org.jboss.weld.integration.injection.Jsr299InjectorDeployer" class="org.jboss.weld.integration.injection.Jsr299InjectorDeployer">
+      <property name="kernelController"><inject bean="jboss.kernel:service=KernelController"/></property>
+  </bean>
 </deployment>

Modified: branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/WebContainterIntegrationDeployer.java
===================================================================
--- branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/WebContainterIntegrationDeployer.java	2010-11-10 16:15:49 UTC (rev 109229)
+++ branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/WebContainterIntegrationDeployer.java	2010-11-10 16:19:44 UTC (rev 109230)
@@ -33,23 +33,14 @@
    {
       if (DeployersUtils.isBootstrapBeanPresent(unit) && unit.getAttachment(DeployersUtils.WELD_FILES) != null)
       {
-         String injectorName = unit.getName() + "_WBInjector";
-         String bootstrapBeanName = DeployersUtils.getBootstrapBeanName(unit);
 
-         BeanMetaDataBuilder weldInjector = BeanMetaDataBuilder.createBuilder(injectorName, WeldInjector.class.getName());
-
-         weldInjector.addConstructorParameter(BootstrapBean.class.getName(), weldInjector.createInject(bootstrapBeanName));
-         weldInjector.addConstructorParameter(String.class.getName(), unit.getClassLoader().toString());
-         weldInjector.setDestroy("cleanup");
-         unit.addAttachment(injectorName + "_" + BeanMetaData.class.getSimpleName(), weldInjector.getBeanMetaData());
-
          List<String> depends = deployment.getDepends();
          if (depends == null)
          {
             depends = new ArrayList<String>();
             deployment.setDepends(depends);
          }
-         depends.add(bootstrapBeanName);
+         depends.add(DeployersUtils.getBootstrapBeanName(unit));
       }
    }
 }

Added: branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299InjectorDeployer.java
===================================================================
--- branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299InjectorDeployer.java	                        (rev 0)
+++ branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299InjectorDeployer.java	2010-11-10 16:19:44 UTC (rev 109230)
@@ -0,0 +1,83 @@
+package org.jboss.weld.integration.injection;
+
+import org.jboss.beans.metadata.api.model.InjectOption;
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.injection.manager.spi.InjectionManager;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.weld.integration.deployer.DeployersUtils;
+
+/**
+ * A deployer for a Jsr299Injector
+ *
+ * @author Marius Bogoevici
+ */
+public class Jsr299InjectorDeployer extends AbstractSimpleRealDeployer<InjectionManager>
+{
+   private KernelController kernelController;
+
+   public Jsr299InjectorDeployer()
+   {
+      super(InjectionManager.class);
+      setStage(DeploymentStages.POST_CLASSLOADER);
+      setOutput(InjectionManager.class);
+   }
+
+   public void setKernelController(KernelController kernelController)
+   {
+      this.kernelController = kernelController;
+   }
+
+   @Override
+   public void deploy(DeploymentUnit unit, InjectionManager deployment) throws DeploymentException
+   {
+      if (isCDIDeployment(unit))
+      {
+         try
+         {
+            Jsr299NonContextualInjector injector = new Jsr299NonContextualInjector(unit.getClassLoader().toString());
+            BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(getJsr299McBeanName(unit), Jsr299NonContextualInjector.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);
+            deployment.addInjector(injector);
+         }
+         catch (Throwable throwable)
+         {
+            throw new DeploymentException(throwable);
+         }
+      }
+   }
+
+   private boolean isCDIDeployment(DeploymentUnit unit)
+   {
+      return unit.getAttachment(DeployersUtils.WELD_FILES) != null;
+   }
+
+   @Override
+   public void undeploy(DeploymentUnit unit, InjectionManager deployment)
+   {
+      if (isCDIDeployment(unit))
+      {
+         kernelController.uninstall(getJsr299McBeanName(unit));
+      }
+   }
+
+   private String getJsr299McBeanName(DeploymentUnit deploymentUnit)
+   {
+      if (!deploymentUnit.isComponent())
+      {
+         return deploymentUnit.getName() + "_Jsr299BeanInjector";
+      }
+      else
+      {
+         return deploymentUnit.getParent().getName() + "/" + deploymentUnit.getName() + "_Jsr299Injector";
+      }
+   }
+}

Added: branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299NonContextualInjector.java
===================================================================
--- branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299NonContextualInjector.java	                        (rev 0)
+++ branches/switchboard-integration-bean-manager/weld-int/deployer/src/main/java/org/jboss/weld/integration/injection/Jsr299NonContextualInjector.java	2010-11-10 16:19:44 UTC (rev 109230)
@@ -0,0 +1,80 @@
+package org.jboss.weld.integration.injection;
+
+import org.jboss.injection.manager.spi.InjectionContext;
+import org.jboss.injection.manager.spi.InjectionException;
+import org.jboss.injection.manager.spi.Injector;
+import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.weld.integration.deployer.env.helpers.BootstrapBean;
+import org.jboss.weld.manager.api.WeldManager;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.InjectionTarget;
+import java.util.concurrent.atomic.AtomicReference;
+
+public class Jsr299NonContextualInjector implements Injector
+{
+
+   private BootstrapBean bootstrapBean;
+   private String bdaId;
+   private AtomicReference<WeldManager> weldManagerRef;
+
+   public Jsr299NonContextualInjector(String bdaId)
+   {
+      this.bdaId = bdaId;
+      this.weldManagerRef = new AtomicReference<WeldManager>();
+   }
+
+   public void setBootstrapBean(BootstrapBean bootstrapBean)
+   {
+      this.bootstrapBean = bootstrapBean;
+   }
+
+   public <T> void inject(InjectionContext<T> injectionContext) throws InjectionException
+   {
+      WeldManager weldManager = initWeldManagerIfNecessary();
+      Object instance = injectionContext.getInjectionTarget();
+
+      if (weldManager == null)
+         throw new IllegalArgumentException("Null bean manager.");
+
+      CreationalContext<Object> creationalContext =  weldManager.createCreationalContext(null);
+      InjectionTarget<Object> injectionTarget = (InjectionTarget<Object>) weldManager.fireProcessInjectionTarget(weldManager.createAnnotatedType(instance.getClass()));
+      injectionTarget.inject(instance, creationalContext);
+      injectionContext.proceed();
+   }
+
+   private WeldManager initWeldManagerIfNecessary()
+   {
+      WeldManager weldManager = weldManagerRef.get();
+      if (weldManager == null)
+      {
+         weldManager = locateWeldManager();
+      }
+      weldManagerRef.compareAndSet(null, weldManager);
+      return weldManager;
+   }
+
+   private WeldManager locateWeldManager()
+   {
+      BeanDeploymentArchive foundBeanDeploymentArchive = null;
+      for (BeanDeploymentArchive beanDeploymentArchive: bootstrapBean.getDeployment().getBeanDeploymentArchives())
+      {
+         if (beanDeploymentArchive.getId().equals(bdaId))
+         {
+            foundBeanDeploymentArchive = beanDeploymentArchive;
+         }
+      }
+      if (foundBeanDeploymentArchive == null)
+      {
+         throw new IllegalStateException("Cannot find BeanManager for BeanDeploymentArchive with id=" + bdaId);
+      }
+
+      return bootstrapBean.getBootstrap().getManager(foundBeanDeploymentArchive);
+   }
+
+   public void release()
+   {
+      bootstrapBean = null;
+      weldManagerRef.set(null);
+   }
+}



More information about the jboss-cvs-commits mailing list