あるアプリケーション内の別のモジュールから 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 に等しい)