Skip to content

Commit

Permalink
ARQ-608 Register arquillian-testenricher-cdi as a CDI extension
Browse files Browse the repository at this point in the history
This lets us obtain a BeanManager in non JNDI based environments like Weld-Servlet on Tomcat/Jetty. Original JNDI lookup is still preserved and attempted first. In a Modular deployment like EE, the BeanManager found by the CDI Extension might not be the BeanManager for the module we're requesting, so we rely on the application server to provide the correct JNDI context.
  • Loading branch information
htfv authored and aslakknutsen committed Sep 22, 2011
1 parent 4a7d10f commit 3c2b9e4
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.jboss.arquillian.testenricher.cdi.container.CDIEnricherRemoteExtension;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;

/**
Expand All @@ -43,6 +44,10 @@ public Archive<?> createAuxiliaryArchive()
.addPackages(false,
CDIInjectionEnricher.class.getPackage(),
CDIEnricherRemoteExtension.class.getPackage())
// We can't use Extension.class, CDI API might not be available during package time
.addAsManifestResource(
new StringAsset("org.jboss.arquillian.testenricher.cdi.container.CDIExtension"),
"services/javax.enterprise.inject.spi.Extension")
.addAsServiceProvider(RemoteLoadableExtension.class, CDIEnricherRemoteExtension.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,13 @@ private BeanManager lookup(Context context)
}
}

BeanManager beanManager = CDIExtension.getBeanManager();

if (beanManager != null)
{
return beanManager;
}

log.info("BeanManager not found.");
return null;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.jboss.arquillian.testenricher.cdi.container;

import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.BeforeBeanDiscovery;
import javax.enterprise.inject.spi.Extension;

public class CDIExtension implements Extension
{
private static BeanManager beanManager;

void beforeBeanDiscovery(@Observes BeforeBeanDiscovery beforeBeanDiscovery,
BeanManager beanManager)
{
setBeanManager(beanManager);
}

public static BeanManager getBeanManager()
{
return beanManager;
}

private static void setBeanManager(BeanManager beanManager)
{
CDIExtension.beanManager = beanManager;
}
}

0 comments on commit 3c2b9e4

Please sign in to comment.