`
ry.china
  • 浏览: 139773 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Spring 里JMS和DB的事务集成

阅读更多

 

http://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html?page=1

http://blog.csdn.net/yanical/article/details/4545081原文拷贝

 

不过有点长,我现在都差不都忘了里面讲的内容了。注意评论,里面提到文章讲的内容有些是错误的。

Spring里,如果同时存在JMS操作和DB操作,大概也就三种方式:

1.没有使用JTA。JMS不在事务中,DB操作在事务中   

     a,消息处理

     b,开始数据库事务

     c,数据库操作

     d,数据库提交

         成功:结束

         失败:回到b重试

这种方式事务没有集成,靠的纯粹是我们程序的控制,如果最终数据库提交都没成功的话,可以记下log,再人工去纠正数据。例子里把数据库操作放在了更重要的位置,其实也可以倒过来,让数据库操作先完成,只好在做jms操作,看业务需求了:

     a,开始数据库事务

     b,数据库操作

     c,数据库提交

     d,消息处理

         成功:结束

         失败:回到d重试

我们只要把spring配置改成

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
...
<!-- This is important... -->
<property name="sessionTransacted" value="false" />
</bean> 
再加上自己程序控制就好了。

2.如果没有使用JTA,对于上面的配置如果把属性 sessionTransacted 设成true的话,就产生了第二种方式,过程:

    a,开始jms事务

    b,开始数据库事务

    c,数据库和jms操作

    d,提交数据库操作

    e,提交jms操作

a,b的顺序不肯定,不过对程序没影响,但是d,e的顺序是确定的。在Spring里,数据库会在spring的commit方法里提交,而JMS会在afterCommit方法里提交。如果数据库失败,JMS当然也就回滚了,但是如果数据库成功而JMS失败,就产生了数据不一致,就要加上其它措施。而且这里还有一个致命缺点,就是某些情况下即使JMS失败(比如JMS服务器down了),Spring也不会抛出异常,程序外部以为一切正常,而事实上以产生了不一致问题,而且很难发现。

3.如果使用了JTA那么把属性 sessionTransacted 设成true的话,

JMS和数据库操作就在同一个事务里了,没什么好说,最安全的方式,但是效率很低。

分享到:
评论

相关推荐

    Spring整合JMS(四)——事务管理

    在Spring中配置JMS事务,我们需要在`ConnectionFactory`中开启事务支持,然后在`MessageListener`上声明事务。例如,我们可以使用`JmsTemplate`的`setSessionTransacted(true)`方法开启事务,或者在`...

    jms简单demo,集成spring和不集成

    不集成Spring时,你需要手动创建和管理JMS对象,如`ConnectionFactory`、`Destination`(队列或主题)、`MessageProducer`和`MessageConsumer`。这个过程相对繁琐,涉及到更多的代码量,但也能提供更直接的控制。 ...

    spring-jms入门

    配置Spring-JMS与ActiveMQ的集成,主要涉及连接工厂和目的地的配置。 **9. Spring Boot与Spring-JMS** 在Spring Boot项目中,通过添加相关依赖和配置,可以轻松启用Spring-JMS功能。Spring Boot提供了自动配置,...

    JMS_Spring集成所需jar

    Spring也提供了对JMS的全面支持,简化了在Spring应用中集成和使用JMS的过程。 在"JMS_Spring集成所需jar"的压缩包中,通常会包含以下关键的JMS和Spring相关的库文件: 1. **ActiveMQ** - 如果你看到有activemq相关...

    Spring+Weblogic JMS

    集成Spring和WebLogic JMS的关键步骤如下: 1. **配置JMS连接工厂**:在Spring的配置文件中,我们需要定义一个JMS连接工厂bean,通常使用`weblogic.jndi.WLInitialContextFactory`作为初始上下文工厂类,并设置JNDI...

    Spring集成JMS

    Spring集成JMS是Java消息服务(Java Message ...同时,如果使用MySQL作为持久化存储,Spring还提供了与JMS事务集成的能力,确保消息的原子性和一致性。 在实际应用中,`SpringJMS`可能包含以下示例代码片段: ```xml ...

    spring+jms+jta事务的消息发送和消息消费

    标题"spring+jms+jta事务的消息发送和消息消费"指的是一种利用Spring框架集成JMS进行消息传递,并通过JTA来管理分布式事务的场景。这样的设计允许应用程序在多组件环境中保证数据的一致性,即使在组件之间存在网络...

    SpringJMS示例代码

    SpringJMS提供了事务支持,可以在发送或接收消息时启用JMS事务,确保消息传递的可靠性。 9. **错误处理和异常传播** SpringJMS允许开发者捕获和处理JMS异常,例如消息无法发送或接收时,可以通过Spring的异常处理...

    spring-jms 源代码包

    spring-jmsspring-jmsspring-jmsspring-jmsspring-jmsspring-jms

    spring_jms

    Spring JMS(Java Message Service)是Spring框架的一部分,专门用于集成JMS消息传递系统,以实现异步通信和解耦应用程序组件。在这个入门级实例中,我们将探讨如何使用Maven、Spring和ActiveMQ来构建一个简单的...

    spring-jms

    4. **事务管理**: Spring JMS允许与Spring的声明式事务管理集成,可以在JMS操作和数据库操作之间提供一致的事务边界。 5. **JMS会话工厂**: Spring通过JmsConnectionFactory接口提供了一种抽象,可以用来创建JMS...

    spring-jms-4.3.12.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-jms-4.3.12.RELEASE.jar; 赠送原API文档:spring-jms-4.3.12.RELEASE-javadoc.jar; 赠送源代码:spring-jms-4.3.12.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-jms-4.3.12.RELEASE....

    spring-jms-4.3.4.RELEASE.zip

    1. **更好的事务管理**:Spring支持JMS事务和XAS事务,确保消息的可靠传递。在分布式环境中,可以通过JTA来协调跨多个资源的事务。 2. **高级消息选择器**:允许开发者根据消息头和属性进行更复杂的筛选,只处理符合...

    activemq +jms(原生和集成spring-jms)

    8. **消息持久化与事务支持**:讨论ActiveMQ如何确保消息在异常情况下的可靠性,以及如何使用JMS事务确保消息的一致性。 9. **消息筛选与选择器**:讲解如何使用JMS选择器只接收满足特定条件的消息。 10. **性能...

    spring-jms-4.3.20.RELEASE-API文档-中文版.zip

    赠送jar包:spring-jms-4.3.20.RELEASE.jar; 赠送原API文档:spring-jms-4.3.20.RELEASE-javadoc.jar; 赠送源代码:spring-jms-4.3.20.RELEASE-sources.jar; 包含翻译后的API文档:spring-jms-4.3.20.RELEASE-...

    在spring boot中使用jms集成IBM-MQ和TLQ,包含普通队列和主题订阅两种模式,并实现按需加载

    1) 本工程主要演示在SPRING BOOT工程中怎样使用JMS集成IBM-MQ及TLQ两种消息中间件产品 2) 使用SPRING BOOT Conditional机制实现了两种产品按需加载,工程会根据配置文件开关动态加载 3) 实现了普通队列消息发送与...

    Spring-JMS把企业消息处理变容易.doc

    此外,它还包含了对JMS的PlatformTransactionManager实现,使得JMS能够参与到Spring的事务管理中,确保事务的一致性和可靠性。 IBM WebSphere MQ是一个强大的消息中间件,它通过队列和事务机制确保消息在网络中的...

    spring-jms-4.3.20.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-jms-4.3.20.RELEASE.jar 赠送原API文档:spring-jms-4.3.20.RELEASE-javadoc.jar 赠送源代码:spring-jms-4.3.20.RELEASE-sources.jar 包含翻译后的API文档:spring-jms-4.3.20.RELEASE-...

    Java网络编程--基于Spring的JMS编程

    通过`PlatformTransactionManager`接口,可以配置JMS事务与Spring的其他事务管理器协同工作。 4. **消息转换**:Spring还提供了`MessageConverter`接口,用于在消息对象和应用程序对象之间进行转换,这在处理不同...

    spring-jms-4.0.0.RELEASE.jar

    spring-jms-4.0.0.RELEASE.jar spring-jms-4.0.0.RELEASE.jar spring-jms-4.0.0.RELEASE.jar spring-jms-4.0.0.RELEASE.jar

Global site tag (gtag.js) - Google Analytics