首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>J2EE>正文

J2EE 组件开发:什么是消息驱动的EJB

http://www.oklinux.cn  2008-01-20  ccidnet baocl  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

消息服务是一种在分布式应用之间提供消息传递服务的软件,具有可靠、异步、宽松结
合、语言中立、平台中立的特点,而且通常是可配置的。它的实现原理是:对发送者和
接收者之间传递的消息进行封装,并在分布式消息客户程序结合的位置加上一个软件处
理层。消息服务为消息的客户程序提供了一个接口,这个接口隔离了底层的消息服务,
使得各种不同的客户程序能够通过一个友好的编程接口方便地通信。
Java消息服务(Java Message Service,JMS)是一个Java API,它定义了消息的客户程
序如何以一种标准化的形式与底层的消息服务提供者交互。JMS提供了一种接口,底层消
息服务提供者通过该接口向客户程序提供JMS消息服务。JMS提供了点对点消息模式(Po
int-to-Point)和发布-订阅消息模式(Publish-Subscribe)。点对点消息模式通过一
个消息队列实现,消息的生产者向队列写入消息,消息的消费者从队列提取消息。发布
-订阅消息模式通过一个话题(Topic)节点构成的层次结构实现,消息的生产者向这个
层次结构发布消息,消息的消费者向这个结构订阅消息。
点对点消息模式具有如下特点:
每一个消息只有一个消费者。
消息的接收者和发送者之间不存在时间上的依靠关系。不论发送者发送消息时接收者是
否在运行,接收者都可以提取信息。
接收者对于成功处理的消息给出回执。
发布-订阅消息模式具有如下特点:
每一个消息可以有多个消费者。
向某个话题订阅的客户程序只能收到那些在它订阅之后发布的消息。为了接收到消息,
订阅者必须保持活动状态。因此,发布者和订阅者之间存在时间上的依靠关系。
JMS API在一定程度上放宽了对这种依靠关系的要求,答应创建持久性订阅(Durable S
ubscription)。有了持久性订阅,当订阅者不活动时发送的消息也能接收到。
EJB 2.0规范定义了一种新的EJB类型,即消息驱动的EJB(Message-Driven EJB,简称M
DB),它能够以EJB的形式实现JMS消息的接收者。消息驱动的EJB实现一组新的接口,这
组接口使得EJB能够异步地接收和处理JMS消息生产者发送到队列或话题的消息。EJB客户
程序的构造方式与普通JMS消息生产者的构造方式完全一样,也就是说,JMS消息生产者
不必知道消息的消费者是一个EJB。
相对于会话Bean和实体Bean而言,消息驱动的Bean最大的特点是客户程序不通过接口访
问Bean。与会话Bean和实体Bean不同,消息驱动的Bean只有一个Bean类。从某些方面看
,消息驱动的Bean类似于无状态会话Bean:
消息驱动的Bean不为特定的客户保留数据或对话状态。
一个消息驱动Bean的所有的实例都是等价的,这使得容器能够把消息指派给任意一个消
息驱动Bean的实例。容器能够建立消息驱动Bean的缓冲池,实现消息的并发处理。
一个消息驱动的Bean能够处理来自多个客户程序的消息。
消息驱动Bean的实例变量可以在处理客户消息期间包含一些状态信息,例如JMS连接、打
开的数据库连接,或者是对EJB对象的引用。当一个消息到达,容器调用消息驱动Bean的
onMessage()方法处理消息。onMessage()方法通常把消息定型(cast)成为五种JMS消息
类型之一,然后按照应用的业务逻辑的要求处理消息。
传递给消息驱动Bean的消息可能处于一个事务之内,这时,onMessage()方法内的所有操
作都属于该事务的一部分。假如消息处理结果被回退,则系统将再次投递该消息。
哪些时候应该使用消息驱动的Bean呢?会话Bean和实体Bean能够发送JMS消息,能够同步
接收消息,但不能异步接收。一些时候,为防止过多地占用服务器资源,在服务器端的
组件中,我们想要避免阻塞,这时,我们可以用消息驱动的Bean异步接收消息。
二、MDB体系结构
图一描述了消息驱动的Bean组件的基本体系结构。
在图一中,位于顶端的是javax.ejb.EnterpriseBean接口,它是所有EJB的基础接口。E
nterpriseBean接口派生出了javax.ejb.MessageDrivenBean接口,所有消息驱动的EJB类
必须实现javax.ejb.MessageDrivenBean接口。此外,消息驱动的Bean必须实现javax.j
ms.MessageListener接口。公用的、非最终的、非抽象的消息驱动的EJB,比如图一显示
的MyMessageDrivenEJBean,必须同时实现MessageListener接口和MessageDrivenBean接
口。消息驱动的EJB与其他类型的EJB不同,它们不把业务方法导出给客户程序,它们关
心的只是遵从EJB容器的接口要求。由于这个原因,消息驱动的Bean必须有一个不需要参
数的公用构造方法(ejbCreate()方法),而且不应该实现finalize()方法。
2.1 MDB接口
在消息驱动的Bean中,setMessageDrivenContext()方法用来把一个MessageDrivenCont
ext的对象实例传递给EJB,它是MessageDrivenBean接口定义中容器调用的第一个方法。
MessageDrivenContext对象封装了一个EJB消息驱动容器上下文的接口,支持消息驱动的
EJB实例访问容器提供的运行时消息驱动上下文
对于消息驱动的EJB来说,要害之一是要实现一个没有参数的ejbCreate()方法。当EJB容
器预备创建消息驱动EJB的实例时,它将调用这个方法。容器之所以决定创建某个EJB的
实例,可能是因为它要构造一个Bean实例的缓冲池,也可能是因为它接收到了客户的请
求。这个ejbCreate()方法和其他Bean上的EJB构造方法类似,属于EJB实现的一种非凡的
构造函数或初始化方法。
当EJB容器预备不让Bean实例继续处理客户程序的请求时,它就会调用消息驱动Bean的e
jbRemove()方法。何时在消息驱动的Bean上调用ejbRemove()方法由EJB容器单独决定,
不受EJB客户程序的任何约束。应当注重的是,容器并不保证一定调用ejbRemove()方法
。在正常操作时,容器会调用ejbRemove()方法;但是,当消息驱动的Bean向容器抛出了
系统异常时,不能保证ejbRemove()方法一定会被调用。由于这个原因,Bean开发者必须
按时检查和清除Bean分配的所有资源。
对于Bean开发者来说,最重要的任务也许是实现onMessage()方法。当一个异步消息必须
由Bean实例处理时,容器将调用onMessage()方法。onMessage()方法的参数是一个普通
的JMS javax.jms.Message的实例,消息驱动的EJB实例从这个Message的实例提取待处理

共4页: 上一页 1 [2] [3] [4] 下一页

上一篇:JSP生成静态页面-Tomcat提高性能之王道   下一篇:J2EE基础:Weblogic服务器体系结构介绍

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·J2EE基础:Weblogic服务器体系结构介绍
·J2EE综合--Java EJB容器的存取和实现
·J2EE综合--JAVA开发工具安装配置心得
·eclipse,J2EE入门学习心得
·新手入门:对J2EE初学者的学习流程介绍
·对J2EE开发中常用开源项目的介绍
·J2EE程序员应该掌握的Linux系统的知识
·Hibernate Struts的J2EE应用开发
·详细介绍构建高性能J2EE应用的十个技巧
·J2EE基础:Spring中事件处理的小技巧
·J2EE综合--总结java编程中的经验教训
·J2EE--关于JAVA的分页查询操作技术
·J2EE:教你提升JSP应用程序的七大绝招
·[J2EE] JNDI定义Oracle数据源的方法
·J2EE基础:步入J2EE架构和过程
·J2EE基础:开发第一个分布式的j2ee应用
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Java GUI中关于布局管理器的使用方法介
·Java编程交互管理工具:SecureJSH新特
·J2SE综合技术:使用Java网络启动部署软
·Java技术社区杂文 J2EE开发框架发展简
·J2EE基础:Java EJB容器存取和实现的说
·Java编程:实例分析J2ME网络编程的两种
·关于Java编程语言中EJB容器存取和实现
·J2EE中用RMI和CORBA进行分布式Java编程
·Java编程技巧 J2ME中应用程序的内存优
·介绍JSP中表单数据存储应用的一种通用
·J2EE中的业务逻辑和数据库访问决策说明
·深入讲解JSP 2.0下的动态内容缓存技术
  阅读排行
·J2EE基础:几种Portal技术的比较与评述
·J2EE综合:Struts上传多个文件的例子
·J2EE综合--关于权限设计的详细探讨
·J2EE综合--JAVA开发工具安装配置心得
·J2EE--关于JAVA的分页查询操作技术
·J2EE基础:在Struts 2中实现文件上传
·数据库相关--Hibernate的事务和并发
·Java源码分析:深入探讨Iterator模式
·J2EE基础:j2ee所包含的13种核心技术
·对J2EE开发中常用开源项目的介绍
·[J2EE] JNDI定义Oracle数据源的方法
·J2EE基础:Weblogic服务器体系结构介绍
·datatable动态添加列应当如何来实现
·J2EE综合--Java企业系统架构选择考量
·JSP/Servlet:J2EE开发环境配置个人总结
网摘收藏: