【问题标题】:Injection EJB into Java Class将 EJB 注入 Java 类
【发布时间】:2016-11-16 16:49:18
【问题描述】:

如何在简单的 java 类中注入 EJB (3.0)?

当在我的 Java 类中注入 EJB 时,执行时我得到一个 NullPointerException。

我的 Java 类测试:

    public class test {
    @EJB MyEjb myEjb;

    public test(){
        myEjb.getUserbyId(2); // myEjb = null
    }
}

我的 EJB

@Stateless
@LocalBean
public class MyEjb {

    @PersistenceContext(unitName="jpa")
    EntityManager EM;

    public User getUserbyId(Integer id){
        ....
    }

【问题讨论】:

  • 您的测试是如何执行的?您的 EJB 是一个在应用服务器上运行的类,它是一个容器。依赖注入只在那里工作——但一般来说,测试是由 JUnit 执行的,而不是在你的容器中,EJB 在运行时所在的容器中。不幸的是,使用 EJB 运行测试并不是那么简单!尝试了解 Arquillian 和 REST.... Arquillian 是在测试期间运行容器的一种方式,如果您在 EJB 中实现 REST API,则可以通过 Web 请求测试该 API。

标签: class jakarta-ee ejb inject


【解决方案1】:

您应该使用 InitialContext#lookup 方法从应用服务器获取 EJB 引用。 例如:

@Stateless(name="myEJB")
public class MyEJB {

  public void ejbMethod() {
    // business logic
  }

}

public class TestEJB {

  public static void main() {
    MyEJB ejbRef = (MyEJB) new InitialContext().lookup("java:comp/env/myEJB");

    ejbRef.ejbMethod();
  }


} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2018-06-29
    • 1970-01-01
    • 2012-06-03
    • 2013-08-03
    • 2012-09-07
    • 2014-04-25
    相关资源
    最近更新 更多