multi project beans.xml help
matlach Jul 6, 2012 2:31 PMHello everyone,
I currently have a multi project which is eventually builded builded by ant, packaged as an .ear and deployed on jboss as 7.1.1.
In each of my jar (1 per project), I have defined META-INF/beans.xml, each of those defining the same interceptor.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> <interceptors> <class>com.XXX.SessionStatusTimeUpdaterInterceptor</class> </interceptors> </beans>
When running on jboss as 7, everything go fine ; I get all my ejb injected and my interceptors working #1.
Tough when running junit in eclipse (using weld-se) I get this error :
org.jboss.weld.exceptions.DeploymentException: WELD-001416 Enabled interceptor class [<class>com.XXX.SessionStatusTimeUpdaterInterceptor</class> in file:/C:/dev/XXX/Framework/bin/META-INF/beans.xml@9, <class>com.XXX.SessionStatusTimeUpdaterInterceptor</class> in file:/C:/dev/XXX/UserDomain/bin/META-INF/beans.xml@9] specified twice at org.jboss.weld.manager.Enabled.createMetadataMap(Enabled.java:123) at org.jboss.weld.manager.Enabled.<init>(Enabled.java:96) at org.jboss.weld.manager.Enabled.of(Enabled.java:79) at org.jboss.weld.bootstrap.BeanDeployment.<init>(BeanDeployment.java:101) at org.jboss.weld.bootstrap.WeldBootstrap$DeploymentVisitor.visit(WeldBootstrap.java:175) at org.jboss.weld.bootstrap.WeldBootstrap$DeploymentVisitor.visit(WeldBootstrap.java:150) at org.jboss.weld.bootstrap.WeldBootstrap.startContainer(WeldBootstrap.java:270) at org.jboss.weld.environment.se.Weld.initialize(Weld.java:82) at com.XXX.WeldJUnit4Runner.<init>(WeldJUnit4Runner.java:62) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31) at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24) at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:33) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestMethodReference.<init>(JUnit4TestMethodReference.java:25) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:54) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
WELD-001416 Enabled interceptor class .... specified twice
After seeing this exception I have tryed to define the interceptor only in one beans.xml (the one of my core jar project) while keeping the others beans.xml empty.
Now junit run fine, then deploy back on jboss as 7, interceptor is not getting called anymore (the interceptor is only used by the other jars).
Is there any best practice or guideline to follow for the beans.xml packaging ? Is there something I could do to make it work on both jboss as 7 and junit ?
I guess by using the arquillian framework, as I could package the unit test like my actual deployed ear, I imagine the problem would disapear ? but is this the only way to make this work ?
Finally, is there any reason why it needs to fail if the beans.xml is declaring the exact same thing ?
Big thanks for your help,