`
黎剑发
  • 浏览: 3134 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jms中的编程式事务

    博客分类:
  • JMS
JMS 
阅读更多
在网上看到的jms教程,很多仅仅局限在发送接收上,而实际上本人认为异步jms中的事务管理是非常重要的,比如说网上银行,为了更好的响应用户,我们采用异步提交订单的方式,那么用户提交后,在其虚拟账户里,就减少了相应的数额,而真正账户的减少还正在进行,那么如果这个时候由于网络或者其他原因这个消息的处理发生错误,这个时候我们就希望进行消息的回滚,使得消息进行重新处理,那么我们就需要使用jms事务。
   开发一个jms驱动的应用,这是被用来作为与其他几个系统的结合点,上面的例子是与银行系统进行交互。我们定义一个标准的异常处理过程 ,假如整个系统是消息驱动的,在我们的应用的最顶端是我们的messagelistener ,这在今天看起来有点像这样:
public void onmessage(message m) {
  try {
    process(m);
  } catch (throwable t) {
    log(t);
  }
}

假如我们的异常处理策略就是这一种,现在这只是一种情况,我们必须知道,有时候这样的异常并不是自身系统的异常,而是我们需要集成的那些系统,有可能是他们的服务器暂时关闭,因此,在出现这样的错误时,我们希望重新处理此消息,要想重新处理,就要是使用jms的事务处理了。如果是编码进行管理,那么我们需要暴露出session。

public ourmessagelistener(topicsession topicsession) {
  this.topicsession = topicsession;
}


      
 
public void onmessage(message m) {
  try {
    process(m);
    //如果成功了,就调用commit,清除消息缓存
    topicsession.commit();
  } catch (throwable t) {
    log(t);
  }
}


如果添加了回滚方法

public void onmessage(message m) {
  try {
    process(m);
    topicsession.commit();
   } catch (throwable t) {
    log(t);
    topicsession.rollback();//如果想让他回滚,就从session缓存中取得刚发送的消息,继续发送
  }
}

下一个场景,有些异常需要回滚,有些则不需要:

public void onmessage(message m) {
  try {
    object command = new messagehandler(m);
    process(command);
    topicsession.commit();
  } catch (messageinvalidexception e) {
    log(t);
    //我们不希望处理这个异常
    topicsession.commit();
  } catch (throwable t) {
   log(t);
   topicsession.rollback();
  }
}
分享到:
评论

相关推荐

    Java事务设计策略.

    编程式事务模式, 编程管理JTA事务 声明式事务模式, 以方法为单位,让容器使用配置信息来进行事务管理 最佳实践: 当为方法分配事务属性的时候,把类中对大部分方法最具限制性的属性作为类级别的默认属性, 然后再...

    spring-framework-3.0.0.M4-with-docs

    org.springframework.transaction-3.0.0.M4.jar: 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理 org.springframework.web.servlet-3.0.0.M4.jar: SpringMVC org.springframework.jms-3.0.0.M4...

    Spring中文帮助文档

    9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. IBM WebSphere 9.8.2. BEA WebLogic 9.8.3. Oracle OC4J 9.9. 常见问题的解决方法 9.9.1. 对一个特定的 DataSource 使用了错误...

    spring 3.0 jar 所有开发包及开发项目实例

    org.springframework.transaction-3.0.0.M4.jar: 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理 org.springframework.web.servlet-3.0.0.M4.jar: SpringMVC org.springframework.jms-3.0.0.M4...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. BEA WebLogic 9.8.2. IBM WebSphere 9.9. 公共问题的解决方案 9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的...

    Spring API

    9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. IBM WebSphere 9.8.2. BEA WebLogic 9.8.3. Oracle OC4J 9.9. 常见问题的解决方法 9.9.1. 对一个特定的 DataSource 使用了错误...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    8.7 在Session Bean中使用事务 327 8.7.1 容器管理事务 327 8.7.2 Bean管理事务 330 8.8 拦截器 332 8.9 依赖注入 335 8.9.1 EJB注入 336 8.9.2 资源注入 339 8.10 配置EJB引用 340 8.11 使用计时器进行任务调度 342...

    spring4.3.9相关jar包

    spring-core.jar(必须):这个jar 文件包含Spring 框架...spring-tx.jar:为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。 spring-webmvc-portlet.jar:Spring MVC的增强 spring-websocket.jar:

    Spring 2.0 开发参考手册

    9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. BEA WebLogic 9.8.2. IBM WebSphere 9.9. 公共问题的解决方案 9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多...

    spring chm文档

    9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. BEA WebLogic 9.8.2. IBM WebSphere 9.9. 公共问题的解决方案 9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多...

    Spring攻略(第二版 中文高清版).part2

    13.6 管理集成测试中的事务 530 13.6.1 问题 530 13.6.2 解决方案 530 13.6.3 工作原理 531 13.7 在集成测试中访问数据库 536 13.7.1 问题 536 13.7.2 解决方案 536 13.7.3 工作原理 537 13.8 使用...

    Spring攻略(第二版 中文高清版).part1

    13.6 管理集成测试中的事务 530 13.6.1 问题 530 13.6.2 解决方案 530 13.6.3 工作原理 531 13.7 在集成测试中访问数据库 536 13.7.1 问题 536 13.7.2 解决方案 536 13.7.3 工作原理 537 13.8 使用...

    JavaEE企业级开发的面试题汇总

    JavaEE企业级开发的面试题汇总,内容包含了: 1.Java基础:JAVASE面试题 2.框架试题:springmvc,spring,mybatis,springdata,springboot,springcolud等企业级开发中常见...9.分布式事务、分面式锁、高并发相关的面试题等

    java面试题

    73.6. 项目中用到的Spring中的切面编程最多的地方:声明式事务管理。 77 73.7. spring的事务如何配置 77 73.8. transaction有那几种实现(事务处理)(Spring) 79 73.9. Spring IoC 79 73.10. Spring AOP面向方面编程 ...

    Spring in Action中文版 清晰pdf part1

    ·声明式事务与事务管理; ·与其他Web框架集成:Struts、WebWork、Tapestry、Velocity; ·访问J2EE服务,如JMS和EJB; ·使用AOP解决交叉问题; ·企业组应用系统最佳实践。 “……一种解释Spring中各个主题的很好...

    Spring in Action中文版 清晰pdf part2

    ·声明式事务与事务管理; ·与其他Web框架集成:Struts、WebWork、Tapestry、Velocity; ·访问J2EE服务,如JMS和EJB; ·使用AOP解决交叉问题; ·企业组应用系统最佳实践。 “……一种解释Spring中各个主题的很好...

    java 面试题 总结

    抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。...

    超级有影响力霸气的Java面试题大全文档

    31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?  SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建...

    Spring-5.0-Cookbook:Packt出版的Spring 5.0 Cookbook

    它增强了模块性,提供了更具可读性的代码,并使开发人员能够专注于开发应用程序,而基础框架则负责事务API,远程API,JMX API和JMS API。 除了将平台升级到Java 9之外,即将发布的Spring Framework版本还有很多其他...

Global site tag (gtag.js) - Google Analytics