[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