当前位置: 首页 > 知识库问答 >
问题:

将narayana事务管理器与hibernate集成

彭宏深
2023-03-14

我的独立应用程序已经使用narayana事务管理器与其他XA资源进行JTA事务,现在我也在尝试将其与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>

其他爪哇会议 -

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之后更新数据库。提交()?

共有1个答案

王宜
2023-03-14

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

这个额外的步骤是必要的,因为Narayana实现了JTA规范,而JTA使用的是XAResources而不是JDBC连接。需要一些粘合代码来a)为JDBC连接提供XAResource)将该资源登记到事务

 类似资料:
  • jboss narayana jta事务管理器是在我的独立java应用程序中实现的。我可以将事务管理器从jta集成到Hibernate吗?当我调用jta事务管理器的commit方法时,hibernate所做的所有更改也应该提交。请以身作则。

  • 并用@Transactional注释了具体类。 我们使用Jboss应用服务器支持通过JNDI与MQ集成。这里的问题是,如果监听器中的任何层有任何异常,则整个事务不会回滚,消息也不会移动到退出队列。很明显,当我们使用Hibernate事务管理器时,它不知道其他资源,如JMS事务。 我可以安全地用JTA事务替换它吗,因为Jboss将处理整个事务管理?这样做是否有任何可预见的风险?

  • 引入 Maven 依赖 <properties> <narayana.version>5.9.1.Final</narayana.version> <jboss-transaction-spi.version>7.6.0.Final</jboss-transaction-spi.version> <jboss-logging.version>3.2.1.Final</jbo

  • 问题内容: 我刚刚开始使用spring和hibernate进行项目。我的DAO图层类扩展了HibernateDaoSupport。我们没有使用注释。之前,我们使用了struts,因此我们使用了Session类提供的getTransaction,commit,rollback ..方法。我的要求非常简单,对于所有DAO类,如果有异常,则回滚,否则提交。请提出介绍spring交易管理的最简单方法。 问

  • 我有一个使用事务性SimpleMessageListenerContainer的spring amqp消费者。容器上设置的TransactionManager是RabbitTransactionManager。我的MessageListener调用了一个带有@Transactional注释的服务方法。在Spring,我有一个HibernateTransactionManager,在bean声明上有

  • 问题内容: 我是hibernate的初学者。我已经了解了hibernate事务划分(至少我是这样认为的)。但是在编码了一些这样的方法之后: 我开始想避免它,并希望在我的方法之外自动完成它,因此我只写了“ //在这里做某事”部分。我已经阅读了TransactionProxyFactoryBean,并认为xml配置非常长,必须对要进行事务处理的每个类都进行重复,因此,如果可能的话,我要避免使用它。 我