如何让@EJB注入在服务器上工作?

时间:2014-07-04 01:33:58

标签: jpa ejb-3.1 glassfish-4

查看this answer,它说:

  

如果您不想使用应用程序客户端容器,而只是通过java命令运行应用程序客户端类,则无法进行注入,您必须执行JNDI查找

但是,鉴于我正在尝试注入DAO bean like the example shown here,如果我无法进行自动注入,则意味着我的应用程序必须手动执行JNDI查找并且所有事务开始/结束我将获得如果@EJB实际工作,则免费。

但是,由于所有内容都在同一个Eclipse EJB项目中(当我在动态Web项目中使用我的客户端代码时,它也失败并使用相同的空句柄),当然必须有一种简单的方法来使它全部工作?任何人都可以建议我做错了吗?

最后,this article suggests不需要DAO,但如果我在我的EJB中替换:

 @EJB MyDao dao;

更直接:

@PersistenceContext private EntityManager em;

我仍然得到类似的空值;这是同样的注射失败问题吗?


NB :我刚刚注意到this answer

  

这是bug in Glassfish(显然在Web服务堆栈中)。

我正在运行v4.0 Build 89,它还有这个bug吗?这是否意味着我必须以冗长的方式做所有JPA行动?

1 个答案:

答案 0 :(得分:0)

我最终发现问题/问题是为了使用注入@PersistenceContext必须本身就是bean。这在the example on Wikipedia中暗示:

@Stateless 
public class CustomerService { 

  @PersistenceContext 
  private EntityManager entityManager; 

  public void addCustomer(Customer customer) { 
    entityManager.persist(customer); 
  }
}

我可以删除这个问题,但也许留下这个答案可能会给某人提示,或者至少向他们展示一个EJB和JPA的最小工作示例。