IllegalLoopbackException: невозможно вызвать метод для одноэлементного сессионного компонента при создании экземпляра компонента

Я получаю следующее исключение:

Exception data: javax.ejb.IllegalLoopbackException: Cannot call a method on a singleton session bean while constructing the bean instance : MyWar.war#BarProducer

Мой код выглядит следующим образом.

У меня есть сессионный компонент без сохранения состояния, который вводит Foo и Bar.

@Stateless
public class MySessBean {

    @Inject
    private Foo foo;

    @Inject
    private Bar bar;

    public SomeData myMethod1(...){
        //does something with Foo
        foo.xyz();
    }

    public SomeData myMethod2(...){
        //does something with Bar
        bar.xyz();
    }   

}

У меня есть продюсер, который создает Singleton Foo:

@Singleton
public class FooProducer {

    @Produces
    public Foo getFoo() {
         return new Foo();
    }
}

У меня есть другой продюсер, который создает синглтон-бар. Для того чтобы создать Bar, мне нужно ввести Foo:

@Singleton
public class BarProducer {

    @Inject
    private Foo foo;

    @Produces
    public Bar getBar() {
            //uses Foo
        foo.xyz();
    }
}

Я использую WebSphere 8 (OpenWebBeans). Я подумал, что контейнер будет знать, что ему нужно создать синглтон Foo, прежде чем он создаст синглтон Bar??

1 ответ

Решение

Вы на самом деле не используете CDI здесь. Это проблема EJB. Проблема в том, что вы не указываете @DependsOn для ваших EJB. Смотрите здесь: http://docs.oracle.com/javaee/6/api/javax/ejb/DependsOn.html

Другие вопросы по тегам