Java EE Wildfly从JNDI检索EntityManager而没有persistence.xml

时间:2016-03-09 16:52:47

标签: jpa java-ee jndi entitymanager wildfly-10

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

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

1 个答案:

答案 0 :(得分:2)

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

如果这对您很重要,请考虑投票JPA_SPEC-114并另外在那里发表评论。

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

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