`
suhuanzheng7784877
  • 浏览: 704285 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ff8d036b-05a9-33b5-828a-2633bb68b7e6
读金庸故事,品程序人生
浏览量:47749
社区版块
存档分类
最新评论

JavaEE5学习笔记06-EJB之消息驱动Bean(MDB)总结----1

阅读更多

1.      功能介绍

EJB的分类中还有一个就是消息驱动BeanMessageDrivenBean),百度的说明其实很到位。

消息驱动Bean(MDB) 是设计用来专门处理基于消息请求的组件。一个MDB类必须实现MessageListener接口。当容器检测到bean守候的队列一条消息时,就调用onMessage()方法,将消息作为参数传入。MDBOnMessage()中决定如何处理该消息。你可以用注释来配置MDB监听哪一条队列。当MDB 部署时,容器将会用到其中的注释信息。当一个业务执行的时间很长,而执行结果无需实时向用户反馈时,很适合使用消息驱动Bean。如订单成功后给用户发送一封电子邮件或发送一条短信等。消息驱动bean是一个异步消息使用者。当JMS消息到达时,容器激发消息驱动bean。消息驱动bean既没有本地接口也没有组件接口。消息驱动bean实例是一个消息驱动bean类的实例。对客户机来说,消息驱动bean是一个在服务器上实现某些业务逻辑的JMS消息使用者。客户机通过JMS发送消息到JMS Destination (QueueTopic)来访问消息驱动bean,而消息驱动bean类是JMS DestinationMessageListener

  消息驱动bean实例没有会话状态。这意味着当不涉及服务客户机消息时,所有的bean实例都是等同的。消息驱动bean是匿名的。它们没有客户机可视的标识。容器创建消息驱动bean实例来进行消息处理,而消息驱动bean是这些消息的使用者。其生命周期由容器控制。

  消息驱动bean实例没有特定于客户机的状态。然而,通过处理客户机信息,消息驱动bean实例的实例变量可以包含状态。这些状态的示例包括一个开放的数据库连接和一个EJB对象的对象引用。

其实核心的问题就是我们什么情况下使用消息驱动Bean

1):当一个业务方法需要很长时间处理的时候,而且处理时间十分不确定

2):客户端调用后无需服务端立刻返回结果

而我们在这里不得不再说一下,消息驱动Bean实际上就是一个异步的JMS消费者。而这个消费者一般需要做以下2件事情就够了。

1):通过实现onMessage()方法来获取消息目的的消息对象

2):调用业务逻辑EJB组件,对获取的信息执行业务逻辑

EJB容器中,和SessionBean一样都是有一个对象池来维护消息驱动Bean的生命周期的。

2.      实例代码

首先我们在JBoss的控制台上配置一个新的Queue类型的JMS消息目的,如下所示:

 

如上所示,在JBoss中新增了一个叫做InsertUserQueue的消息目的。下面我们在服务器端开发消息驱动Bean以及和消息驱动Bean有关的类。

UserDTO类代表了表person的实体

 

package ejb.messageDrivenBean.dto;

 

import java.io.Serializable;

 

/**

 * person的数据模型

 * @author liuyan

 *

 */

public class UserDTO implements Serializable {

 

    /**

     *

     */

    private static final long serialVersionUID = -4153158445872587565L;

    private int id;

    private String name;

 

    public int getId() {

       return id;

    }

 

    public void setId(int id) {

       this.id = id;

    }

 

    public String getName() {

       return name;

    }

 

    public void setName(String name) {

       this.name = name;

    }

 

}

真正的消息驱动Bean

 

package ejb.messageDrivenBean;

  

/**

 * 消息驱动Bean

 *

 * @author liuyan

 */

@MessageDriven(activationConfig = {

       @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),

       @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),

       @ActivationConfigProperty(propertyName = "destination", propertyValue = "InsertUserQueue") })

public class UserDTOMessageDrivenBean implements MessageListener {

 

    /**

     * 注入其他EJB组件

     */

    @EJB(beanName = "UserServiceEAOImpl")

    private UserService userService;

 

    /**

     * 消息接到后的处理方法

     */

    @Override

    public void onMessage(Message message) {

       // TODO Auto-generated method stub

       if (message != null) {

           if (message instanceof ObjectMessage) {

 

              // 获得消息

              ObjectMessage objectMessage = (ObjectMessage) message;

              try {

 

                  // 强制转型

                  UserDTO userDTO = (UserDTO) objectMessage.getObject();

 

                  // 插入数据

                  userService.insertUser(userDTO);

                 

                  System.out.println("执行插入业务完毕");

              } catch (JMSException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

              }

           }

       }

    }

 

}

这个类是真正的消息驱动Bean,这里需要说明的就是此类必须实现接口MessageListener以及它的onMessage方法,在方法中会获得消息目的的消息,从而进行消息的消费。此处是调用了一个被注入的EJB组件——SessionBean

还有一个需要重点说明的就是@MessageDriven注解,@MessageDriven注解有activationConfig属性配置,它是对该驱动Bean监听的JMS消息的一些配置信息,使用@ActivationConfigProperty注解作为配置项,每个配置项都是由propertyNamepropertyValue这种键值对儿作为属性的配置。

1):destinationType:表示消费目的类型,是PTP类型或者定制

2):acknowledgeModeJMS消息的确认模式,是否回复,还是自动回复

      3):destination:表示监听的消息目的JNDI名,此属性只对JBoss容器生效

  • 大小: 70.2 KB
分享到:
评论

相关推荐

    JavaEE5学习笔记06-EJB之消息驱动Bean总结

    ### Java EE 5 学习笔记06:EJB之消息驱动Bean总结 #### EJB 消息驱动 Bean (Message Driven Bean, MDB) 在Java EE 5中,消息驱动Bean(MDB)是一种特殊的EJB组件,它主要用于处理异步消息。MDB能够接收并处理由...

    JavaEE5学习笔记05-EJB之会话Bean总结

    ### JavaEE5学习笔记05-EJB之会话Bean总结 #### EJB(Enterprise JavaBeans)简介 EJB(Enterprise JavaBeans)是Java EE平台的一部分,用于开发和部署可重用的服务组件。EJB规范定义了如何编写、部署以及管理企业...

    JavaEE5学习笔记07-Web层与EJB集成总结

    ### JavaEE5学习笔记07-Web层与EJB集成总结 #### 一、JavaEE5框架中的Web层与EJB集成概述 在JavaEE5(即Java Platform, Enterprise Edition 5)中,Web层与EJB(Enterprise JavaBeans)的集成是构建企业级应用的...

    JavaEE5学习笔记01-JTA和数据库事务

    ### JavaEE5学习笔记01-JTA和数据库事务:深入解析与应用 #### 一、JavaEE5概览与核心组件 JavaEE5是Java Enterprise Edition的第五个版本,标志着企业级Java应用的一个重要里程碑。它引入了一系列重要的新特性,...

    JavaEE5学习笔记02-JNDI与RMI

    总结来说,JNDI和RMI在JavaEE5中提供了强大的服务发现和分布式对象通信能力,使得开发者能够构建可扩展、模块化的企业级应用。通过JNDI,应用可以轻松地查找和利用服务器上的资源,而RMI则为远程对象的调用提供了...

    JavaEE5学习笔记04-JavaMail使用总结---3

    这篇学习笔记主要聚焦于JavaMail在JavaEE5中的使用,通过深入理解其核心概念和实践操作,我们可以更好地在实际项目中应用这一工具。 JavaMail API提供了一套标准的接口,允许Java应用程序发送和接收电子邮件。它...

    javaee-api-8.0-javadoc.jar

    javaee-api-8.0-javadoc.jar,这是javaee1.8api的jar包,解压后可用javadoc2chm制作成chm帮助文档。

    JavaEE源代码 struts2-core-2.0.11

    JavaEE源代码 struts2-core-2.0.11JavaEE源代码 struts2-core-2.0.11JavaEE源代码 struts2-core-2.0.11JavaEE源代码 struts2-core-2.0.11JavaEE源代码 struts2-core-2.0.11JavaEE源代码 struts2-core-2.0.11JavaEE源...

    JavaEE源代码 struts2-spring-plugin-2.0.11

    JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-...

    javaee-api-6.0-5

    java javaee-api-6.0-5

    JavaEE源代码 jaxen-1.1-beta-7

    JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-beta-7JavaEE源代码 jaxen-1.1-...

    javaee5-doc-api

    EJB 3.0是Java EE 5中的核心组件之一,它极大地简化了EJB的使用,减少了对XML配置的依赖。实体Bean(Entity Beans)采用了注解驱动,无需XML配置,大大降低了学习和使用的难度。会话Bean(Session Beans)也变得更加...

    JavaEE源代码 commons-logging-1.0.4

    JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-...

    JavaEE源代码 commons-collections-2.1.1

    JavaEE源代码 commons-collections-2.1.1JavaEE源代码 commons-collections-2.1.1JavaEE源代码 commons-collections-2.1.1JavaEE源代码 commons-collections-2.1.1JavaEE源代码 commons-collections-2.1.1JavaEE源...

    javaEE健康管理系统SSH-oracle(源码+数据库sql+lun文+视频齐全).zip

    javaEE健康管理系统SSH-oracle(源码+数据库sql+lun文+视频齐全)javaEE健康管理系统SSH-oracle(源码+数据库sql+lun文+视频齐全)javaEE健康管理系统SSH-oracle(源码+数据库sql+lun文+视频齐全)javaEE健康管理系统SSH-...

    JavaEE源代码 antlr-2.7.6rc1

    JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源...

Global site tag (gtag.js) - Google Analytics