【问题标题】:WebSphere Liberty Profile DataSource and CDIWebSphere Liberty Profile 数据源和 CDI
【发布时间】:2015-07-30 05:29:30
【问题描述】:

我已经使用 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 注入了我的 EntityManager。一切都很好。但我的问题是,在我完成一次之后,我无法注入新的 EntityManager。

我有一个 EntityManagerProducer 类,它生成我的 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 永远不会被关闭,这就是为什么我不会得到一个新的??

帮助会很棒...

【问题讨论】:

  • 您的 EntityManagerProducer 类是否声明为 bean? @Disposes 规范声明 dispose 方法必须在托管或会话 bean 类上声明。
  • 我添加了 @ManagedBean 注释,但这并没有解决问题 - 第一次调用再次有效,在第二次调用时我收到 NullPointerException...

标签: datasource cdi code-injection entitymanager websphere-liberty


【解决方案1】:

@aguibert 是对的!

@RequestScoped 添加到 Class 和 create() 方法就可以了!

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2013-07-31
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多