Datasource和EntityManager在同一个Java EE会话Bean中

时间:2014-10-22 17:24:19

标签: java java-ee jboss ejb wildfly

我正在使用Wildfly 8.1和Postgres 9.2以及最新的jdbc驱动程序(非XA配置)

如果我有这样的会话Bean:

@Stateless
public class MySessionBean {
  @Resource(lookup="jdbc/mydb")
  Datasource ds;

  @PersistenceContext // defaults to datasource lookup name "jdbc/mydb"
  EntityManager em;

  public void method1() {
    // will ds.getConnection() and 
    // the underlying connection used by em be the same?
  }
}

ds.getConnection()的方法调用中,em是否与EntityManager(method1())使用的底层连接相同?

如果他们共享相同的jta-transaction,那我怎么不需要XA数据源而只需要常规数据源呢? (假设数据源的查找名称也是EntityManager的默认数据源)

我无法在ejb 3.1规范中找到核心化。

除了我理解的问题,我需要自己关闭数据源连接,但事务将由容器管理(如果我错了,请纠正我)

1 个答案:

答案 0 :(得分:1)

我不认为连接是一样的。据我所知,您将在同一个池中获得由应用程序服务器管理的2个不同的连接。

如果是这样,您就无法在2个连接上共享简单的事务。您必须在两个资源之间共享事务管理器,因此请使用XA。