我遇到以下异常:
Exception data: javax.ejb.IllegalLoopbackException: Cannot call a method on a singleton session bean while constructing the bean instance : MyWar.war#BarProducer
我的代码如下。
我有一个无状态会话Bean,可以注入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();
}
}
我有另一个创建Singleton Bar的制作人。 为了创建Bar我需要Inject Foo:
@Singleton
public class BarProducer {
@Inject
private Foo foo;
@Produces
public Bar getBar() {
//uses Foo
foo.xyz();
}
}
我正在使用WebSphere 8(OpenWebBeans)。我认为容器会知道在创建Bar singleton之前需要让Foo singleton变形吗?
答案 0 :(得分:1)
你实际上并没有在这里使用CDI。这是一个EJB问题。问题是您没有为EJB指定@DependsOn
。见这里:http://docs.oracle.com/javaee/6/api/javax/ejb/DependsOn.html