use of org.jboss.weld.bootstrap.spi.BeanDeploymentArchive in project core by weld.
the class NonBdaExtensionTest method testEventsSentOnceOnly.
/*
* description = "WELD-258"
*/
@Test
public void testEventsSentOnceOnly() {
// Create the BDA in which we will deploy Observer1 and Foo. This is equivalent to a war or ejb jar
final BeanDeploymentArchiveImpl bda1 = new BeanDeploymentArchiveImpl("1", CountingObserver1.class, Foo.class);
// Create the BDA to return from loadBeanDeploymentArchive for Observer2, this is probably a library, though could be another war or ejb jar
// bda2 is accessible from bda1, but isn't added to it's accessibility graph by default. This similar to an archive which doesn't contain a beans.xml but does contain an extension
final BeanDeploymentArchive bda2 = new BeanDeploymentArchiveImpl("2", CountingObserver2.class);
// Create a deployment, that we can use to mirror the structure of one Extension inside a BDA, and one outside
Deployment deployment = new FlatDeployment(bda1, new Observer1(), new Observer2(), new CountingObserver1(), new CountingObserver2()) {
public BeanDeploymentArchive loadBeanDeploymentArchive(Class<?> beanClass) {
// Return bda2 if it is Observer2. Stick anything else which this test isn't about in bda1
if (beanClass.equals(CountingObserver2.class) || beanClass.equals(Bar.class)) {
// If Observer2 is requested, then we need to add bda2 to the accessibility graph of bda1
bda1.getBeanDeploymentArchives().add(bda2);
return bda2;
} else {
return bda1;
}
}
};
TestContainer container = new TestContainer(deployment);
// Cause the container to deploy the beans etc.
container.startContainer();
// Get the bean manager for bda1 and bda2
BeanManager beanManager1 = container.getBeanManager(bda1);
CountingObserver1 observer1 = Utils.getReference(beanManager1, CountingObserver1.class);
CountingObserver2 observer2 = Utils.getReference(beanManager1, CountingObserver2.class);
Assert.assertEquals(1, observer1.getBeforeBeanDiscovery());
Assert.assertEquals(1, observer1.getProcessFooManagedBean());
Assert.assertEquals(1, observer1.getProcessBarManagedBean());
Assert.assertEquals(1, observer2.getBeforeBeanDiscovery());
Assert.assertEquals(1, observer2.getProcessFooManagedBean());
Assert.assertEquals(1, observer2.getProcessBarManagedBean());
container.stopContainer();
}
use of org.jboss.weld.bootstrap.spi.BeanDeploymentArchive in project core by weld.
the class InjectionTargetCreationTest method test.
@Test
public void test() {
// Create the BDA in which we will deploy FooExtension. This BDA does not have access to bda2
final BeanDeploymentArchive bda1 = new BeanDeploymentArchiveImpl("1", FooExtension.class);
// Create the BDA in which we will deploy FooTarget and SimpleBean. This BDA does not have access to bda1
final BeanDeploymentArchive bda2 = new BeanDeploymentArchiveImpl("2", SimpleBean.class, FooTarget.class);
final FooExtension extension = new FooExtension();
// Create a deployment, that we can use to mirror the structure of one Extension inside a BDA, and one outside
Deployment deployment = new FlatDeployment(new BeanDeploymentArchive[] { bda1, bda2 }, extension) {
public BeanDeploymentArchive loadBeanDeploymentArchive(Class<?> beanClass) {
// Return bda2 if it is Observer2. Stick anything else which this test isn't about in bda1
if (beanClass.equals(FooExtension.class)) {
return bda1;
} else {
return bda2;
}
}
public BeanDeploymentArchive getBeanDeploymentArchive(Class<?> beanClass) {
return loadBeanDeploymentArchive(beanClass);
}
};
TestContainer container = new TestContainer(deployment);
// Cause the container to deploy the beans etc.
container.startContainer();
InjectionTarget<FooTarget> target = extension.getTarget();
CreationalContext<FooTarget> ctx = container.getBeanManager(bda2).createCreationalContext(null);
FooTarget instance = target.produce(ctx);
target.postConstruct(instance);
target.inject(instance, ctx);
/*
* Verify that the BeanManager for BDA2 (which can see SimpleBean) is used to inject FooTarget
*/
assertNotNull(instance.getBean());
container.stopContainer();
}
Aggregations