@EJB が機能する WAR モジュールに JSF Bean があります。JSF Bean を Java ライブラリ (JAR) に移動すると、@EJB が機能しません (EJB にアクセスしようとすると NullPointerException が発生します)。シナリオ I からシナリオ II に移行する必要があります。
シナリオ I:
エンタープライズ アプリケーション
戦争モジュール:
JSF ページ:
<p>#{testController.test}</p>
JSF Bean:
@Named
public class TestController {
@EJB
private TestEjb testEjb;
public String getTest() {
return testEjb.test();
}
}
EJB モジュール:
@Stateless
public class TestEjbImpl implements TestEjb {
@Override
public String test() {
return (new Date()).toString();
}
}
シナリオ II:
エンタープライズ アプリケーション
戦争モジュール:
JSF ページ:
<p>#{testController.test}</p>
JSF Bean:
[空 - JSF Bean は Java ライブラリ (JAR) に移動されました]
EJB モジュール:
@Stateless
public class TestEjbImpl implements TestEjb {
@Override
public String test() {
return (new Date()).toString();
}
}
Java ライブラリ (JAR):
@Named
public class TestController {
@EJB
private TestEjb testEjb;
public String getTest() {
return testEjb.test(); // Here I get a NullPointerException
}
}
この問題を再現する Java ライブラリを使用してエンタープライズ アプリケーション プロジェクトを作成しました。これは Netbeans プロジェクトです: https://dl.dropboxusercontent.com/u/64616807/stackoverflow/jee6.rar