我有一个需求,我需要在两个不同的数据库MYSQL和mongodb中插入减少的对象。在发生故障转移的情况下,应回滚整个事务。
请尽早提供帮助。需要执行此要求。

最佳答案

首先,您必须定义两个数据库连接,因此还要定义两个不同的持久性单元


  persistence.xml


文件。

之后,只需在每个DAO方法中创建2个单独的EntityManager。

请尝试以下操作:

persistFoo(Foo f) {
    // Create these EntityManagers with a proper connection/persistence unit name
    EntityManager emMySQL = //your MySQL db
    EntityManager emMongo = //your Mongo db

    EntityTransaction txMySQL = emMySQL.getTransaction();
    EntityTransaction txMongo = emMongo.getTransaction();

    try {
       txMySQL.begin();
       emMySQL.persist(f);
       txMySQL.commit();

       txMongo.begin();
       emMongo.persist(f);
       txMongo.commit();
    } catch(Exception e) {
       if(txMySQL.isActive()) {
          txMySQL.rollback();
       }
       if(txMongo.isActive()) {
          txMongo.rollback();
       }
    } finally {
       emMySQL.close();
       emMongo.close();
    }
}

关于mysql - 如何使用JPA处理分布式事务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57232384/

10-12 04:10