From jira-events at lists.jboss.org Tue Nov 16 11:22:45 2010 Content-Type: multipart/mixed; boundary="===============2971216173451075898==" MIME-Version: 1.0 From: Lincoln Baxter III (JIRA) To: arquillian-issues at lists.jboss.org Subject: [arquillian-issues] [JBoss JIRA] Created: (ARQ-335) Weld SE container does not properly load extension classes at boot Date: Tue, 16 Nov 2010 11:22:45 -0500 Message-ID: <463322910.1519.1289924565687.JavaMail.tomcat@jira02.app.mwc.hst.phx2.redhat.com> --===============2971216173451075898== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Weld SE container does not properly load extension classes at boot ------------------------------------------------------------------ Key: ARQ-335 URL: https://jira.jboss.org/browse/ARQ-335 Project: Arquillian Issue Type: Bug Components: Weld Containers Affects Versions: 1.0.0.Alpha4 Environment: Weld 1.1.0.Beta1 Reporter: Lincoln Baxter III ServiceLoader needs to be used to load the extensions and add then to the D= eployment: package org.jboss.arquillian.container.weld.se.embedded_1; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import javax.enterprise.inject.spi.Extension; import org.jboss.arquillian.container.weld.se.embedded_1.shrinkwrap.Shrinkw= rapBeanDeploymentArchive; import org.jboss.arquillian.protocol.local.LocalMethodExecutor; import org.jboss.arquillian.spi.Configuration; import org.jboss.arquillian.spi.ContainerMethodExecutor; import org.jboss.arquillian.spi.Context; import org.jboss.arquillian.spi.DeployableContainer; import org.jboss.arquillian.spi.DeploymentException; import org.jboss.arquillian.spi.LifecycleException; import org.jboss.shrinkwrap.api.Archive; import org.jboss.weld.bootstrap.WeldBootstrap; import org.jboss.weld.bootstrap.api.Environments; import org.jboss.weld.bootstrap.api.ServiceRegistry; import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive; import org.jboss.weld.bootstrap.spi.Deployment; import org.jboss.weld.bootstrap.spi.Metadata; import org.jboss.weld.context.api.helpers.ConcurrentHashMapBeanStore; import org.jboss.weld.extensions.util.service.ServiceLoader; import org.jboss.weld.manager.api.WeldManager; /** * WeldSEContainer * = * @author Aslak Knutsen * @version $Revision: $ */ public class WeldSEContainer implements DeployableContainer { /* * (non-Javadoc) * = * @see org.jboss.arquillian.spi.DeployableContainer#setup(org.jboss.arq= uillian.spi.Context, * org.jboss.arquillian.spi.Configuration) */ public void setup(final Context context, final Configuration configurati= on) { } /* * (non-Javadoc) * = * @see org.jboss.arquillian.spi.DeployableContainer#start(org.jboss.arq= uillian.spi.Context) */ public void start(final Context context) throws LifecycleException { } /* * (non-Javadoc) * = * @see org.jboss.arquillian.spi.DeployableContainer#stop(org.jboss.arqu= illian.spi.Context) */ public void stop(final Context context) throws LifecycleException { } /* * (non-Javadoc) * = * @see org.jboss.arquillian.spi.DeployableContainer#deploy(org.jboss.ar= quillian.spi.Context, * org.jboss.shrinkwrap.api.Archive) */ public ContainerMethodExecutor deploy(final Context context, final Archi= ve archive) throws DeploymentException { final ShrinkwrapBeanDeploymentArchive beanArchive =3D archive.as(Shri= nkwrapBeanDeploymentArchive.class); final Deployment deployment =3D new Deployment() { public Collection getBeanDeploymentArchives= () { return Arrays.asList((BeanDeploymentArchive) beanArchive); } public ServiceRegistry getServices() { return beanArchive.getServices(); } public BeanDeploymentArchive loadBeanDeploymentArchive( final Class beanClass) { return beanArchive; } /* * (non-Javadoc) * = * @see org.jboss.weld.bootstrap.spi.Deployment#getExtensions() */ public Iterable> getExtensions() { return transform(ServiceLoader.load(Extension.class, beanArchiv= e.getClassLoader())); } }; ContextClassLoaderManager classLoaderManager =3D new ContextClassLoad= erManager(beanArchive.getClassLoader()); classLoaderManager.enable(); context.add(ContextClassLoaderManager.class, classLoaderManager); WeldBootstrap bootstrap =3D new WeldBootstrap(); beanArchive.setBootstrap(bootstrap); bootstrap.startContainer(Environments.SE, deployment, new ConcurrentH= ashMapBeanStore()) .startInitialization() .deployBeans() .validateBeans() .endInitialization(); WeldManager manager =3D bootstrap.getManager(beanArchive); context.add(WeldBootstrap.class, bootstrap); context.add(WeldManager.class, manager); return new LocalMethodExecutor(); } /* * (non-Javadoc) * = * @see org.jboss.arquillian.spi.DeployableContainer#undeploy(org.jboss.= arquillian.spi.Context, * org.jboss.shrinkwrap.api.Archive) */ public void undeploy(final Context context, final Archive archive) th= rows DeploymentException { WeldBootstrap bootstrap =3D context.get(WeldBootstrap.class); if (bootstrap !=3D null) { bootstrap.shutdown(); } ContextClassLoaderManager classLoaderManager =3D context.get(ContextC= lassLoaderManager.class); classLoaderManager.disable(); } public static Iterable> transform(final ServiceLoade= r serviceLoader) { List> result =3D new ArrayList>(); for (final Extension extension : serviceLoader) { result.add(new Metadata() { public String getLocation() { return "unknown"; } public Extension getValue() { return extension; } }); } return result; } } -- = This message is automatically generated by JIRA. - For more information on JIRA, see: http://www.atlassian.com/software/jira =20 --===============2971216173451075898==--