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