`
yingfang05
  • 浏览: 121552 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

以连接器为基础的消息驱动Bean

    博客分类:
  • ejb3
阅读更多
虽然以JMS 为基础的MDB 已经证明非常有用, 它也有限制.也许最大的限制就
是EJB提供商支持仅一个或少数的JMS提供者(通常只有一个).在前面的EJB2.1
中,大多数厂商只支持他们自己的JMS提供者,并且没有其它的.显然,这样的限制
是你的选择:如果你的公司或公司的一部分使用一个JMS提供者,它不被EJB提供
商支持,你将不能够处理JMS提供者传递过来的消息.
  • 绕过这个JMS通道,消息的路由从一个JMS提供者到另一个,这是一个EJB规范
  • 外的一个习惯上的解决方法.
    问题的本质是复杂的并且要求对事务管理有一个深入的理解.简言之,对于MDB,
    消息被JMS提供者传递到MDB,并且所有的工作由MDB执行(例如,使用JDBC,调用其
    他Bean上的方法,等等),必需是同一事务的一部分,被EJB容器初始化.这需要
    EJB 容器事前知道信息递送即将来临以便在信息实际上被递送之前,它能开始处
    理. 不幸地, JMS API 不支援这种功能.因此在早期的EJB 中, JMS 提供者必
    须执行和每个EJB 厂商的订制整合.整合的花费是昂贵的(业务),所有旧的
    EJB2.0厂商一般选择少许的集成JMS提供者.
    另一个JMS为基础的MDB限制是JMS程序模型的限制;没有其它的消息系统支持.
    虽然JMS是非常有用的,不过它不是唯一可用的消息系统.SOAP,Email,CORBA消息,
    用于ERP系统中的所有消息系统(SAP,PeopleSoft,等等),遗留下来的消息系统,
    如其它的非JMS消息系统.
    EJB 3.0(和2.1) 支持扩展,更多公开定义的消息驱动Bean,允许他们服务任何
    种类的消息系统从任何厂商.唯一的要求是新类型的消息驱动Bean上附着消息驱
    动Bean的生命周期.EJB 厂商能建立代码来支持新的消息系统(一些其它的JMS),
    但是,他们必需也一定支持任何以JCA 1.5为基础的消息驱动Bean.
    JCA提供一个标准的服务器提供接口(SPI)允许任何的IES插入到J2EE容器系统.
    连接器结构的1.0版本仅仅应用在请求/响应资源,J2EE组件(EJB或servlet/Jsp)
    初始化请求.当前版本为1.5,要求j2EE1.4或更高,更加全面并且可以开作在任意
    的异步消息系统中. 在这倦的系统中,J2EE组件等候消息的到达,代替初始化交
    互同EIS;EIS的初始化将互通过消息的分离.
    JCA1.5明确定义一个消息的契约同消息驱动Bean的连接.它定义一个EJB容器和
    一个异步连接,所以消息驱动Bean可以自动处理来自EIS的信息.MDB以一个异步
    连接为基础,实现一个指定的消息接口的定义通过连接器自身.代替实现
    javax.jms.MessageListener接口.MDB实现一些其它类型的接口指定到EIS.例如,
    第三章中介绍的一个假设的邮件连接,允许MDB处理类似的以JMS为基础的JMS消
    息.电子邮件连接器从厂商X 购买和传递一个JAR文件被叫做资源档案
    (RAR).RAR 包含所有的连接代码和必需的部署描述符植入到EJB 容器系统.
    它也定义了开发者使用的用于创建一个电子邮件的MDB所需的接口.这是一个假
    设的电子邮件消息接口,他必需实现一个电子邮件的MDB:
    package com.vendorx.email;
    public interface EmailListener
    {
    public void onMessage(javax.mail.Message message);
    }
    Bean类实现这个接口,负责处理电子邮件连接器递送的消息.下面的代码显示了
    一个MDB实现EmailListener 接口和处理电子邮件:
    package com.titan.email;
    @MessageDriven(activationConfig={
    @ActivationConfigProperty(
    propertyName="mailServer",
    propertyValue="mail.ispx.com"),
    @ActivationConfigProperty(
    propertyName="serverType",
    propertyValue="POP3 "),
    @ActivationConfigProperty(
    propertyName="messageFilter",
    propertyValue="to='submit@titan.com'")})
    public class EmailBean implements com.vendorx.email.EmailListener {
    public void onMessage(javax.mail.Message message){
    javax.mail.internet.MimeMessage msg =
    (javax.mail.internet.MimeMessage) message;
    Address [] addresses = msg.getFrom( );
    // continue processing Email message
    }
    }
    在这个例子中,容器调用onMessage()传递一个JavaMail Message对象,那个代表
    一个email消息包含MIME附件.然而,消息接口通过使用连接器为基础的MDB没有
    使用onMessage().方法名和方法签名可以是适当的EIS;它甚至可以有返回类型.
    例如,一个连接器可以为SOAP开发处理请求/应答形式的消息.这个连接器可以使
    用ReqRespListener定义通过XML消息的Java API.SOAP消息API由sun制定,它不
    是J2EE平台的一部分:
    package javax.xml.messaging;
    import javax.xml.soap.SOAPMessage;
    public interface ReqRespListener {
    public SOAPMessage onMessage(SOAPMessage message);
    }
    在这个接口中,onMessage()有一个SOAPMessage类型的返回值.这意谓EJB 容器
    和连接器负责把应答信息协调回到寄件人. (或者到一些部署描述符中定义的目
    的地).除了支持不同的方法信号外,消息接可能存在多个方法为处理不同种类的
    消息使用相同的MDB.新的消息驱动Bean无限制的被EJB容器系统支持.真正美好
    的是以连接器为基础的MDB完成的跨跃多个EJB厂商,因为所有的提供商必需支持
    他们.如果以使用连接器为基础的MDB同提供商A和过后你想改变提供商为B,你可
    以继续使用相同的连接器为基础的MDB,不会出现问题.
    活动配置属性使用非JMS为基础的MDB依赖连接器类型和它的请求.让我们看一个
    例子:
    @MessageDriven(activationConfig={
    @ActivationConfigProperty(
    propertyName="mailServer",
    propertyValue="mail.ispx.com"),
    @ActivationConfigProperty(
    propertyName="serverType",
    propertyValue="POP3"),
    @ActivationConfigProperty(
    propertyName="messageFilter",
    propertyValue="to='submit@titan.com'")})
    我们在前面谈论过的@ActivationConfigProperty.如同你看到的前面的例子,任
    何name/value对被这个元数据支持,因此,它可以很容易的支持邮件指定的配置
    为这种连接器类型.
    分享到:
    评论

    相关推荐

      java bean用户登录系统

      1. **公共构造器**:Java Bean至少有一个无参数的构造器,以便在运行时创建Bean实例。 2. **属性**:Bean通常包含一些封装的数据,表现为public的get和set方法,这些方法用于访问和修改属性值。 3. **事件**:Java ...

      模拟hibernate根据表生成Java bean文件

      - 可能需要熟悉数据库连接池和JDBC驱动的使用。 通过这个工具,开发者可以避免手动编写大量的Java Bean代码,提高开发效率,同时减少因手动操作而可能出现的错误。在实际项目中,结合Maven或Gradle的生命周期,可以...

      Servlet+EJB3源代码

      `@MessageDriven`注解用于声明一个Bean为消息驱动,并可以通过`@ActivationConfigProperty`配置与JMS资源的连接。 在Servlet和EJB3的整合中,Servlet通常作为前端控制器,负责接收HTTP请求,然后调用相应的EJB方法...

      Spring开发用到的所有Jar与MySQL驱动

      在Spring开发过程中,依赖的库和数据库驱动是项目的基础组件,它们构成了Spring MVC框架和MySQL数据库连接的关键元素。以下是对给定文件中涉及到的每个组件的详细解释: 1. **Spring框架组件**: - `org.spring...

      JMS侦听器pdf

      一旦有新的消息到达,侦听器会捕获这些消息,并将它们转发给预先定义好的会话Bean或消息驱动Bean来执行相关的业务逻辑。 #### 三、配置JMS侦听器的步骤 **3.1 前置条件** 为了能够成功配置JMS侦听器,需要确保以下...

      Java提高,swing,jdbc,bean

      在Java高级学习中,Swing提供了构建桌面应用的能力,JDBC使得Java能够高效地与数据库进行通信,而Java Bean则为数据的封装和组件化提供了标准。这三者的熟练掌握将极大提升Java开发者在桌面应用和企业级开发中的专业...

      MQjava基础编程.pdf

      文档中对MDB的提及说明了在Java EE环境中使用消息驱动Bean作为消息消费者的一种方式。 8. MQ编程示例: 文档中给出了一个使用Java进行MQ消息发送的示例代码,通过创建MQ连接和队列管理器,并使用MQMessage和...

      spring框架配置bean的高级属性

      这里配置了一个名为`dataSource`的数据源Bean,使用的是C3P0连接池实现。具体配置项包括: - `driverClass`: 数据库驱动类名。 - `jdbcUrl`: 连接数据库的URL。 - `user`和`password`: 数据库用户名和密码。 - `max...

      J2EE1.4中文版指南.zip

      - **连接器架构**:允许与外部系统集成,如ERP或CRM系统。 - **服务组件**:如JMS(Java Message Service)用于异步通信,JTA(Java Transaction API)处理事务管理。 **2. EJB 2.1** J2EE 1.4 引入了EJB 2.1规范...

      EJB3.0实例教程

      - 包括创建消息驱动Bean实例、设置消息监听器等内容。 #### 第六章:实体Bean (Entity Bean) - **PERSISTENCE.XML配置**: - 介绍了如何配置PERSISTENCE.XML文件来定义实体Bean的数据持久化策略。 - 包括设置...

      j2ee培训课件(基础,必学)

      EJB是J2EE的核心组件,提供了三种类型:会话Bean(Session Beans)处理客户端交互,实体Bean(Entity Beans)映射数据库中的持久性数据,消息驱动Bean(Message-Driven Beans)用于处理JMS消息。 4. **JavaServer ...

      JMS1.1规范中文版

      - **与EJB组件模型的关系**:EJB组件模型中的会话Bean和消息驱动Bean可以直接使用JMS进行消息通信。这是J2EE中消息传递的一种常见方式。 - **与Java事务API (JTA) 的关系**:JTA提供了事务管理功能,与JMS一起使用时...

      EJB3.0实例教程(中文版)

      - **消息驱动Bean的基础**:介绍消息驱动Bean的基本概念和工作原理。 #### 六、实体Bean(Entity Bean) - **实体Bean的组成文件Persistence.xml配置**:说明实体Bean所依赖的Persistence.xml文件的配置方法。 - **...

      JBOSS EJB3.0实例教程

      - 消息驱动Bean用于处理来自消息中间件的消息。 - 适用于异步消息处理。 #### 六、实体Bean(Entity Bean) **6.1 实体Bean的组成文件PERSISTENCE.XML配置** - `persistence.xml`文件定义了实体Bean的数据持久化策略...

      J2EE基础课件

      EJB分为三种类型:会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean(Message-Driven Beans)。 **5. JDBC与JNDI** JDBC(Java Database Connectivity)是Java访问数据库的标准API,用于执行SQL...

    Global site tag (gtag.js) - Google Analytics