From jira-events at lists.jboss.org Sun Mar 27 10:24:38 2011 Content-Type: multipart/mixed; boundary="===============2515427459612978098==" MIME-Version: 1.0 From: Aslak Knutsen (JIRA) To: arquillian-issues at lists.jboss.org Subject: [arquillian-issues] [JBoss JIRA] Closed: (ARQ-335) Weld SE container does not properly load extension classes at boot Date: Sun, 27 Mar 2011 10:24:37 -0400 Message-ID: <504449007.1797.1301235877941.JavaMail.tomcat@jira02.app.mwc.hst.phx2.redhat.com> In-Reply-To: 463322910.1519.1289924565687.JavaMail.tomcat@jira02.app.mwc.hst.phx2.redhat.com --===============2515427459612978098== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable [ https://issues.jboss.org/browse/ARQ-335?page=3Dcom.atlassian.jira.pl= ugin.system.issuetabpanels:all-tabpanel ] Aslak Knutsen closed ARQ-335. ----------------------------- Assignee: Aslak Knutsen Fix Version/s: 1.0.0.Alpha5 Resolution: Duplicate Issue You are correct, fixed in ARQ-275 > Weld SE container does not properly load extension classes at boot > ------------------------------------------------------------------ > > Key: ARQ-335 > URL: https://issues.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 > Assignee: Aslak Knutsen > Fix For: 1.0.0.Alpha5 > > > ServiceLoader needs to be used to load the extensions and add then to the= Deployment: > 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.Shrin= kwrapBeanDeploymentArchive; > 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.a= rquillian.spi.Context, > * org.jboss.arquillian.spi.Configuration) > */ > public void setup(final Context context, final Configuration configura= tion) > { > } > /* > * (non-Javadoc) > * = > * @see org.jboss.arquillian.spi.DeployableContainer#start(org.jboss.a= rquillian.spi.Context) > */ > public void start(final Context context) throws LifecycleException > { > } > /* > * (non-Javadoc) > * = > * @see org.jboss.arquillian.spi.DeployableContainer#stop(org.jboss.ar= quillian.spi.Context) > */ > public void stop(final Context context) throws LifecycleException > { > } > /* > * (non-Javadoc) > * = > * @see org.jboss.arquillian.spi.DeployableContainer#deploy(org.jboss.= arquillian.spi.Context, > * org.jboss.shrinkwrap.api.Archive) > */ > public ContainerMethodExecutor deploy(final Context context, final Arc= hive archive) > throws DeploymentException > { > final ShrinkwrapBeanDeploymentArchive beanArchive =3D archive.as(Sh= rinkwrapBeanDeploymentArchive.class); > final Deployment deployment =3D new Deployment() > { > public Collection getBeanDeploymentArchiv= es() > { > 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, beanArch= ive.getClassLoader())); > } > }; > ContextClassLoaderManager classLoaderManager =3D new ContextClassLo= aderManager(beanArchive.getClassLoader()); > classLoaderManager.enable(); > context.add(ContextClassLoaderManager.class, classLoaderManager); > WeldBootstrap bootstrap =3D new WeldBootstrap(); > beanArchive.setBootstrap(bootstrap); > bootstrap.startContainer(Environments.SE, deployment, new Concurren= tHashMapBeanStore()) > .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.jbos= s.arquillian.spi.Context, > * org.jboss.shrinkwrap.api.Archive) > */ > public void undeploy(final Context context, final Archive archive) = throws DeploymentException > { > WeldBootstrap bootstrap =3D context.get(WeldBootstrap.class); > if (bootstrap !=3D null) > { > bootstrap.shutdown(); > } > ContextClassLoaderManager classLoaderManager =3D context.get(Contex= tClassLoaderManager.class); > classLoaderManager.disable(); > } > public static Iterable> transform(final ServiceLoa= der 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 --===============2515427459612978098==--