首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Observer模式在J2EE中的实现(3)

Observer模式在J2EE中的实现(3)

使用JMS在J2EE中实现Observer模式消息系统允许分开的未耦合的应用程序之间可靠地异步通信。它使消息产生者和使用者之间的关系是一种"松耦合"的关系。对于使用者,它不在乎谁产生了消息,产生者是否仍在网络上以及消息是什么时候产生的。这就允许建立动态的,可靠的和灵活的系统。整个的子系统能被修改而不会影响系统的其他部分。其实,领域层和表示层的分离的目的也就在于此。
在消息系统中,通常有两种消息类型:1)发布/订阅(publish/subscribe)。发布/订阅消息系统支持一个事件驱动模型,消息产生者和使用者都参与消息的传递。产生者发布事件,而使用者订阅感兴趣的事件,并使用事件。产生者将消息和一个特定的主题(Topic)连在一起,消息系统根据使用者注册的兴趣,将消息传给使用者。2)点对点(Peer to peer)。在点对点的消息系统中,消息分发给一个单独的使用者。它维持一个"进入"消息队列。消息应用程序发送消息到一个特定的队列,而客户端从一个队列中得到消息。
在消息系统中,我们可以通过JMS和消息驱动Bean(Message-Driven Bean),用来实现应用程序各个部件之间的异步消息传递。对于Observer模式而言,我们会优先地选用发布/订阅(publish/subscribe)模型。在编写事件的生产者和事件的消费者代码的时候,我们可以直接使用JMS API来编写Producer和Consumer,但是如果事件的消费者位于EJB Tier时,最好采用消息驱动Bean(Message- Driven Bean)。因为消息驱动Bean通常配置成是一个特别的主题(topic)或队列的客户端,作为消息的使用者。它大大地简化了创建一个JMS使用者,创建和配置一个JMS消息使用者这些功能都交由EJB容器来做了。开发人员只需简单地实现消息驱动Bean的接口,配置给EJB服务器,用来创建一个接收消息的商业逻辑部件。另外,当事件的消费者同时有多个,我们可以使用MDB Facade模式来实现Observer模式。
图四:MDB facade模式MDB Facade模式实际上是Session Bean Facade模式的一个变种,因为MDB从本质上来说非常类似于一个无状态的Session Bean,只不过MDB没有remote接口和home接口。图四的MDB Facade模式也可以和Session Bean Facade模式结合起来使用,即一个MDB作为多个Session Bean的Facade,一个Session Bean作为多个Entity Bean的Facade。从而实现消息的传递。
代码细节可以参照本文的示范代码,它在BEA weblogic中运行通过。
返回列表