`
黎剑发
  • 浏览: 3388 次
  • 性别: 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();
  }
}
分享到:
评论

相关推荐

    JMS中/英文帮助文档

    8. **事务(Transactions)**:JMS允许在消息发送和接收操作中使用事务,确保消息传递的原子性。 9. **API**:JMS提供了一套丰富的API,包括`javax.jms`包下的各种接口和类,如`ConnectionFactory`、`Session`、`...

    JMS 中文 规范

    - **JMS的需求:** JMS定义了一系列的需求来满足企业级应用中的消息传递需求,包括消息的安全性、持久性和事务支持等方面。 - **与其他Java API的关系:** - **JDBC(Java Database Connectivity):** JMS可以与...

    JMS_Spring集成所需jar

    Java消息服务(JMS)是Java平台中用于在分布式环境中传递消息的标准API。它允许应用程序创建、发送、接收...同时,Spring的声明式事务管理可以确保消息传递的一致性,使得在整个系统中实现高可用和健壮的架构成为可能。

    JMS--J2EE培训材料

    JMS编程模型包括了创建连接、创建会话、创建消息生产者和消费者等步骤。以下是一个典型的JMS程序开发流程: 1. **通过JNDI查询ConnectionFactory和Destination**:首先通过Java Naming and Directory Interface ...

    Spring JMS 消息处理-基于JNDI

    4. **消息监听器**:Spring JMS支持声明式和编程式的消息监听器。博客会展示如何定义MessageListener接口的实现,并将其注册到Spring容器中,以便在接收到消息时自动调用。 5. **发送和接收消息**:博主将演示如何...

    javax.jms_1.1.0.jar.zip

    这些接口和类为开发者提供了一个抽象层,让他们可以独立于具体的JMS提供商进行编程。 2. **消息模型**: - **点对点(P2P)**:在这种模式下,消息从一个生产者发送到一个队列,然后由一个消费者接收。队列保证...

    Spring In Action 使用Spring发送和接收JMS消息

    这可以通过编程式事务管理或声明式事务管理实现。 四、消息持久化 在JMS中,消息的持久化保证了即使在服务器故障后,消息也不会丢失。Spring支持消息的持久化,当消息不能立即送达时,会将其存储在消息服务器上,...

    Spring事务配置的五种方式

    1. **编程式事务管理(Programmatic Transaction Management)** 编程式事务管理允许你在代码中直接管理事务的开始、提交、回滚等操作。通过`PlatformTransactionManager`接口和`TransactionDefinition`接口来实现...

    JMS1.1规范培训教程&&spring框架

    Spring 是一个广泛使用的Java企业级应用开发框架,它简化了复杂性,提供了依赖注入(DI)、面向切面编程(AOP)和声明式事务管理等功能。在与JMS集成时,Spring 提供了以下特性: 1. **JMS模板**:类似于JDBC的...

    spring 事务配置方式

    编程式事务管理允许你在代码中直接控制事务的开始、提交、回滚等操作。使用`PlatformTransactionManager`接口来管理事务,如`HibernateTransactionManager`或`DataSourceTransactionManager`。示例代码如下: ```...

    JMS整合Spirng

    Spring可以将JMS操作纳入到本地事务或者分布式事务中,通过`@Transactional`注解或编程式事务管理,确保消息的发送和业务操作原子性。 6. **消息转换** Spring的`MessageConverter`接口允许我们将Java对象与JMS...

    三种事务配置方法.doc

    声明式事务管理简化了事务处理,降低了代码复杂度,而编程式事务管理提供了更大的控制权。容器管理的事务则依赖于特定的J2EE环境,但可以透明地在多个组件间传播事务。 在实际应用中,选择哪种事务管理策略取决于...

    spring+jms+activemq

    在IT行业中,Spring框架是Java应用开发的基石,它提供了丰富的功能来简化应用程序的构建,包括依赖注入、AOP(面向切面编程)以及模块化的Web开发。JMS(Java Message Service)则是一种标准,用于在分布式环境中...

    JavaTransaction

    2. 编程式事务模型:编程式事务模型利用Java事务API (JTA),使开发人员能够直接控制事务的开始、提交和回滚。通过UserTransaction接口,开发人员可以调用begin()、commit()和rollback()方法来管理事务。虽然这种方法...

    spring-jms:Spring JMS教程

    Spring JMS(Java Messaging Service)是Spring框架的一部分,它提供了一个高级抽象层来简化JMS编程。通过Spring JMS,开发者可以更容易地使用消息传递来构建可伸缩、可靠且分布式的企业级应用程序。在本教程中,...

    JMS_ActiveMQ_Spring.rar

    Spring与JMS的整合使得开发者能够方便地在Spring应用中使用JMS,通过声明式的方式配置消息生产者和消费者,降低了复杂性。 将JMS、ActiveMQ和Spring整合,首先需要在Spring配置文件中定义ConnectionFactory,这是与...

    Spring整合JMS

    在Java世界中,Spring框架是应用最广泛的轻量级开源框架之一,它为开发者提供了丰富的功能,包括数据访问、事务管理、AOP(面向切面编程)等。当我们谈论"Spring整合JMS"时,意味着我们要将Spring框架与Java消息服务...

    spring-jms-oracle-aq.rar_oracle aq_spring oracle aq_spring oracl

    由于Spring JMS与Oracle AQ的集成支持事务,你可以利用Spring的声明式事务管理来确保消息的原子性。如果在处理消息时发生异常,整个事务将被回滚,消息将保留在队列中,等待重新处理。 6. 性能优化: 根据应用...

Global site tag (gtag.js) - Google Analytics