Java EE Wildfly 在没有 persistence.xml 的情况下从 JNDI 检索 EntityManager
Java EE Wildfly retrieve EntityManager from JNDI without persistence.xml
我最近转到 Java EE (Wildfly),我想从 JNDI 中查找 EntityManager
。目前,我在我的 standalone.xml 中定义了一个数据源,并通过 JNDI 成功检索了它,但这只为我提供了数据源,而不是实体管理器。
我知道我可以创建一个 persistence.xml 并使用 @PersistenceContext
但我真的在寻找一种方法来避免编译时知道 JNDI 名称,所以我想执行查找根据运行时信息检索适当的实体管理器。
不幸的是,如果不使用 persistence.xml
文件,则无法以可移植的方式定义派生实体管理器的持久性单元。
如果这对您很重要,请考虑投票给 JPA_SPEC-114 并在那里另外提供评论。
您可以或多或少地通过使用 resource-ref 使持久性单元独立于最终的 JNDI 名称。资源引用确实会导致您的代码依赖于容器特定机制来切换 resource-ref
指向的内容。
不幸的是,另一种方法是使用 switchable data source 方法,但它有其缺点。然后,您可以使用固定的 JNDI 名称定义数据源并从 persistence.xml
文件引用该数据源,然后使用可切换数据源内部使用的任何方法转到实际数据源。这可以是直接的数据源实现(如 link 中所示),也可以是从 JNDI 获取另一个数据源(它有效地完成了 resource-ref 的作用,但随后使用您自己的机制进行切换)
我最近转到 Java EE (Wildfly),我想从 JNDI 中查找 EntityManager
。目前,我在我的 standalone.xml 中定义了一个数据源,并通过 JNDI 成功检索了它,但这只为我提供了数据源,而不是实体管理器。
我知道我可以创建一个 persistence.xml 并使用 @PersistenceContext
但我真的在寻找一种方法来避免编译时知道 JNDI 名称,所以我想执行查找根据运行时信息检索适当的实体管理器。
不幸的是,如果不使用 persistence.xml
文件,则无法以可移植的方式定义派生实体管理器的持久性单元。
如果这对您很重要,请考虑投票给 JPA_SPEC-114 并在那里另外提供评论。
您可以或多或少地通过使用 resource-ref 使持久性单元独立于最终的 JNDI 名称。资源引用确实会导致您的代码依赖于容器特定机制来切换 resource-ref
指向的内容。
不幸的是,另一种方法是使用 switchable data source 方法,但它有其缺点。然后,您可以使用固定的 JNDI 名称定义数据源并从 persistence.xml
文件引用该数据源,然后使用可切换数据源内部使用的任何方法转到实际数据源。这可以是直接的数据源实现(如 link 中所示),也可以是从 JNDI 获取另一个数据源(它有效地完成了 resource-ref 的作用,但随后使用您自己的机制进行切换)