`
cctvx1
  • 浏览: 79957 次
社区版块
存档分类
最新评论

SpringSide2 MDP补充说明

阅读更多

关于SpringSide2 MDP补充说明

     作者:cctvx1 (SpringSide.org.cn 保留版权,转载请注明出处http://wiki.springside.org.cn/display/springside/ActiveMQ )

1.Message Driven POJO

1.1 Container

   在SpringSide2(以下简称为ss2)中主要使用Spring 2.0+ActiveMQ来完成MDP,让开发者能够更简单的使用消息驱动,Spring 2.0提供了更好的MDP支持,你可以直接使用

org.springframework.jms.listener.DefaultMessageListenerContainer 来充当Container 接受消息,同时ss2也提供使用jencks充当container的配置文件,jencks能够更好的管理pool或者线程池。

1.2 MessageListenerAdapter

   为了让POJO接受消息,还需要配置MessageListenerAdapter,org.springframework.jms.listener.adapter.MessageListenerAdapter能够让一个普通的POJO接受消息,ss2的

org.springside.bookstore.components.activemq.OrderMessageConsumer 就是一个用来接受消息的POJO,这里无论使用哪种Container 都能够使用Spring 提供的MessageListenerAdapter

 <!----> 

xml 代码
  1. <!-  Message Driven POJO (MDP) ->  
  2.  <bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">  
  3.   <constructor-arg>  
  4.    <bean class="org.springside.bookstore.components.activemq.OrderMessageConsumer">  
  5.      <property name="mailService" ref="mailService"/>  
  6.    </bean>  
  7.   </constructor-arg>  
  8.   <!-  may be other method ->  
  9.   <property name="defaultListenerMethod" value="sendEmail" />  
  10.   <!- custom MessageConverter define ->  
  11.   <property name="messageConverter" ref="orderMessageConverter" />  
  12.  </bean>  

 

而且在配置中,也能够通过配置defaultListenerMethod 指定接受消息的方法。

1.3 MessageConverter

   Spring提供了一个消息的封装接口MessageConverter,我们需要自行去实现它,从而完成消息的定义,封装.

   public Message toMessage(Object obj, Session session) throws JMSException,
   MessageConversionException

  public Object fromMessage(Message msg) throws JMSException,
   MessageConversionException

   toMessage 提供了一个消息打包的调用,Spring会在jmstemplate调用template.convertAndSend(this.destination, order);的时候 调用toMessage方法
同时,会在MessageListenerAdapter收到原始的jms消息后,首先调用formMessage,然后把消息解包成普通对象,作为参数再返给OrderMessageConsumer的sendEmail方法

1.4 Cosumer 和 Producter

   SpringSide 2 的OrderMessageConsumer和OrderMessageProducer 本身都很简单,Producer仅仅调用jmstemplate的converAndSend方法,而Consumer则处理解包后的消息,这里就是处理业务对象Order

2.使用正确的Message 类型

  由于springside2 使用的是ActiveMQ,所以我们还是以ActiveMQ为例讲解具体的Message类型

2.1 ActiveMQObjectMessage 使用注意事项

     SS2中,在convert中使用的是ActiveMQObjectMessage来封装消息。具体代码参见OrderMessageConvert

     ActiveMQObjectMessage 这里需要注意的是如果你使用的是setObjectProperty(String key,Object value),那么这里的value要不然是Strings 或者是 primitive类型,要不然就只能是map或者list。这里还有要说明的是,如果你使用embedded-vm(未使用持久化)的时候,即使你的Order,OrderItem,Product未实现Serialzable接口,也不会报错,但是一旦你的broker配置了持久化或者是远程broker或者使用其他的transport协议的时候,就会提示Order is not primitive type,因此在springside2 最新的版本中,OrderMessageConver的包装形式已经作了修改,会将Order序列化成byte然后发送。也就是我们可以将消息的定义在Conver完成,而对于上层业务来说是透明的,如果你不想Order,OrderItem,Product实现Serializable接口,那么你就需要在Convert作其他的封装用来发送消息.

2.2 JMS 1.1 对于消息主体类型的说明

  JMS provides five forms of message body. Each form is defined by a message nterface:
    • StreamMessage - a message whose body contains a stream of Java primitive values. It is filled and read sequentially.
    • MapMessage - a message whose body contains a set of name-value pairs where names are Strings and values are Java primitive types. The entries can be accessed sequentially by enumerator or randomly    by name. The order of the entries is undefined.
    • TextMessage - a message whose body contains a java.lang.String. The inclusion of this message type is based on our presumption that String messages will be used extensively. One reason for this is that XML will likely become a popular mechanism for representing the content of JMS messages.
    • ObjectMessage - a message that contains a Serializable Java object. If a collection of Java objects is needed, one of the collection classes provided in JDK 1.2 can be used.
    • BytesMessage - a message that contains a stream of uninterpreted bytes.This message type is for literally encoding a body to match an existing message format. In many cases, it will be possible to use one of the other,self-defining, message types instead. Although JMS allows the use of message properties with byte messages, they are typically not used, since the inclusion of properties may affect the format.

评论

相关推荐

    SpringSide 2.0中文使用说明

    2. **模块化设计**:SpringSide 2.0遵循模块化设计原则,将项目划分为多个独立的模块,如核心模块、持久层模块、服务层模块和Web层模块等,这样有利于代码组织和维护。 3. **Maven构建**:SpringSide 2.0采用Maven...

    springside-3.2.2源码

    《SpringSide 3.2.2 源码解析与技术深度探讨》 SpringSide 是一个基于 Spring Framework 的 Java 开发工具集,旨在简化 Spring 应用程序的开发过程,提供一套快速、现代且规范的开发实践。SpringSide 3.2.2 版本是...

    SpringSide4 参考手册

    SpringSide4参考手册是一份详尽的文档,涵盖了使用SpringSide4.0版本开发应用时可能会用到的各种技术组件和模块。SpringSide是一个开源的Java开发平台,它集成了Spring框架和大量实用的组件,以方便开发人员构建复杂...

    Springside-core-4.1.0/Springside-core-4.1.0

    2. **构建工具**:SpringSide-core-4.1.0使用Maven作为主要的构建工具,提供了一套标准的项目结构和配置,使得项目的构建和部署变得更加简单。 3. **代码生成器**:内含代码生成器工具,可以帮助开发者快速生成常见...

    springside开发全面讲解

    2. **依赖管理**:springside使用Maven进行依赖管理,通过预定义的配置文件,开发者可以快速导入所需的库,避免了手动管理jar包的繁琐过程。 3. **代码规范**:springside遵循Java编码最佳实践,如使用Checkstyle和...

    springside

    总的来说,SpringSide是Spring Framework的一个重要补充,它通过提供模版项目、最佳实践和丰富的示例,降低了使用Spring的门槛,提高了开发者的生产力。无论是对于个人开发者还是企业团队,SpringSide都是一种值得...

    springside3.0.zip

    2. **Maven集成**:SpringSide 3.0 使用Maven作为构建工具,提供了标准的项目结构和配置,使得项目的构建、依赖管理和部署变得更加简单。通过Maven的POM.xml文件,开发者可以轻松管理项目的所有依赖库。 3. **...

    springside3.3.4 使用方法

    ### springside3.3.4使用方法与SSH整合详解 #### 一、Springside简介 Springside项目是基于Spring框架的一个应用架构示例,它提供了一套完整的开发模式来构建企业级Java Web应用程序。Springside 3.3.4版本作为一...

    有springside4.2.3-GA.jar 包

    2. **Demo**:示例模块,提供了各种应用场景的实例,帮助开发者快速理解和使用SpringSide的各项功能,包括数据库操作、RESTful API开发、Maven构建等。 3. **Module**:模块化设计,SpringSide提供了多个可复用的子...

    springside框架

    《SpringSide框架详解:整合Spring、Hibernate与Struts2的高效解决方案》 SpringSide框架,作为一款基于Java的开源企业级应用开发框架,是开发者们为了简化开发流程、提高开发效率而精心设计的。它巧妙地融合了...

    springside-core-4.2.2.GA(含关联的test.jar)

    pom.xml配置 ...mvn install:install-file -DgroupId=org.springside -DartifactId=springside-core -Dversion=4.2.2.GA -Dfile=./springside-core-4.2.2.GA.jar -Dpackaging=jar -DgeneratePom=true

    springside3.3完整版

    "ssh3.3"这个文件名暗示了SpringSide 3.3可能集成了Struts2、Hibernate和Spring,也就是常说的SSH框架。这三个框架的整合能够实现高效的MVC开发,Struts2处理请求和展示视图,Hibernate负责持久化操作,Spring则...

    SpringSide3.3.4安装部署

    SpringSide3.3.4 安装部署详解 SpringSide3.3.4 安装部署是指在计算机上安装和部署 SpringSide3.3.4 软件的过程。在这个过程中,我们需要使用 Maven 工具来生成项目模板,安装 mini-web 应用程序,并配置相应的...

    springside的jar包

    2. **配置管理**:Springside提供了一套统一的配置管理方案,使得Spring的配置更加简洁和清晰,减少了配置文件的冗余和错误。 3. **代码生成器**:通过内置的代码生成器,可以快速生成基于DAO、Service、Controller...

    SpringSide文档.chm

    SpringSide文档.chm。

    springside-4.0.0.GA.zip

    2. **配置文件**:包括Spring的XML配置文件和基于Java的配置,展示了如何灵活地配置Spring应用,以及如何利用 Profiles 实现环境的切换。 3. **文档**:SpringSide通常会附带详细的文档,解释每个示例的意图、工作...

    springside3源码及jar

    2. **最佳实践集成**:springside3集成了许多Java开发的最佳实践,如Maven构建工具、Checkstyle编码规范检查、Junit测试框架等,帮助开发者遵循高质量的开发标准。 3. **快速开发**:通过提供一系列预配置的模板和...

    springside.jar

    《springside.jar在Java应用中的使用详解》 在Java开发领域,springside.jar是一个备受推崇的开源项目,它为开发者提供了丰富的工具和最佳实践,以简化Spring框架的使用。本文将深入探讨springside.jar的核心功能,...

    springside示例quickstart的eclipse工程

    在SpringSide Quickstart中,pom.xml将包含Spring、Hibernate、AspectJ等核心库的依赖,以及Eclipse插件所需的m2e配置。 2. **src/main/java**:这个目录包含了项目的源代码。在SpringSide示例中,你可能会发现以`...

    springside4(showcase)

    《SpringSide 4:Spring MVC 实战展示》 在IT领域,SpringSide 4是一个备受推崇的开源项目,它是一个全面展示Spring框架及其生态系统的实战示例。标题"Springside4 (showcase)"暗示了这是一个以展示SpringSide 4...

Global site tag (gtag.js) - Google Analytics