EJB を使用する Java で単純な Web サービスを開発しようとしています。Jar ファイルに EJB があり、war ファイルに WebServices があり、どちらも 1 つの耳にパッケージ化されています。JBOSS-AS 7.1 で EjB 3.0 を使用します。
ここで、インターフェースを持つ私のEJBクラス:
@Stateless
public class TestEjb implements ITestEjb {
public boolean authentifier(String login, String password) {
if(login.equals("nico") && password.equals("nr"))
return true;
else
return false;
}
}
@Local
public interface ITestEjb {
public boolean authentifier(String login, String password);
}
そして、前の EJBを注入する私のWeb サービスは次のとおりです。
//@Stateless
@WebService
@SOAPBinding(style = Style.RPC)
public class AuthentificationWS {
@EJB
private ITestEjb testEjb;
public boolean authentifier(String login,String password) {
return testEjb.authentifier(login, password);
}
}
デプロイメントはうまく機能しますが、Web サービスを呼び出すと、EJB は常にnullになります
(error : java.nullpointerException).
そのため、Web サービスにを追加し@Stateless
て EJB に変換しようとしましたが、Web サービス クライアントで使用しようとすると成功しませんでした。
次に、JBOSSログでローカルjndi URLを取得して、以下のようにローカルjndiルックアップでEjbにアクセスしようとしました:
final String jndi = "java:module/TestEjb!fr.test.ITestEjb";
testEjb = (ITestEjb) new InitialContext().lookup(jndi);
しかし、うまくいきませんでした。
最後に、以下のようなグローバル jndi URLを試してみました。
final String jndi = "ejb:Num-ear-1.0.0-SNAPSHOT/Num-ejb-1/TestEjb!fr.test.ITestEjb"
testEjb = (ITestEjb) new InitialContext().lookup(jndi);
そして、それはうまくいきます!!
では、Web サービスがインジェクションまたはローカル Jndi の方法でローカルに EJB にアクセスできない理由がわかりません。