我怀疑很久没有找到答案,所以我感谢任何帮助或解释之王...也许这只是一个概念上的错误...
我有一个使用CMT和Hibernate的环境。我可以将EntityManager作为资源注入我的EJB而没有任何问题。但我无法直接在我的DAO中注入,因为我用传统的工厂模式实例化它......
但我的问题是:我需要使用EntityManager,但不想将它一直传递到我的图层!必须有另一种方式,我可能没有看到解决方案......
我可以为这个EntityManager做一些上下文查找之王吗?还是其他更优雅的解决方案?
我做了我自己的解决方案,但它的那种废话大声笑......不值得讨论...
感谢任何帮助,对于任何英语错误感到抱歉,这不是我的母语。
答案 0 :(得分:0)
即使遵循JBNizet,我仍然很想知道如何获取EntityManager,我在如何在J2EE / EJB环境中查找EntityManager时找到了这个答案。
首先,您需要在EJB的类范围上放置@PersistentContext,以便为以后的查找设置def并定义“name”属性。像:
@PersistenceContext(
name="myEntityManagerJNDIName",
unitName=InventoryManagement // defined in a persistence.xml file
)
@Stateless
public class InventoryManagerBean implements InventoryManager { ... }
然后,您可以使用以下代码查找您的EntityManager:
...
// obtain the initial JNDI context
Context initCtx = new InitialContext();
// perform JNDI lookup to obtain container-managed entity manager
javax.persistence.EntityManager entityManager = (javax.persistence.EntityManager)
initCtx.lookup("java:comp/env/myEntityManagerJNDIName");
...
这就是我发现在没有注射的情况下获取EntityManager的方式。