IllegalLoopbackException:在构造bean实例时,无法在单例会话bean上调用方法

时间:2013-10-24 17:02:35

标签: cdi websphere-8 openwebbeans

我遇到以下异常:

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变形吗?

1 个答案:

答案 0 :(得分:1)

你实际上并没有在这里使用CDI。这是一个EJB问题。问题是您没有为EJB指定@DependsOn。见这里:http://docs.oracle.com/javaee/6/api/javax/ejb/DependsOn.html