@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/

10-10 12:58