EJB 3:不能在客户端代码中注入bean,这两者都由同一个容器管理

时间:2011-12-22 16:02:21

标签: java ejb-3.1 jboss6.x stateless-session-bean

@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 进行上下文查找,我可以访问它。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的Model类不受容器管理,因此JBoss无法将ejbA标识为注入的EJB。您必须通过Model / @Stateless / @Stateful注释将@Singleton类转换为EJB。

这就是为什么容器不参与的JNDI查找工作完美。