@Local
public interface EJBA{
// declares a method 'validate'
}
@Stateless
public class EJBABean implements EJBA{
// implements the method 'validate'
}
class Model{
@EJB
private EJBA ejbA;
public void doSomething(){
ejbA.validate();
}
}
现在,如果我从Struts 1.2动作类的执行方法中执行以下操作
new Model().validate();
Model的ejbA 为null,导致 NullPointerException 。问题类似于this,但在我的例子中,我正在运行客户端代码(Model)以及JBoss 6.1 Final服务器本身中的bean。模型和EJB位于单独的jar文件中,操作类位于war文件中。这两个都打包在一个ear文件中。
如果我使用 [ear-name] / EJBABean / local 进行上下文查找,我可以访问它。我做错了什么?
答案 0 :(得分:1)
您的Model
类不受容器管理,因此JBoss无法将ejbA
标识为注入的EJB。您必须通过Model
/ @Stateless
/ @Stateful
注释将@Singleton
类转换为EJB。
这就是为什么容器不参与的JNDI查找工作完美。