`
JFires
  • 浏览: 41730 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

2.5使用JMS API创建JMS应用(二)

阅读更多

2.5.2 消息驱动beans

消息驱动beans(Message-driven beans)在EJB2.0规范的时候诞生。该组件产生的动机是让EJB能够与JMS简单集成,使得EJB异步消息消费和使用标准JMS APIs一样简单。通过使用MessageListener接口,EJB通过消息推送自动从JMS提供者那里接收消息。一个MDB例子如下。

Listing 2.11 A simple message-driven bean example

import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.jms.Message;
import javax.jms.MessageListener;
public class MyMessageProcessor
    implements MessageDrivenBean, MessageListener {

    public void onMessage(Message message) {
        TextMessage textMessage = null;
        try {
            if (message instanceof TextMessage) {
                textMessage = (TextMessage) message;
                System.out.println("Received message: " + msg.getText());
                processMessage(textMessage);
            } else {
                System.out.println("Incorrect message type: " +
                    message.getClass().getName());
            }
        } catch (JMSException jmsEx) {
             jmsEx.printStackTrace();
        }
    }
    public void ejbRemove() throws EJBException {
        // This method is called by the EJB container
    }
    public void setMessageDrivenContext(MessageDrivenContext ctx)
         throws EJBException {
         // This method is called by the EJB container
    }
    private void processMessage(TextMessage textMessage) {
        // Do some important processing of the message here
    }
}

注意到例子2.11的MyMessageProcessor类实现了MessageDrivenBean和MessageListener接口。MessageDrivenBean接口需要setMessageDrivenContext()和ejbRemove的实现方法。这些方法会在创建和销毁MDB时被EJB容器调用。MessageListener接口只包含单独的一个方法onMessage()。onMessage()方法会在消息到达时被JMS提供者调用。

    MDB除了允许EJB容器管理所需的所有资源,包括Java EE资源(如JDBC,JMS,JCA连接),安全,事务甚至是JMS消息应答,更重要的一个好处是可以并发地处理消息。普通的JMS客户端需要自己管理资源和环境,并且它们通常是线性处理消息--一次一条消息(除非特别地为多线程设计)。而MDB能够一次处理多条消息,因为EJB容器可以通过EJB部署描述符创建很多MDBs实例。这样的配置是在Java EE容器规范定义的。如果你使用Java EE容器,可以查看文档看是如何通过部署描述符进行配置的。

    MDBs的一个缺点是它们要求完全Java EE容器支持。今天所有EJB容器中,只有那些完全支持Java EE的才能支持MDBs。MDBs在一个完全的Java EE容器中非常有用,但是也有一些替代品不要求完全的Java EE容器。使用Spring框架的JMS APIs使得开发消息驱动POJOs(message-driven POJOs)非常简单。这些Plain Old Java Objects(POJOs)可以作为消息驱动组件使用。这种开发风格在Java开发领域逐渐流行起来,因为它避免了使用完整Java EE容器的负载。通过Spring框架的开发将在第七章讨论。

不是所有的EJB容器都要求一个完全的Java EE容器----尝试使用OpenEJB

在写这本书的时候,几乎市场上所有的EJB容器都需要一个完全的Java EE容器来支持MDBs。只有Apache OpenEJB是例外。OpenEJB从EJB1.1,EJB2到EJB3都支持MDBs,它可以通过嵌入或者独立运行方式来支持MDBs。OpenEJB可以嵌入在Apache Geronimo,Apache Tomcat或者你自己的Java应用。

 

2.6总结

企业消息传送在商业上的影响是明显的。企业消息传送及相关的概念影响了很多而外的技术和观念。没有企业消息传送,开发者就不能在同步调用和解偶的应用间自由选择。SOA,CEP和其它高层次基于企业消息传送的观念也不会产生。更重要的是JMS规范也不会产生。

    JMS规范对于Java世界的影响巨大,它使得消息传送变成Java的一部分,并且可以让所有的Java开发者使用。这对于允许Java连接商业上重要的应用非常必须,因为它为消息传送到使用提供一个标准的行为。这章的例子都非常简单和短,它们的目的是是你了解JMS。本书接下来的部分有更丰富的例子讨论,并且可以从网上下载。

    现在我们对JMS及它提供什么有了一个基本的了解,下面将回顾这些例子。第三章提供的一个样例将会在全书使用。

1
0
分享到:
评论

相关推荐

    Spring API

    6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 7.2.3. AspectJ切入点表达式 7.2.4. 便利的切入...

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

    第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、javamail、ejb 3的session bean、message driven bean、jpa、jax-ws 2、jaas等java ee知识,这部分知识以jsf+ejb 3+jpa整合开发为重点,通过使用netbeans ide工具...

    Spring in Action(第二版 中文高清版).part2

    2.5 控制Bean创建 2.5.1 Bean范围化 2.5.2 利用工厂方法来创建Bean 2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 3.1 声明父Bean和子Bean 3.1.1 抽象基Bean类型 3.1.2 抽象共同属性 3.2 方法注入...

    Spring in Action(第二版 中文高清版).part1

    2.5 控制Bean创建 2.5.1 Bean范围化 2.5.2 利用工厂方法来创建Bean 2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 3.1 声明父Bean和子Bean 3.1.1 抽象基Bean类型 3.1.2 抽象共同属性 3.2 方法注入...

    Spring in Action(第2版)中文版

    2.5控制bean创建 2.5.1bean范围化 2.5.2利用工厂方法来创建bean 2.5.3初始化和销毁bean 2.6小结 第3章高级bean装配 3.1声明父bean和子bean 3.1.1抽象基bean类型 3.1.2抽象共同属性 3.2方法注入 3.2.1基本...

    JBPM4工作流应用开始指南.rar

    此外,本篇还可以帮助读者快速上手jBPM4、使用jBPM4开发企业流程应用,包括安装和配置jBPM4、使用jBPM图形化流程设计器(GPD)设计流程、把流程部署到服务器上去、使用jBPM 4 Service API控制流程、掌握jBPM流程定义...

    springboot参考指南

    使用@ServerEndpoint创建WebSocket端点 xvii. 64.17. 启用HTTP响应压缩 i. 64.17.1. 启用Tomcat的HTTP响应压缩 ii. 64.17.2. 使用GzipFilter开启HTTP响应压缩 iv. 65. Spring MVC i. 65.1. 编写一个JSON REST服务 ...

    Spring中文帮助文档

    6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 7.2.3. AspectJ切入点表达式 7.2.4. 便利的切入...

    cxf2.5源码

    这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样...

    Spring 2.0 开发参考手册

    6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. ...

    cascading-release-maven-plugin:多项目Maven发布插件,一键发布多组项目

    每个“模块”都有自己的生命周期和版本控制方案,例如 api-1 可以有 2.5 版,api-2 可以有 1.2 版等。 假设从一个模块到另一个模块存在依赖关系。 然后很快就在这个项目中工作变得很痛苦,要么是因为你必须经常...

    spring chm文档

    Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack ...19.2. 使用Spring JMS ...

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

    6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. 便利的切入...

    Java_EE_6规范中文版

    2.4 容器 2.5 资源适配器 2.6 数据库 2.7 Java EE标准服务 2.8 互用性 2.9 产品标准的灵活性 2.10 Java EE产品的扩展 2.11 平台角色 2.12 平台协议 2.13 J2EE 1.3中的变化 2.14 J2EE 1.4中的变化 2.15 Java EE 5...

    java应用软件程序设计

    Reply模式的JMS应用 421 实例120 使用Java IDL 426 实例121 EJB与CORBA的交互 430 实例122 基于EJB的真实世界模型 433 实例123 EJB的商业应用——定购单 447 第11章 Java 2 Platform Micro Edition...

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

    11.5 创建应用的领域类 452 11.5.1 问题 452 11.5.2 解决方案 452 11.5.3 工作原理 452 11.6 为一个应用的领域类生成CRUD控制器和视图 454 11.6.1 问题 454 11.6.2 解决方案 454 11.6.3 工作原理 ...

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

    11.5 创建应用的领域类 452 11.5.1 问题 452 11.5.2 解决方案 452 11.5.3 工作原理 452 11.6 为一个应用的领域类生成CRUD控制器和视图 454 11.6.1 问题 454 11.6.2 解决方案 454 11.6.3 工作原理 ...

    大型分布式网站架构与实践

     常见的分布式系统存储解决方案,包括MySQL的分布式扩展、HBase的API及使用场景、Redis的使用等。  如何使用分布式消息系统ActiveMQ来降低系统之间的耦合度,以及进行应用间的通信。  垂直化的搜索引擎在分布式...

    Java测试新技术TestNG和高级概念.part1

    无论您使用TestNG,JUnit或其他测试框架,本书提供的测试设计模式都会告诉您如何改进您的测试,对如何让代码和设计变得更可测试提供具体的建议。 目录: 第1章 起步 1.1 超越JUnit 3 1.2 JUnit 4 1.3 针对可测试性而...

    Java测试新技术TestNG和高级概念.part2

    无论您使用TestNG,JUnit或其他测试框架,本书提供的测试设计模式都会告诉您如何改进您的测试,对如何让代码和设计变得更可测试提供具体的建议。 目录: 第1章 起步 1.1 超越JUnit 3 1.2 JUnit 4 1.3 针对可测试性而...

Global site tag (gtag.js) - Google Analytics