【发布时间】:2016-07-14 10:26:00
【问题描述】:
我正在编写一个需要链接到用户提供的持久性单元的框架。以前,实体管理器是使用@PersistenceContext 注解注入的,但这是一种静态方式:
public class MyItemReader implements ItemReader {
@PersistenceContext(unitName="myPU")
private EntityManager em;
...
}
现在,我希望分配是动态的。这样无论持久化单元名称是什么,仍然可以找到关联的实体管理器。这是我的实现:
public class MyItemReader implements ItemReader {
private EntityManager em;
@Inject @BatchProperty
private String persistenceUnitName;
@Override
public void open(Serializable checkpoint) throws Exception {
String path = "java:comp/env/" + persistenceUnitName;
em = (EntityManager) InitialContext.doLookup(path);
...
}
...
}
我的实现适用于 WildFly,但我不确定它是否适用于其他 Java EE 容器。而且我不确定它在初始上下文更改时是否有效。
那么,我的实现是一个好方法吗?
【问题讨论】:
-
这很好,只是要注意某些容器有不同的 jndi 发布名称,但是您可以将基本 jndi 路径绑定到使用部署描述符初始化的 @Resource 属性
标签: jpa jakarta-ee cdi