`
kylinsoong
  • 浏览: 240807 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EJB7: Message Driven Bean

阅读更多

在企业系统中需要使用消息传递,在企业系统中使用消息传递需要满足下面几个条件:

1 调用必须是支持异步的;

2 调用必须是可靠的;

3 调用可以支持有多个调用者和多个接受;

为什么消息传递在企业调运中能够满足上面三点要求?如下图:

 消息中间件,它类似于一个在发送者和接收者的中间缓存机制,发送调用请求和接收可以异步的工作,发送方发完消息就可以继续忙着执行自己的程序,并且不必等待消息的接受者完成消息所规定的任务,消息缓存在消息中间件中,接收方从消息中间中一个一个的取走消息,按部就班的一个个执行。

Java 消息服务(JMS)

      JMS 提供了统一的消息传递机制,以一种标准化的形式与底层的消息服务提供者交互,JMS 提供抽象的实现以统一的方式访问消息传递系统。依赖于JMS 的帮助,消息传递客户机在各个厂商的消息传递产品之间进行移植。

      JMS 共包含两方面的内容:JMS API 用于开发发送和接收消息的两端的应用程序,SPI(Service Provider Interface),服务提供者接口,用于集成各个厂商的消息中间件。

      JMS 提供了两种类型的消息传递模型:发布与订阅(publish-and-subscribe,pub/sub)以及点到点(point-to-point,p2p)。

发布与订阅(pub/sub)模型,如下图:



      pub/sub 目的是用于一对多或多对多的消息广播

      在pub/sub 模型中,一个消息传递客户机,也就是消息的生产者机,即发布消息的程序通过被称为Topic(主题)的虚拟信道将消息发送到多个订阅此主题的消息传递客户机,也就是消息的消费者,即订阅消息的程序

      pub/sub 模型可支持持久订阅(Durable Subscription),也就是订阅Topic的消息接收端从JMS 服务器上断开时,消息服务器有责任存储订阅程序丢失的消息;

点到点(p2p)模型,如下图:



      p2p 目的是用于一对一的消息通信;

      p2p 模型让消息传递客户机通过称为Queue(队列)的虚拟信道发送和接收消息;

      在p2p 模型中的消息由一位并且只能由一位接收方消费一次,也就是每个消息仅存在一个消费者;

      队列中的消息在缺省情况下是持久的;

JMS API (接收和发送消息)

用JMS API 发送或者接收一个消息需要以下几个步,如下图:



      1.定位JMS提供者:消息的客户端(发送者和接收者)首先需要访问消息中间件的具体提供者,需要使用ConnectionFactory实例来建立连接。用JNDI查找定位到ConnectionFactory的实例。

      2. 创建JMS连接:定位之后,开始创建连接。

      3.创建JMS Session:用JMS连接创建JMS Session对象, JMS Session对象可以用来创建JMS消息。

      4.定位JMS目的地: JMS目的地指向消息发送的通道,借助JNDI,我们能定位到JMS目的地。

      5.创建JMS生产者和消费者:如果需要发送消息,需要借助某个JMS的对象传递消息,这中JMS对象叫做JMS生产者,如果需要接收消息,需要借助某个JMS的对象叫做JMS消费者。我们用JMS Session创建JMS生产者和消费者。

      6.创建JMS消息:我们用JMS Session创建JMS消息。

      7.接收和发送消息:创建了JMS消息之后,最后我们用JMS生产者和消费者接收和发送消息。

API应用实例:(一个 p2p 发送消息实例)

  Step 1:初始化JNDI Tree 找到存储JNDI 的服务器,用JNDI lookup ConnectionFactory

Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY , "org.jnp.interfaces.NamingContextFactory");
props.setProperty(Context.PROVIDER_URL, "localhost:1099");
props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
Context ctx = new InitialContext(props);
QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("QueueConnectionFactory");

 Step 2: 创建JMS连接

QueueConnection conn = factory.createQueueConnection();

 Step 3 :.创建JMS Session

QueueSession session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);

 Step 4: 定位JMS目的地

Destination destination = (Destination) ctx.lookup("queue/kylindmb");

 Step 5:创建JMS生产者或消费者

MessageProducer producer = session.createProducer(destination);

Step 6:创建JMS消息

TextMessage msg = session.createTextMessage("Kylin Sonng First test Message Driver Bean");

Step 7:接收或发送消息

producer.send(msg);

 注意:以上JMS提供者是JBoss 4.3;发送或接收完消息要关闭session和connection

JMS 支持一下消息类型,这些消息类型都派生自Message 接口

      StreamMessage:消息包含Java 基本数值流,用标准流操作来顺序的填充和读取。

      MapMessage:消息包含一组名/值对;名称为string 类型,而值为Java 的基本类型。

      TextMessage:消息包含一个String。

      ObjectMessage:消息包含一个Serializable(可序列化)的Java对象;能使用JDK 的集合类。

      BytesMessage:消息包含未解释字节流,编码主体以匹配现存的消息格式。

      XMLMessage:消息包含XML内容。扩展TextMessage,类型的消息,XMLMessage 类型的使用,使得消息过滤非常便利。

消息驱动Bean MDB(Message Driven Bean )

      消息驱动Bean简单的说他就是一个能接收或能消费消息的接收者或消费者,所不同的是MDB是在EJB容器中消费和处理异步JMS 消息,这样可以把一些任务抽象出来交给容器中提供的基础功能去完成。

      有了MDB,我们可以形象的描绘出这样的场景:客户端借助JMS API发送消息,然后接收到该消息的MDB被这个消息所驱动,开始运行,处理这个消息,这个过程好像我们按下了一个按钮,按钮后面的事件程序就开始运行,如下图:



 一个MDBean实例

http://kylinsoong.iteye.com/blog/851678

  • 大小: 3.9 KB
  • 大小: 7.5 KB
  • 大小: 5.9 KB
  • 大小: 21.7 KB
  • 大小: 5.1 KB
0
0
分享到:
评论

相关推荐

    EJB3.0开发Message Driven Bean

    import javax.ejb.MessageDriven; @MessageDriven(activationConfig={ @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"), @ActivationConfigProperty(property...

    EJB3.0开发Message Driven Bean.rar

    - `@MessageDriven`: 这是定义一个MDB的基本注解,它指明了bean的角色。你需要在类上添加这个注解,并指定消息驱动接口,例如`@MessageDriven(name = "MyMDB", activationConfig = { @ActivationConfigProperty...

    EJB3图文教程之开发Message Driven Bean

    EJB3图文教程之开发Message Driven Bean

    java源码:Message-Driven Bean EJB实例源代码.zip

    在EJB项目中,我们需要在ejb-jar.xml或@MessageDriven注解中配置MDB的相关属性,如消息监听接口、JMS目的地类型(队列或主题)、JNDI名称等。 **4. MDB的源码分析** 在提供的源码中,我们可能会看到以下关键组件: ...

    基于java的开发源码-Message-Driven Bean EJB实例源代码.zip

    基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-...

    Message-Driven Bean EJB实例源代码

    - 使用`@MessageDriven`注解标记该类,指定JMS目的地类型(队列或主题),以及其他配置属性。 - 在ejb-jar.xml或元数据注解中配置MDB,如JNDI名称、消息驱动适配器等。 6. **源代码解析**: 压缩包中的源代码...

    Message-Driven Bean EJB实例源代码.7z

    7. **部署**:在EJB 3.1及更高版本中,MDB的部署变得更加简单,可以使用注解(如`@MessageDriven`)来代替XML配置,进一步简化了开发过程。 在这个源代码实例中,你可能会看到以下几个关键部分: 1. **MDB类**:...

    基于Java的实例源码-Message-Driven Bean EJB实例源代码.zip

    2. **编写MDB类**:MDB类需要实现`javax.ejb.MessageDrivenBean`接口或者继承`javax.jms.MessageListener`接口,并标注`@MessageDriven`注解。这个注解包含了JMS目的地的配置信息,如目的地类型、激活配置等。 3. *...

    EJB实验报告。实验一:使用Session Bean和JDBC技术完成登录和注册功能

    实验三关注的是Message-Driven Bean(MDB),它用于处理来自消息队列的消息。实验目标是: 1. 在登录或注册成功后,利用MDB向客户端发送确认消息。 2. 配置MDB以监听特定的消息队列,接收来自Session Bean的通知。 3...

    基于Java的Message-Driven Bean EJB实例源代码.zip

    Java Message-Driven Bean(MDB)是企业级Java(EJB)技术的一部分,它主要用于处理Java消息服务(JMS)中的消息。在Java EE环境中,MDBs是无状态的bean,它们作为后台服务运行,监听消息队列或主题,并对到来的消息...

    Message-Driven Bean EJB实例源代码.rar

    import javax.ejb.MessageDriven; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven(name = "MyMDB", activationConfig = { @ActivationConfigProperty(propertyName = ...

    基于java的Message-Driven Bean EJB实例源代码.zip

    - 使用`@MessageDriven`注解来声明bean是一个MDB,并指定JMS配置,如目的地类型(队列或主题)、消息驱动适配器等。 - 可以通过`@ActivationConfigProperty`注解进一步配置MDB的行为,例如设置消息选择器、最大...

    基于Java的源码-Message-Driven Bean EJB实例源代码.zip

    Java中的Message-Driven Bean (MDB) 是Enterprise JavaBeans (EJB) 规范的一部分,用于处理JMS(Java Message Service)消息。这个压缩包“基于Java的源码-Message-Driven Bean EJB实例源代码.zip”显然包含了实现...

    基于Java的实例开发源码-Message-Driven Bean EJB实例源代码.zip

    "基于Java的实例开发源码-Message-Driven Bean EJB实例源代码.zip" 这个标题揭示了本次讨论的核心内容,即一个关于Java编程的实例项目,特别是涉及了Java企业版(Java EE)中的Message-Driven Bean(MDB)组件。...

    EJB详解 sessionbean entitybean MDB

    - **Message-Driven Bean(MDB)**:专门处理消息的EJB,主要用于异步处理。它监听消息队列(JMS,Java Message Service),在消息到达时自动触发业务处理。 2. **生命周期管理**: - 容器负责EJB的创建、初始化...

    ejb状态bean和消息bean的源代码

    - `@MessageDriven` 注解:标记Bean为消息驱动。 - `@ActivationConfigProperty`:配置与JMS资源相关的属性,如目的地类型、目的地名称等。 - 实现`MessageListener`接口或使用`@Inject` JMS消息。 例如: ```java ...

    EJB3中MessageDrivenBean知识

    在EJB3中,创建一个MDB非常简单,只需要在bean类上添加`@MessageDriven`注解,并指定消息驱动的类型,如`@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")`来定义...

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

    - **消息驱动Bean (Message Driven Bean)**:用于接收来自消息队列的消息。 #### 3. 会话Bean详解 - **无状态会话Bean (Stateless Session Bean)**: - 没有客户端之间的状态维护。 - 每次方法调用都会创建一个...

Global site tag (gtag.js) - Google Analytics