如何在依赖项目中启用EJB注入

时间:2014-04-29 01:41:18

标签: java maven java-ee glassfish ejb

我有一个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   }
}

1 个答案:

答案 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