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