220 likes | 459 Views
消息驱动 Bean 介绍. ( Message Driven Bean ). 使用消息 Bean 的动机 1. 会话 Bean 和实体 Bean 都是使用 RMI-IIOP 协议访问的。 RMI-IIOP 算是传统的重量级的方法 虽然运用很广泛,但是还是有很多的情况对 RMI-IIOP 提出了一些挑战. 使用消息 Bean 的动机 2. Performance 性能:当服务器处理 RMI-IIOP 客户时,客户必须等待服务器完成服务才能返回结果,继续进行其他的处理
E N D
消息驱动Bean介绍 (Message Driven Bean)
使用消息Bean的动机 1 • 会话Bean和实体Bean都是使用RMI-IIOP协议访问的。RMI-IIOP算是传统的重量级的方法 • 虽然运用很广泛,但是还是有很多的情况对RMI-IIOP提出了一些挑战
使用消息Bean的动机 2 • Performance 性能:当服务器处理RMI-IIOP客户时,客户必须等待服务器完成服务才能返回结果,继续进行其他的处理 • Reliability 可靠性:当RMI-IIOP客户调用服务器时,服务器必须是正在运行着的。如果服务器或者网络崩溃,客户机就不能完成预期的操作multi • Support for multiple 多个发送者或接受者的支持:RMI-IIOP的限制是在任一给定的时刻只允许一台服务器和一台客户机对话。不允许广播事件
使用消息Bean的动机 3 • 消息机制可以代替远程方法调用,用于解决类似的问题.
使用消息Bean的动机 4 • 通过中间件层,消息发生者可以发送消息然后继续进行其他处理,当使用者完成时能够任意地通知处理反馈。这种方式称为异步程序设计asynchronous。 • 消息中间件(MOM):是指任意的支持消息机制的基础结构。 • Sonic MQ • IBM MQSeries • BEA Tuxedo/Q • Microsoft MSMQ
Java消息服务 1 • 每种消息中间件有自己的应用编程接口。 • 代码移植困难,对开发人员来说重新使用一个新的消息中间件就要学习其专用的编程接口
Java消息服务 2 • Java消息服务是一种消息机制标准 • 目的:消除不同MOM之间标准不统一的所带来的诸多不变 • Java消息服务分为2部分 1. 应用编程接口 API 2. 服务供应商接口 SPI
消息机制的方式 1 • 发布/订阅 (pub/sub) 订阅者注册它们感兴趣的特定事件的主题,发布者创建分布发送到所有订阅者的消息。 消息发生者不必硬编码来解指定特定的消息使用者,MOM系统会来维护一个订阅者列表. Distributed event driven processing model Persistent store
消息机制的方式 2 • 点到点方式(Point-to-Point):点对点方式是有多个消息的产生者,但只有一个消息的使用者。这种方式就是发布者直接发送消息到使用者或是一个集中队列。
Java消息服务API 1 • 定位Java消息服务驱动程序:通过查询JNID来查询所需要使用的特定的Java消息服务产品的驱动程序。就像使用JDBC驱动一样。此驱动程序称为连接工厂。 • 创建Java消息服务连接:类似于JDBC的Connection的功能。建立一个与JMS服务器的连接。
Java消息服务API 2 • 创建Java消息服务会话: Java消息服务会话是当发送和连接消息的时候使用的辅助对象,作为消息消息使用者和消息发生者的连接工厂,用来封装自己的消息 • 定位Java服务目的地。定位Java消息发送或者所经过的通道。
Java消息服务API 3 • 创建Java消息服务的发生者或是使用者:发送消息的Java消息服务对象称为发生者,接受消息的Java消息服务对象称为使用者。 • 发送或接收消息:发送/接受的消息有很多种不同的类型。
消息驱动Bean 1 • 消息驱动Bean是指能够接受JMS消息的特殊的EJB组件。 • 消息驱动Bean使用来自队列或主题的消息 • 客户不能通过调用组件接口来访问消息驱动Bean。只能通过使用Java消息服务发送消息到Bean
消息驱动Bean的主要特点 1 • 没有远程接口、本地接口、Home接口、本地Home接口。 • 仅有一个弱类型的商务方法:onMessage(),此方法接受JMS消息,这个消息可以是任意类型的消息—字节消息、对象消息、文本消息、流消息。。。 • 不具有返回任何值
消息驱动Bean的主要特点 2 • 不能够发送异常给用户 • 该Bean是无状态的 • 可以是持久/非持久的订阅者
Message Driven Bean Interface public interface javax.jms.MessageListener { public void onMessage(Message message); } public interface javax.ejb.MessageDrivenBean extends EnterpriseBean { public void ejbRemove()throws EJBException; public void setMessageDrivenContext(MessageDrivenContext ctx) throws EJBException; }
MDB Ingredients • Message Driven Beans implements both MessageDrivenBean and MessageListener interface. • Consistes of: • MessageDrivenBean class. • Deployment Descriptor. • Vendor Specific Files.
MDB Object Model <<interface>> java.io.Serializable <<interface>> javax.jms.MessageListener Comes with Java2 platform <<interface>> javax.ejb.EnterpriseBean <<interface>> javax.ejb.MessageDrivenBean Comes with EJB Distribution Bean Implement Class Written by developer
Message Driven Bean Life Cycle Does Not Exist 1: newInstance() 2: setMessageDrivenContext() 3: ejbCreate() ejbRemove() Pooled onMessage()