Arquillian Weld EE container bean discovery mode
ruddy32 Sep 8, 2015 2:18 AMHi,
Using arquillian weld ee container with JUnit, the test result return the message "WELD-001409: Ambiguous dependencies" and list two beans. One of the bean is not tagged with CDI annotation. Does it means that the bean discovery mode is set to "all" by default ?
The test is using a Web archive. The web archive include a Jar archive that embed these beans and a "beans.xml" resource. The beans.xml specify the <annotated> beans discovery mode. Changing the bean-discovery-mode flag in <beans-empty.xml> does not change discovered behavior. There is something wrong. Is it a problem with the weld container?
CustomServiceConfiguration.java
public class CustomServiceConfiguration implements ServiceConfiguration {
...
}
ServiceConfigurationFactory.java
@Dependent
public class ServiceConfigurationFactory {
@Produces
@CustomServiceConfig
@Singleton
public ServiceConfiguration configureService() {
CustomServiceConfiguration config = new CustomServiceConfiguration();
...
return config;
}
}
ServiceConfigurationInjectionTest.java
@RunWith(Arquillian.class)
public class ServiceConfigurationInjectionTest {
@Deployment
public static Archive<?> deploy() {
final String moduleName = ServiceConfigurationInjectionTest.class.getSimpleName();
JavaArchive testJar = ShrinkWrap.create(JavaArchive.class, moduleName + ".jar").addPackage(...)
.addAsManifestResource("beans-empty.xml", "beans.xml");
JavaArchive[] libs = ArchiveUtils.getDeltaSpikeCoreArchive();
WebArchive testWar = ShrinkWrap.create(WebArchive.class, moduleName + ".war").addAsLibraries(libs).addAsLibraries(testJar)
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
return testWar;
}
@Inject
@CustomServiceConfig
ServiceConfiguration bean;
...
}
With <beans.xml> resource into <testJar> the generated message is:
org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type ServiceConfiguration with qualifiers @Default at injection point [BackedAnnotatedField] @Inject @CustomServiceConfig private ServiceConfigurationInjectionTest.bean at ServiceConfigurationInjectionTest.bean(ServiceConfigurationInjectionTest.java:0) Possible dependencies: - Managed Bean [class CustomServiceConfiguration] with qualifiers [@Any @Default], - Producer Method [ServiceConfiguration] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces @Singleton @CustomServiceConfig public ServiceConfigurationFactory.configureService()]
Is there somthing wrong in the unit test ?
Removing <beans.xml> resource from <testJar>, which means no bean discovered from <testJar> , generated this message:
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type ServiceConfiguration with qualifiers @Default at injection point [BackedAnnotatedField] @Inject @CustomServiceConfig ServiceConfigurationInjectionTest.bean at ServiceConfigurationInjectionTest.bean(ServiceConfigurationInjectionTest.java:0)