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