3

我最近搬到了 Java EE (Wildfly),我想EntityManager从 JNDI 中查找一个。目前,我在我的standalone.xml 中定义了一个数据源,并通过 JNDI 成功检索了它,但这仅为我提供了数据源而不是实体管理器。

我知道我可以创建一个 persistence.xml 并使用@PersistenceContext,但我真的在寻找一种方法来避免 JNDI 名称的编译时知识,因此希望根据运行时信息执行查找以检索适当的实体管理器。

4

1 回答 1

3

persistence.xml不幸的是,如果不使用文件,则无法以可移植的方式定义派生实体管理器的持久性单元。

如果这对您很重要,请考虑为JPA_SPEC-114投票并在此处另外提供评论。

您可以或多或少地使用resource-ref使持久性单元独立于最终的 JNDI 名称。资源引用确实会导致您的代码依赖于特定于容器的机制来切换resource-ref指向的内容。

不幸的是,另一种选择是使用可切换的数据源方法。然后,您可以使用固定的 JNDI 名称定义数据源并从persistence.xml文件中引用该名称,然后使用可切换数据源在内部使用的任何方法转到实际数据源。然后,这可以是直接的数据源实现(如链接中所示),也可以是从 JNDI 获取另一个数据源(它有效地完成了 resource-ref 的工作,但随后使用您自己的机制进行切换)

于 2016-03-13T13:18:33.717 回答