Проблема с EJB 3.1, внедренным с компонентом CDI во время работы JUnit

Я создал EJB3.1 и внедрил CDI-компонент с помощью @inject, но столкнулся с некоторыми проблемами во время модульного тестирования, однако при тестировании из сервлета он работает нормально. У меня есть файл beans.xml в папке WEB-INF. Ниже приведен мой код EJB:

@Stateless
public class CdiUsingEjb {
    @Inject
    private HelloServletCDIPojo helloServletCDIPojo;

    public String greet() {
        assert helloServletCDIPojo != null;
        return helloServletCDIPojo.from();
    }
}

Ниже мой компонент CDI:

public class HelloServletCDIPojo {
    public String from() {
        return "from HelloServletStateless CDI";
    }
}

Я создал класс JUnit:

public class CdiUsingEjbTest {
    @EJB
    private CdiUsingEjb cdiUsingEjb;

    @Before
    public void setUp() throws Exception {
        EJBContainer.createEJBContainer().getContext().bind("inject", this);
    }

    @Test
    public void test() {
        assertNotNull(cdiUsingEjb);
    }
}

Когда я запускаю этот тест JUnit, я получаю следующую ошибку.

org.apache.openejb.OpenEjbContainer$AssembleApplicationException: org.apache.openejb.OpenEJBException: Creating application failed: /Users/prasannakumar/freelanceWorkspace/javaWorkspace/TomEEExamples: couldn't start owb context
    at org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:310)
    at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:56)
    at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:43)
    at in.jugchennai.prassee.ejb.HelloServletStatelessEJBTest.setup(HelloServletStatelessEJBTest.java:18)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)

person prassee    schedule 29.07.2012    source источник
comment
Вы смотрели на Arquillian (www.arquillian.org)? Может быть, будет немного легче встать и бежать.   -  person LightGuard    schedule 29.07.2012
comment
Я также часто сталкивался с этим исключением. Теперь у меня есть два предложения: * Пожалуйста, проверьте, есть ли у вас какие-либо ошибки компиляции. Если вы используете Eclipse, JUnit все равно запустится, но OpenEJB создаст для вас это исключение * В CdiUsingEjbTest попробуйте использовать @Inject вместо @EJB. @Inject приведет к внедрению EJB, если целевой класс является EJB.   -  person kavai77    schedule 03.08.2012