我有一个Java EE项目,它从依赖项目中实例化一个对象的实例。该依赖项目现在想要创建自己的EJB并将其注入其中一个类。依赖项目不引用父项目,但应该在父项目的容器内运行。
当我部署父项目时,我在日志中看到我的服务bean被发现的消息以及父项目中的其余bean:
2014-04-28T21:30:56.240-0400|INFO: EJB5181:Portable JNDI names for EJB DependentProjectServiceBean etc.
但是当我尝试使用@EJB注释在依赖项目中注入该bean时,没有任何反应(它只是留空)。
我一直在试图弄清楚如何正确配置这些项目,以便我可以在依赖项目中使用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 }
}
答案 0 :(得分:3)
你不能在一个简单的类(它本身不是EJB或JSF ManagedBean)中使用@EJB注释注入EJB。 最简单的解决方案是将您的从属项目转换为EJB项目。如果你不能这样做,你可以尝试使用手动JNDI查找注入它,这里是代码示例:
// 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");
用JNDI路径替换java:comp / env / ejb / DependentProjectServiceBean