当我使用我的实体管理器时,你知道我如何能够自动获取XAResource到我的交易中吗?
我使用Bitronix,JPA,hibernate,我的代码运行正常,但如果一个特定的失败,我不想回滚所有的XAResource。我只想将其从当前交易中删除,其他人将被提交。
但是对于当前事务的删除,我需要对象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();
感谢您的帮助。
答案 0 :(得分:1)
A(tomicity) property of ACID不允许这样的情况。只有在所有数据源都能够提交时,事务才能成功。
我认为Command Pattern可以帮助您解决问题。我们假设您要更新两个数据源,如果一个数据源出现故障,您仍然可以控制是否撤消已执行的命令。
如果您永远不想撤消,那么您不需要XA交易。您只需使用资源本地事务,如果一个数据源失败,其余数据源就可以继续。