1

あるアプリケーション内の別のモジュールから EJB にアクセスしようとすると、NullPointerException が発生しました。

より正確に例を挙げて説明します。

EAR 構造は次のとおりです。

EAR
|
— core.jar (EJB-module with core EJB) — application core
|
— app.jar (another EJB-module with EJBs) —  business logic here
| 
— web.war (servlets)

code.jar には EJB があります。

@LocalBean
@Singleton
@Startup
public class AppInfo(){
   private int counter;

   public void incCounter(){
     counter++;
  }
  public int getCounterValue(){
    return counter;
  }    
}

モジュール app.jar には、カウンターを読み取ろうとするステートレス EJB があります。

@Stateless
public class SomeBean{
   @EJB private AppInfo appinfo;

    public void run(){
       int counter = appInfo.getCounterValue(); // here method throws with NPE
       System.out.println("Counter value is: "+counter);
   }   
}

モジュール web.war には、リクエストごとにカウンター値をインクリメントするサーブレットがあります。

public class MyServlet extends HttpServlet{
        @EJB private AppInfo appInfo;
        protected void doPost(params){
              appInfo.incCounter();
              ...
              other code
       }
  }

デバッグ中に、次のことを検出しました: サーブレット インジェクションではうまく機能します。SomeBean には NPE があります。run() エントリ ポイントの値は appInfo = null です。

Core.jar から App の別の EJB に EJB を正しく挿入するにはどうすればよいですか?

PS EAR を JBoss 6.1 EAP PSS にデプロイします @Remote も使用してみました: 動作しません (appInfo はまだ null に等しい)

4

3 に答える 3