1 Reply Latest reply: Aug 14, 2012 3:05 AM by ole . RSS

    Overwrite Annotation by using ejb-jar.xml not working

    ole . Newbie



      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">


      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:


        public static WebArchive createDeployment() {
          WebArchive archive = ShrinkWrap
              .create(WebArchive.class, "test.war")
              .addClasses(MyEJBean.class, MyInterface.class,
              .addAsWebInfResource("ejb-jar-test.xml", "ejb-jar.xml");
          return archive;