【发布时间】:2013-08-04 15:08:57
【问题描述】:
我一直在使用 Java EE 平台进行编程,但有时我错过了大局。
使用 EJB 和 Container-Managed Transactions,如何在单个事务中对多个数据源执行操作?
我的代码如下所示:
aaa-ejb 模块
包含一个指向第一个数据源的persistence.xml。
@Stateless
public class AaaDao {
@PersistenceContext
EntityManager em;
// using defaults: @TransactionAttribute(REQUIRED)
public void foo(...) {
em.persist(...);
}
}
bbb-ejb 模块
包含另一个指向第二个数据源的persistence.xml(不同的持久性单元)。
@Stateless
public class BbbDao {
@PersistenceContext
EntityManager em;
// using defaults: @TransactionAttribute(REQUIRED)
public void bar(...) {
em.persist(...);
}
}
ccc-ejb 模块
依赖于以上两个模块。
@Stateless
public class CccBean {
@EJB AaaDao aaaDao;
@EJB BbbDao bbbDao;
// using defaults: @TransactionAttribute(REQUIRED)
public void qux(...) {
aaaDao.foo(...);
bbbDao.bar(...);
}
}
我的意思是:真的那么容易吗?当事情似乎“神奇”地运作时,我总是有点怀疑,我总是怀疑有一个“陷阱”。
在 Oracle WebLogic 10.3 上使用 Java EE 5、EJB 3.0、JPA 1.0。
【问题讨论】:
标签: jakarta-ee ejb-3.0 jta java-ee-5 xa