首页 > 解决方案 > 向 JNDI 公开容器管理的 EntityManger/EntityManagerFactory/PersistenceContext

问题描述

正如标题所说,我想知道是否可以在部署在 Websphere Application Server 版本上的企业应用程序中通过 JNDI 查找容器管理的 EntityManger(或 EntityManagerFactory 或 PersistenceContext)。8.5 或 9.0 没有通过<persistence-context-ref>/ <persistence-unit-ref>in显式引用web.xml

我发现在 JBoss 中可以通过

<property name="jboss.entity.manager.factory.jndi.name" value="persistence-units/JpaPersistence"/>

中的条目persistence.xml,但找不到与 Websphere 类似的内容。

标签: webspherejndipersistence.xml

解决方案


我相信 JPA 规范第 7.2.1 节包含您正在寻找的信息:

持久化上下文注入示例:

    @PersistenceContext(name="persistence-units/JpaPersistence")
    EntityManager em;

JNDI 查找示例:

    @Stateless
    @PersistenceContext(name="persistence-units/JpaPersistence")
    public class MySessionBean implements MyInterface {
        @Resource SessionContext ctx;
        public void doSomething() {
            EntityManager em = (EntityManager)ctx.lookup("persistence-units/JpaPersistence");
            ...
        }
    }

我建议让容器使用 @PersistenceContext 注入引用,而不是手动查找资源


推荐阅读