jboss 将narayana事务管理器与Hibernate集成

9wbgstp7  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(183)

我的独立应用程序已经将narayana事务管理器用于JTA事务和其他XA资源,现在我还尝试将其与Hibernate集成。
hibernate.cfg.xml

<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
 <property name="hibernate.transaction.factory_class">
  org.hibernate.transaction.JTATransactionFactory</property>

<property name="hibernate.transaction.manager_lookup_class">
   <!-- org.hibernate.transaction.JBossTransactionManagerLookup -->com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple
</property>

<property name="hibernate.current_session_context_class">jta</property>

其他Java配置

registry.applySetting(AvailableSettings.JTA_PLATFORM,     "org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform");

registry.applySetting(AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY,     "jta");

这是我开始交易的方式

TransactionManager transactionManager     =com.arjuna.ats.jta.TransactionManager.transactionManager();
transactionManager.begin();

Session session = currentSessionContext.currentSession();

session.joinTransaction();
System.out.println("is joined "+session.isJoinedToTransaction());

session.update(obj);
transactionManager.commit();
session.close();
sessionFactory.close();

现在的问题是,db只在调用sessionFactory.close()后才显示会话的更改,但它不应该在transactionManager.commit()中显示。
我如何配置它在transactionManager.commit()之后进行数据库更新?

tv6aics1

tv6aics11#

差一点。缺少的是事务管理器的JDBC连接登记,请参阅https://jbossts.blogspot.com/2017/12/narayana-jdbc-transactional-driver.html
这个额外的步骤是必要的,因为Narayana实现了JTA规范,并且JTA使用XAResource而不是JDBC连接。

相关问题