我有一个 Java EE 项目,它实例化依赖项目中的对象实例。该依赖项目现在想要创建自己的 EJB 并将其注入(inject)到它的一个类中。依赖项目不引用父项目,但应在父项目的容器内运行。
当我部署父项目时,我在日志中看到一条消息,表明我的服务 Bean 已与父项目中的其余 Bean 一起被发现:
2014-04-28T21:30:56.240-0400|INFO: EJB5181:Portable JNDI names for EJB DependentProjectServiceBean etc.
但是当我尝试使用 @EJB 注释将该 bean 注入(inject)到依赖项目中时,什么也没有发生(它只是保留为 null)。
我一直在试图弄清楚如何正确配置这些项目,以便我可以在依赖项目中使用 EJB 和 JPA,但我觉得我不知道正确的搜索词,因为我没有任何东西发现他们似乎解决了这个问题。我在依赖项目中包含了与在父项目中相同的 Maven 依赖项,并且 Eclipse 的注释看起来很酷;他们只是部署后似乎什么也没做。
如何在我的依赖项目中启用 EJB 和 JPA?
编辑: 这是我正在使用的代码的粗略轮廓。
父级
public class ParentProjectClass {
@EJB
ParentServiceBean psb;
public void cat(){
psb.doStuff(); //no problems
SomeDependentClass sdc = new SomeDependentClass();
sdc.baz();
}
}
依赖项目
public class SomeDependentClass {
private AnotherDependentClass adc;
public SomeDependentClass(){
adc = new AnotherDependentClass();
}
public void baz(){
adc.foo();
}
}
public class AnotherDependentClass {
@EJB
DependentProjectServiceBean dpsb;
foo(){
dpsb.bar(); //NULL POINTER EXCEPTION
}
}
@Stateless
public class DependentProjectServiceBean {
public void bar(){ //bar }
}
最佳答案
您无法在简单类(该类本身不是 EJB 或 JSF ManagedBean)中使用 @EJB 注释注入(inject) EJB。 最简单的解决方案是将依赖项目转换为 EJB 项目。如果您不能这样做,您可以尝试使用手动 JNDI 查找来注入(inject)它,这里是代码示例:
// Retrieve the initial context for JNDI.
Context context = new InitialContext();
// Retrieve the home interface using a JNDI lookup
dpsb = (DependentProjectServiceBean) context.lookup("java:comp/env/ejb/DependentProjectServiceBean");
将 java:comp/env/ejb/DependentProjectServiceBean 替换为您的 JNDI 路径
关于java - 如何在依赖项目中启用 EJB 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23354067/