Overwrite Annotation by using ejb-jar.xml not working
testvogel Aug 8, 2012 4:55 AMHi,
In my application I have an interface that is implemented by 2 classes (mock, productive). Due to the fact I need the mock also during my deployment for testing I have both implementations in my ejb package.
When I try to inject one of these implementations I set the "beanName" property of @EJB to decide which implementation should be injected:
@EJB(beanName = "MyInterfaceImpl1") MyInterface myInterface;
If I want to use another implementation for this injection I'm using the ejb-jar.xml to overwrite the beanName:
<?xml version="1.0" encoding="UTF-8"?> <ejb-jar version="3.0" 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/ejb-jar_3_0.xsd"> <display-name>MyApp</display-name> <enterprise-beans> <session> <ejb-name>MyEJBean</ejb-name> <ejb-class>com.test.MyEJBean</ejb-class> <ejb-ref> <ejb-ref-name>com.test.MyEJBean/myInterface</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <ejb-link>MyInterfaceImpl2</ejb-link> <injection-target> <injection-target-class>com.test.MyEJBean</injection-target-class> <injection-target-name>myInterface</injection-target-name> </injection-target> </ejb-ref> </session> </enterprise-beans> </ejb-jar>
This is working properly during a deployment on Glassfish 3.1. Instead of MyInterfaceImpl1 MyInterfaceImpl2 i used.
Unfortunatly this is not working in Arquillian. I'm building an archive, adding the ejb-jar.xml and run the test, but the MyInterfaceImpl1 will be injected instead of MyInterfaceImpl2 wich results in a failing test.
I build my arquillian archive like this:
@Deployment public static WebArchive createDeployment() { WebArchive archive = ShrinkWrap .create(WebArchive.class, "test.war") .addClasses(MyEJBean.class, MyInterface.class, MyInterfaceImpl2.class) .addAsWebInfResource("ejb-jar-test.xml", "ejb-jar.xml"); System.out.println(archive.toString(true)); return archive; }