1

我收到以下异常:

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

我的代码如下。

我有一个同时注入 Foo 和 Bar 的无状态会话 Bean。

@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 我需要注入 Foo:

@Singleton
public class BarProducer {

    @Inject
    private Foo foo;

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

我正在使用 WebSphere 8 (OpenWebBeans)。我想容器会知道它需要在创建 Bar 单例之前创建 Foo 单例?

4

1 回答 1

1

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

于 2013-10-24T23:40:58.323 回答