java - JTA(Bitronix)/JPA/Hibernate - 如何从 Entitymanager 获取 XAResource?

标签 java hibernate jpa jta bitronix

你知道当我使用实体管理器时如何获得自动登记到我的事务中的 XAResource 吗?

我使用 Bitronix、JPA、hibernate,我的代码工作正常,但我不想在某个特定的失败时回滚我的所有 XAResources。我只想将其从当前事务中删除,其他事务将被提交。

但是为了将其从当前事务中删除,我需要对象 XaResource,但我不知道如何使用 JPA/Bitronix 获取它。代码示例:

transactionManager.begin();
try {
    (...)
    EntityManager em = emf.createEntityManager();
    (...)
    em.close();
} catch (Exception e) {
    // old version - rollback every XaResource in the current transaction
    //transactionManager.rollback();
    //new version wanted - rollbackonly this XaResource    
    transactionManager.getTransaction().delistResource(XaResource ...);
    throw e;
}
transactionManager.commit();

感谢您的帮助。

最佳答案

A(tomicity) property of ACID不允许出现这种情况。只有所有数据源都能够提交,事务才能成功。

我认为Command Pattern可以帮助您解决问题。假设您要更新两个数据源,如果其中一个数据源失败,您仍然可以控制是否撤消已执行的命令。

如果您不想撤消,则不需要 XA 事务。您只需使用资源本地事务,如果一个数据源发生故障,其余数据源可以继续进行。

关于java - JTA(Bitronix)/JPA/Hibernate - 如何从 Entitymanager 获取 XAResource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20702714/

相关文章:

java - 处理.Org : Modulo Issue

postgresql - Hibernate 乐观锁定 Postgres 和 MariaDb 之间的不同行为

java - 42Y36 : SELECT list may only contain grouping columns, 分组 'table.*'不允许

java - 与快速更新新行的 JTable 交互

java - 如何使用 OpenTok 收听来 self 的应用程序的传入视频通话?

database - 如何使用 hql 将日期格式化为 "YYYY-mm-dd"格式?

java - 在 JPA-SQL(或 HQL)查询中兼容的 Hibernate Composite UserType

java - Hibernate 中的操作超时

postgresql - 在没有调用属性的情况下获取 n+1 个 Hibernate 惰性关系 - Kotlin

java - 在 Java 中编辑字符串 boolean 值和整数的 ArrayList