gpt4 book ai didi

java - Core Java 应用程序中的分布式事务管理

转载 作者:行者123 更新时间:2023-12-01 12:42:46 28 4
gpt4 key购买 nike

是否可以在不在任何容器内运行的核心java应用程序中使用分布式事务管理器?

我有一个从 JMS 队列读取消息并将其写入数据库的应用程序。如果写入数据库失败,则完整的事务应该回滚。我正在考虑使用 JOTM,但不确定如何配置它。也不确定这种配置是否可行,因为该应用程序不在任何服务器上运行。任何建议都会很有帮助。提前致谢。

最佳答案

这个Spring blog entry解释如何在容器外部配置 JTA。 JOTM 是所描述的选项之一。

对于您的情况,使用 ChainedTransactionManager 来模拟 JTA 会更简单。使用最少的 Spring 配置可以获得几乎相同的效果。按如下所示进行配置,然后在监听器上指定 @Transactional(value="chainedTransactionManager")

@Bean 
JmsTransactionManager jmsTransactionManager(ConnectionFactory connectionFactory) {
JmsTransactionManager manager = new JmsTransactionManager();
manager.setConnectionFactory(connectionFactory);
return manager;
}

@Bean
JpaTransactionManager jpaTransactionManager() {
JpaTransactionManager manager = new JpaTransactionManager();
return manager;
}

//Encapsulating TM used to commit/rollback JMS and JPA together, without overhead of JTA. Note that JMS should be listed first, as transactions commit in reverse order and JMS less likely to fail.
@Bean
ChainedTransactionManager chainedTransactionManager(JmsTransactionManager jmsTransactionManager, JpaTransactionManager jpaTransactionManager){
ChainedTransactionManager manager = new ChainedTransactionManager(jmsTransactionManager, jpaTransactionManager);
return manager;
}

关于java - Core Java 应用程序中的分布式事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24947804/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com