我正在尝试用 Java 开发一个使用 EJB 的简单 Web 服务,EJB 在 jar 文件中,WebServices 在 war 文件中,两者都打包在一只耳朵里。我们在 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);
}
这是我的Web 服务,它注入了以前的 EJB:
//@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 始终为空
(error : java.nullpointerException).
因此,我尝试将一个添加@Stateless
到我的 Web 服务以将其转换为 EJB,但是当我尝试通过 Web 服务客户端使用它时没有成功。
然后我尝试通过本地 jndi 查找访问 Ejb,如下所示,在 JBOSS 日志中获取本地 jndi url:
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?