我正在 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)
我不明白的是,为什么要搜索远程接口?我还没有宣布一个。为什么我需要一个。我不想要复杂的配置。该应用程序将没有任何外部客户端。它应该是独立的。