EJB 2.0消息驱动Beans开发消息驱动Beans和JMS
这次我们要讨论的话题是EJB2.0消息驱动Beans。 我将结合JMS的知识来演示一个具体的实例。文章所有的代码都可以在支持消息Beans的EJB服务上运行(Ejb2.0容器);另外你还需要一个支持JMS的消息服务器来控制消息队列。本文假设你了解企业级JavaBeans的知识。在这篇文章中我们将创建一个邮件消息队列系统。这个系统包括以下几个部分:
JMS Servser:一个JMS服务器,它将保存我们的邮件系统的消息队列。
JMS Queue: JMS队列,它将保存来自客户端的JMS消息。在我们的例子中,这个消息是一个映射消息(MapMessage),他允许我们存储有关被发出的邮件的"键/值"对信息。
Email Message Client:一个Email消息客户端,它将创建一个JMS消息然后把消息发送到JMS队列中。这个消息中包含了将要发送的邮件信息。
Email Message Drive Bean:一个Email消息驱动Bean负责接收JMS映射消息并把它发送出去。
http://www.matrix.org.cn/upload/article/a200311495538.gif
JMS 的结构在我们讲述消息驱动Beans之前,让我们先来谈谈JMS(Java消息服务)。我们知道现在有很多消息系统,每一个都有他们自己的API,这些消息系统提供了事件交换和数据异步的服务。作为一个程序员,我可以给消息服务器发送一些信息然后继续工作,而不必等待来自系统的响应。JMS API描述了一个标准的方法来访问几乎所有的消息系统,就像JDBC允许我们使用相同的API访问Oralce,Sybase和SQL Server 一样。 如同可以调用异步服务那样,我们从中获得额外的好处是程序之间有一个宽松的耦合,发送请求的代码和响应请求的代码是分离的。不同的客户端把消息发送到同一个指定的目的地;然后,接收者(Receiver)从目的地分离出消息并显示出来。下面让我们快速的了解一些JMS API的基本概念:消息映射域
JMS消息消息映射域
消息系统有几种运行模式。JMS API 提供了不同的域,他对应不同的模式。一个JMS提供者(provider)一个或多个域。两个、多个公共域是点对点和发布/订约。这两个域有下面的概念:Destination:对象客户端指定消息发送和接受的目的地Producer:一个客户端发送一个消息到一个目的地Consumer:一个客户端从目的地接受消息点对点(PTP)一个点对点应用有下面几个特征:
一个PTP提供者是一个发送者一个PTP消费者是一个接收者一个PTP目标是一个队列一个消息只能被一个接收者消费
发布/订阅(pub/sub)一个pub/sub应用有以下特征:A pub/sub producer is publisherA pub/sub consumer is a subscriber
A pub/sub destination is a topic
A message may have multiple subscribers
一个pub/sub提供者是一个发布者一个pub/sub消费者是一个订阅者一个pub/sub目标是一个主题一个消息可以有多个订阅者。
比如,一个邮件通信系统可以使用发布/订阅模式。每一个对邮件通信感兴趣的人都可以成为一个订阅者,当一个新的消息被发布后,这个消息会发送给每一个订阅者。