there is something need to be careful about Hibernate XA transaction.
- UserTransaction utx = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
- Session session1 = null;
- Session session2 = null;
- try {
- utx.begin(); // !!! must begin transaction before open session. order is important
- session1 = auctionDatabase.openSession();
- session2 = billingDatabase.openSession();
- concludeAuction(session1);
- billAuction(session2);
- session1.flush(); // !!! must flush, otherwise can not persistent it
- session2.flush();
- utx.commit();
- } catch (RuntimeException ex) {
- try {
- utx.rollback();
- } catch (RuntimeException rbEx) {
- log.error("Couldn't roll back transaction", rbEx);
- }
- throw ex;
- } finally {
- session1.close();
- session2.close();
- }
本文介绍了一个使用 Hibernate 的 XA 事务管理示例。通过 UserTransaction 接口开始并管理事务,确保了两个不同数据库操作的一致性。在示例中,拍卖结束的数据更新与账单生成操作被包裹在一个全局事务中,确保了事务的原子性和持久性。

1399

被折叠的 条评论
为什么被折叠?



