WebSphere Liberty 配置文件数据源和 CDI
WebSphere Liberty Profile DataSource and CDI
我已经使用 WebSphere Liberty Profile 8.5.5.6 设置了我的开发环境。
我在 server.xml
中配置了一个数据源
<dataSource jndiName="jdbc/DB" transactional="true" type="javax.sql.XADataSource">
<jdbcDriver libraryRef="dblib" />
<connectionManager maxPoolSize="10" minPoolSize="2" />
<properties.oracle URL="MYURL" user="usr" password="pw" />
</dataSource>
在我的项目中,我使用 CDI 注入了 EntityManagers。一切正常。但我的问题是,在我完成一次后,我无法注入新的 EntityManager。
我有一个 EntityManagerProducer class,它生成我的 EntityManagers。
class EntityManagerProducer {
@PersistenceUnit(name = "DB")
private EntityManagerFactory entityManagerFactory;
@Produces
public EntityManager create() {
EntityManager tmp = this.entityManagerFactory.createEntityManager();
LoggerFactory.info(Constants.AppName, "EntityManager " + tmp.toString() + " freigegeben.");
return this.entityManagerFactory.createEntityManager();
}
public void dispose(@Disposes @Default EntityManager entityManager) {
if (entityManager.isOpen()) {
entityManager.close();
LoggerFactory.info(Constants.AppName, "EntityManager " + entityManager.toString() + " beseitigt.");
}
}
}
永远不会调用 dispose() 方法,所以我认为 EntityManager 永远不会关闭,这就是我不会获得新方法的原因??
帮助会很大...
@aguibert 是对的!
将 @RequestScoped
添加到 Class 和 create() 方法就成功了!
谢谢!
我已经使用 WebSphere Liberty Profile 8.5.5.6 设置了我的开发环境。
我在 server.xml
中配置了一个数据源<dataSource jndiName="jdbc/DB" transactional="true" type="javax.sql.XADataSource">
<jdbcDriver libraryRef="dblib" />
<connectionManager maxPoolSize="10" minPoolSize="2" />
<properties.oracle URL="MYURL" user="usr" password="pw" />
</dataSource>
在我的项目中,我使用 CDI 注入了 EntityManagers。一切正常。但我的问题是,在我完成一次后,我无法注入新的 EntityManager。
我有一个 EntityManagerProducer class,它生成我的 EntityManagers。
class EntityManagerProducer {
@PersistenceUnit(name = "DB")
private EntityManagerFactory entityManagerFactory;
@Produces
public EntityManager create() {
EntityManager tmp = this.entityManagerFactory.createEntityManager();
LoggerFactory.info(Constants.AppName, "EntityManager " + tmp.toString() + " freigegeben.");
return this.entityManagerFactory.createEntityManager();
}
public void dispose(@Disposes @Default EntityManager entityManager) {
if (entityManager.isOpen()) {
entityManager.close();
LoggerFactory.info(Constants.AppName, "EntityManager " + entityManager.toString() + " beseitigt.");
}
}
}
永远不会调用 dispose() 方法,所以我认为 EntityManager 永远不会关闭,这就是我不会获得新方法的原因??
帮助会很大...
@aguibert 是对的!
将 @RequestScoped
添加到 Class 和 create() 方法就成功了!
谢谢!