在@EJB注射中找不到Bean

时间:2013-07-16 13:57:45

标签: java-ee glassfish ejb ejb-3.0

我正在使用Glassfish 4.0上的EJB3.2进行实验。 我在编写EJB应用程序方面也不是很有经验,因此对于愚蠢的错误存在很大的疑问。

我将课程简化为必要的课程:

@Stateless
@WebService
public class SomeJob {

    @EJB MyService myService;

    public void doSomething(){...};
}

@Stateless
public class MyService {

    @EJB AnotherEJB anotherEjb;

}

@Stateless
public class AnotherEJB {

}

Wenn我通过glassfish提供的WebService Tester功能调用SomeJob.doSomething()我看到了堆栈跟踪,并且我被定向到ServerLog。

在ServerLog中,我找到了一个命名异常:

Caused by: java.lang.IllegalStateException: Exception attempting to inject Remote ejb-ref name=some.url.zvagent.anotherEjb.MyService/anotherEjb,Remote 3.x interface 
    at org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:145)
    at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:46)
    at org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:64)
    at org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:91)
    at org.glassfish.weld.services.JCDIServiceImpl.injectEJBInstance(JCDIServiceImpl.java:257)
    at com.sun.ejb.containers.BaseContainer.injectEjbInstance(BaseContainer.java:1683)
    at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:475)

我不明白的是,为什么要搜索远程接口?我没有宣布一个。我为什么需要一个。我不想要复杂的配置。该应用程序将没有任何外部客户端。它应该是独立的。

1 个答案:

答案 0 :(得分:1)

看起来问题是一个缺少的库,它阻止EJB被初始化,因此无法注入另一个bean。

一般解决方案声明:如果注入不起作用,请在启动时检查服务器的打印输出。服务器将报告已初始化/注册的EJB。