@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动作类的execute方法执行以下操作
new Model().validate();
Model的ejbA为null,从而导致NullPointerException。这个问题与this相似,但就我而言,我正在运行客户端代码(模型)以及JBoss 6.1 Final服务器本身中的bean。模型和EJB在单独的jar文件中,动作类在war文件中。这两个文件都打包在一个耳朵文件中。
如果我使用[ear-name] / EJBABean / local使用上下文查找,则可以访问它。我究竟做错了什么 ?
最佳答案
您的Model
类不受容器管理,因此JBoss无法将ejbA
标识为已注入的EJB。您必须通过用Model
/ @Stateless
/ @Stateful
注释@Singleton
类将其转换为EJB。
这就是为什么容器不参与的JNDI查找可以完美工作的原因。
关于java - EJB 3:无法将bean注入(inject)客户端代码,这两者都是由同一容器管理的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8606488/