Я некоторое время программировал платформу Java EE, но иногда мне не хватает большего изображения.Несколько источников данных XA в одной транзакции JTA
Использование EJB и Container-Managed Transactions, как я могу выполнять операции с несколькими источниками данных в одной транзакции?
Мой код выглядит следующим образом:
ааа-модуль EJB
Содержит persistence.xml
, указывающий на первый источник данных.
@Stateless
public class AaaDao {
@PersistenceContext
EntityManager em;
// using defaults: @TransactionAttribute(REQUIRED)
public void foo(...) {
em.persist(...);
}
}
модуль БББ-EJB
Содержит другой persistence.xml
(другой блок сохранения), указывающий на второй источник данных.
@Stateless
public class BbbDao {
@PersistenceContext
EntityManager em;
// using defaults: @TransactionAttribute(REQUIRED)
public void bar(...) {
em.persist(...);
}
}
модуль ссс-EJB
В зависимости от указанных выше двух модулей.
@Stateless
public class CccBean {
@EJB AaaDao aaaDao;
@EJB BbbDao bbbDao;
// using defaults: @TransactionAttribute(REQUIRED)
public void qux(...) {
aaaDao.foo(...);
bbbDao.bar(...);
}
}
Я имею в виду: это действительно так просто? Я всегда немного скептически настроен, когда все кажется «волшебным», я всегда подозреваю, что есть «поймать».
Использование Java EE 5, EJB 3.0, JPA 1.0 для Oracle WebLogic 10.3.