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及它提供什么有了一个基本的了解,下面将回顾这些例子。第三章提供的一个样例将会在全书使用。
分享到:
相关推荐
"xcf2.5使用包"指的是Apache CXF的2.5版本,这是一个广泛使用的Java框架,用于创建、消费和管理Web服务。此包包含了CXF框架的所有组件和相关依赖,方便开发者在项目中集成和使用。 Apache CXF 2.5.11是该系列的一个...
JMS规范定义了与平台无关的API,这使得开发者可以编写一次代码,然后在任何支持JMS的平台上运行。这意味着JMS客户端程序能够轻松地在不同的操作系统和硬件架构之间迁移,只需确保目标环境有相应的JMS提供者即可。 *...
- **共同特性与可移植性:** JMS专注于定义一组普遍适用的企业消息概念和工具,努力减少Java程序员在使用不同企业消息产品时需要掌握的概念数量,并最大化消息应用的可移植性。 **1.2.4 JMS不包含什么** - **明确...
JMS,即Java消息服务,是Java平台中的消息中间件规范,它允许应用程序创建、发送、接收和读取消息,从而在两台或多台计算机之间进行异步通信。JMS提供了点对点(Point-to-Point,P2P)和发布/订阅(Publish/...
Spring 2.5 是一个重要的Java应用程序框架,它在企业级开发中被广泛使用,特别是在构建基于Java的可重用、模块化和松散耦合的组件方面。这个"SPRING2.5_JAR"压缩包包含的是Spring框架2.5版本的核心库,允许开发者...
Spring Framework 2.5 是一款功能强大的企业级 Java 开发框架,旨在简化应用程序的开发过程,提高开发效率,并提供高度灵活的设计模式支持。该版本进一步增强了 Spring 的核心特性,并新增了许多功能来满足日益增长...
在《Spring 2.5 开发手册》中,会详细解释这些特性的使用方法、配置细节以及最佳实践,帮助开发者充分利用Spring框架,构建稳定、高效的应用系统。通过阅读这份手册,开发者可以深入理解Spring 2.5的工作原理,提升...
JMS(Java Message Service)是一种Java API,用于在两个应用程序之间异步地发送消息。Spring框架提供了对JMS的支持,允许开发者使用JMS template或message listener container来实现消息的发送和接收。本文主要讲述...
Java消息服务(Java Message Service,简称JMS)是Java平台中用于创建应用程序之间异步通信的标准API。它允许应用程序通过发送和接收消息来解耦生产者和消费者,提高系统的可扩展性和可靠性。Apache ActiveMQ是JMS的...
Bean工厂负责创建、配置和管理应用中的对象,而ApplicationContext则扩展了Bean工厂,增加了国际化、事件传播、资源加载等功能。 3. **spring-context.jar**: 提供了上下文环境,这是Spring框架的核心部分,它...
这三个框架的集成使用可以创建一个高效、可维护的Java EE应用。Struts2负责控制流程,Spring处理依赖注入和事务管理,而Hibernate则作为数据层的接口,负责与数据库的交互。这种组合可以提供良好的分层架构,提高...
它引入了大量的新特性和改进,比如对JSF(JavaServer Faces)、JPA(Java Persistence API)、JMS(Java Message Service)和 annotations 的支持,极大地简化了企业级应用的开发。 5. **JMS1.1规范**是Java消息...
9. **JSR(Java Specification Requests)**:J2EE 1.6还包含了多个JSR实现,如JSR 168(Portlet API)和JSR 286(Portlet 2.0 API),用于portlet开发,以及JSR 107(Cache API),为应用提供缓存功能。 **API文档...
JMS为消息的创建、发送、接收和读取提供了统一的接口,使得开发者能够在不同的消息中间件之间进行切换,而无需修改应用程序代码。 **1.2 什么是JMS中的消息(MESSAGING)?** 在JMS中,消息是指在两个或多个应用...
在Java EE 5中,Servlet API升级到了2.5版本,增加了许多新功能。例如,`@WebServlet`注解允许程序员通过在类上添加注解而不是XML配置来声明Servlet。此外,Servlet 2.5支持过滤器链的定义和监听器的增强,使得应用...
Spring框架是一个广泛使用的Java平台应用开发框架,它提供了一种简单的方式来构建复杂的应用程序。接下来,我们将从以下几个方面来深入探讨这个版本的重要知识点。 ### 一、Spring框架概述 Spring框架是一个开源...
二、Spring 2.5的核心技术与新特性 ### 1. Inversion of Control (IoC) 容器 IoC容器是Spring框架的核心组件之一,负责管理对象的生命周期和配置依赖关系。在2.5版本中,IoC容器进行了多项升级: - **新的Bean...
这个API涵盖了多种技术规范,包括Servlet、JSP、EJB、JMS、JTA、JPA等,为开发人员提供了丰富的工具和框架来实现高效、可扩展和可维护的应用。 **1. Servlet**:Servlet是Java EE中的核心组件,它定义了服务器端...