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 {

}

グラスフィッシュが提供する 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)

私が理解できないのは、なぜリモート インターフェイスが検索されるのかということです。私は宣言していません。なぜ私はそれが必要なのですか?複雑な設定はしたくありません。アプリケーションには外部クライアントはありません。スタンドアロンにする必要があります。

4

1 に答える 1

1

問題は、EJB が初期化されず、別の Bean に注入できなかったライブラリの欠落であったようです。

一般的な解決策の説明: インジェクションが機能しない場合は、起動時にサーバーの出力を確認してください。サーバーは、どの EJB が初期化/登録されたかを報告します。

于 2013-07-16T15:01:46.300 に答える