我的独立应用程序已经将narayana事务管理器用于JTA事务和其他XA资源,现在我还在尝试将其与Hiberante集成。以便hibernate事务也在JTA事务作用域中执行-
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 conf -
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()之后进行数据库更新?
发布于 2021-07-18 03:24:57
你已经很接近了。缺少的是使用事务管理器的JDBC连接登记,请参阅https://jbossts.blogspot.com/2017/12/narayana-jdbc-transactional-driver.html。
这个额外的步骤是必要的,因为Narayana实现了JTA规范,而JTA使用的是XAResources,而不是JDBC connection。a)为JDBC连接提供XAResource需要一些粘合代码b)将资源征募到事务
https://stackoverflow.com/questions/39773944
复制相似问题