且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在没有分布式事务的情况下使用JPA将同一对象持久化到两个不同的数据库?

更新时间: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管理的事务,尽管这不是用于生产用途,也不是特别优雅,但如果这从根本上有什么问题,我将非常感激有人指出正确的方法。