2013-07-16 95 views
0

我在Glassfish 4.0上試驗EJB3.2。我在編寫EJB應用程序方面也不是很有經驗,所以很可能出現愚蠢的錯誤。在@EJB注入中沒有發現Bean

減少我班必要的:

@Stateless 
@WebService 
public class SomeJob { 

    @EJB MyService myService; 

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

@Stateless 
public class MyService { 

    @EJB AnotherEJB anotherEjb; 

} 

@Stateless 
public class AnotherEJB { 

} 

德恩我所說的SomeJob.doSomething()在由GlassFish的我看到一個堆棧跟蹤提供WebService的測試功能,我引導到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

看起來問題是缺少一個庫,它阻止了EJB初始化,因此無法注入到另一個bean中。

一般解決方案聲明:如果注入不起作用,請在啓動時檢查服務器的打印輸出。服務器將報告哪些EJB已被初始化/註冊。