将 narayana 事务管理器与休眠集成

Posted

技术标签:

【中文标题】将 narayana 事务管理器与休眠集成【英文标题】:Integrate narayana transaction manager with hibernate 【发布时间】:2017-02-07 23:52:02 【问题描述】:

我的独立应用程序已经使用 narayana 事务管理器与其他 XA 资源进行 JTA 事务,现在我也在尝试将它与 Hiberante 集成。这样休眠事务也可以在 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() 之后更新数据库?

【问题讨论】:

【参考方案1】:

你已经接近了。缺少的是带有事务管理器的 JDBC 连接登记,请参阅 https://jbossts.blogspot.com/2017/12/narayana-jdbc-transactional-driver.html

这个额外的步骤是必要的,因为 Narayana 实现了 JTA 规范,并且 JTA 与 XAResources 一起工作,而不是与 JDBC 连接一起工作。需要一些胶水代码来 a) 为 JDBC 连接提供 XAResource b) 将该资源登记到事务

【讨论】:

以上是关于将 narayana 事务管理器与休眠集成的主要内容,如果未能解决你的问题,请参考以下文章

Python上下文管理器与with语句

安全管理器与访问控制器

配置管理器与网络设置

Android 工作管理器与服务?

JAVA布局管理器与面板组合

是否可以将 Tensorflow Graphics 的 Levenberg-Marquardt 优化器与 Tensorflow 2.0 模型集成?