更新时间:2022-12-31 11:52:59
嗯,我没有发现如何使用容器管理的事务来做到这一点,但却发现了如何使用Bean管理的事务来做到这一点。注入了一个UserTransaction资源,并在Begin/Commit对之间包装了每个持久化资源:
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class MyClass
{
@Resource private UserTransaction utx;
public void doStuff()
{
EntityManager mysql = ...;
EntityManager postgres = ...;
MyEntity e = new MyEntity();
e.setStuff();
try {
utx.begin();
mysql.persist(e);
utx.commit();
utx.begin();
postgres.persist(e);
utx.end();
} catch (...) {
...
}
}
}
我以前从未尝试过使用Bean管理的事务,尽管这不是用于生产用途,也不是特别优雅,但如果这从根本上有什么问题,我将非常感激有人指出正确的方法。