查看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行动?
答案 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的最小工作示例。