(计算机软件与理论专业论文)ejb容器集群系统设计与原型实现.pdf_第1页
(计算机软件与理论专业论文)ejb容器集群系统设计与原型实现.pdf_第2页
(计算机软件与理论专业论文)ejb容器集群系统设计与原型实现.pdf_第3页
(计算机软件与理论专业论文)ejb容器集群系统设计与原型实现.pdf_第4页
(计算机软件与理论专业论文)ejb容器集群系统设计与原型实现.pdf_第5页
已阅读5页,还剩124页未读 继续免费阅读

(计算机软件与理论专业论文)ejb容器集群系统设计与原型实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 本文所涉及项目主要针对在基于j 2 e e 平台规范的应用服务器中提供e b 容 , 器集群的问题。陈统采用了面向对象的系统分析与设计方法和迭代式软件过程。 依据e m 容器集群系统的总体用例图场景分析,得到基于全局名字服务、基于 、一 智能主接口存根以及基于全局智能远程接口存根的三种集群策略0 针对基于全局 名字服务调用场景的集群系统,在已有的开放源码局部名字服务基础上,通过设 计集群支持服务扩展原始名字服务功能以支持全局名字空间管理。从而利用全局 名字服务特性实现集群需求。采用该策略的集群系统设计完全采用了规范的分析 设计方式,先依据用例场景分析形成基本类和类方法,然后再不断精化,并对初 步设计产生的类应用设计模式,阪得最终具有良好的可扩展性与灵活性,最终用 u m l 工具表达了该场景集群系统的静态结构模型和动态行为模型,使系统成为 一个比较完整的产品原型另外,为了能支持从智能主接口层次上以更小的集群 粒度来支持e j b 容器集群,并为将来在该层次上实现支持r m i i i o p 的容器集群 作预研准备,本文还同样用面向对象的分析方法,产生了该策略的系统详细用例 及其基本场景分析,巨于该分析,用快速原型化的方法,面向功能实现可行哇! 一 构造了一个在r m i 通信机制上的基于智能主接口存根的快速可行性原型a j 本文 力图为e b 容器系统的实现提出一种设计和实现范例,希望能为国产的j 2 e e 中 间件产品提供一些集群实现上的基本技术。 关键词 j 2 e e 应用服务器,e j b 容器集群,全局名字服务,智能主接口存根 a b s 仃a c t t h ei n t e n t i o no ft h et h e s i sa n dt h er e l a t e ds o f t w a r e p r o j e c t i st o p r o v i d e s o m e s o l u t i o n st oa d d c l u s t e r i n gf u n c t i o n a l i t yt ot h ej 2 e ep l a t f o r ms p e c i f i c a t i o nc o m p l i a n t m i d d l e w a r ep r o d u c t s i nt h ec o u r s eo f m o d e l i n ga n dd e v e l o p i n gt h es y s t e m ,w ea p p l y t h eo b j e c t - o r i e n t e ds y s t e ma n a l y s i sa n d d e s i g nm e t h o d sw i t ha ni t e r a t e s o f t w a r e p r o c e s s b a s e do nt h e a n a l y s i s o ft h eo v e r a l lu s ec a s e sf o r c l u s t e r i n g e j b c o n t a i n e r s ,w ep r e s e n tt h r e ec l u s t e r i n gs c e n a r i o s :g l o b a ln a m i n gs e r v i c eb a s e d , s m a r th o m ei n t e r f a c es t u bb a s e da n ds m a r tr e m o t ei n t e r f a c es t u bb a s e ds c e n a r i o s f o rt h eg l o b a ln a m i n gs e r v i c eb a s e ds o l u t i o n ,b a s i n go u rp r o t o t y p eo ns o m eo p e n s o u r c el o c a ln a m i n gs e r v e r ,w ei m p l e m e n tt h ec l u s t e r i n gr e q u i r e m e n t sb yd e s i g n i n ga c l u s t e rs u p p o r ts e r v i c et oe x t e n dt h eo r i g i n a ll o c a ln a m i n gs e r v i c et om a i n t a i ng l o b a l n a m i n gs p a c e s t a n d a r d a n df o r m a la n a l y s i sa n dd e s i g ne f f o r t sa r ep u ti nt h i ss o l u t i o n , v i z ,i na ni t e r a t ep r o c e s s ,w ef i r s tr o u g h l yd e f i n et h eb a s i cc l a s s e sa n d t h e i rm e t h o d s , r e f i n et h e mo nt h ef l y , a n da p p l yd e s i g np a t t e r n st ot h e m ,s oa st om a k et h ed e s i g n m o r ee x t e n s i b l ea n df l e x i b l e , a n de v e n t u a l l y , w ed o c u m e n tt h es t a t i cs t r u c t u r em o d e l a n dd y n a m i cb e h a v i o rm o d e lw i t ht h eu m la r t i f a c t s s u c h a s y s t e m i sn o wa p r o t o t y p ef o r t h ef i n a lc o m m e r c i a lp r o d u c t a sf a ra si ti sc o n c e r n e d w i t hs u p p o r t i n g c l u s t e r i n ge j bc o n t a i n e r sw i t h af i n e rg r a n u l a r i t yb yu s i n gs m a r th o m e i n t e r f a c es t u b s c e n a r i o ,a sw e l la sp r e p a r i n gf o ri m p l e m e n t i n g t h ec l u s t e ro v e rr m i i i o pi ns u c ha s c e n a r i o ,w ef i r s tu s eo b j e c t - o r i e n t e da n a l y s i sa p p r o a c ha sw e l lt oi l l u s t r a t et h eb s e c a s e sa n dt h ee v e n tf l o wa n ds u c c e s ss c e n a r i o si ne a c hc a s ef o rd e p i c t i n gt h e r e q u i r e m e n t s o fs u c hs o l u t i o n ,b a s e do nw h i c h ,i no r d e rt or e a l i z ea l lt h eb a s i c f u n c t i o n ,v i ar a p i dp r o t o t y p i n gm e t h o d ,w ec o n s t r u c taf e a s i b i l i t yp r o t o t y p e o fi to v e r 啪w ea r et r y i n gt op r e s e n tap a r a d i g mo fi m p l e m e n t a t i o no f t h ee j bc o n t a i n e r c l u s t e rs y s t e mi nt h et h e s i s ,w i t ht h eh o p et h a to u re f f o r t sc a n b eu s e f u lf o ra d d i n gt h e c l u s t e r i n gf u n c t i o n a l i t yt ot h em i d d l e w a r ep r o d u c t s o fc h i n a k e vw o r d s j 2 e ea p p l i c a t i o ns e r v e r ,e j bc o n t a i n e rc l u s t e r ,g l o b a ln a m i n gs e r v i c e , s m a r tt f o m ei n t e r f a c es t u b l 。- ,。_ ,- _ _ _ - _ _ _ _ - _ _ _ _ _ _ - _ _ - - _ _ _ _ _ _ _ - _ _ _ _ _ - _ 。_ _ _ _ _ _ 。_ - _ i _ _ _ _ _ _ _ _ _ _ - - - - _ _ - 。_ _ _ 。一。”。“一一 第1 章研发背景 1 1 引言 第1 章研发背景 本文主要对从1 9 9 9 年4 月开始,笔者所从事的j 2 e e 平台实现尤其是从2 0 0 0 年开始进行的e j b 容器集群等研究工作的一些积累做出陈述。全文重点关注对 e j b 容器集群的需求分析、系统概要设计和原型系统的详细设计与实现。正如后 面分析国内外发展动态与现状所描述,关于e j b 容器的集群问题,在商品化的 j 2 e e 应用服务器产品中己经比较成熟,但是各个公司都将该技术作为一个本身 产品的专有技术与卖点,因此对于国内中间件厂商而言,必须自主定义集群需求 并实现,本文及相关的研究对于国产1 2 e e 应用服务器提供企业级的集群支持可 以起到一定的推动作用。 本文在组织上,第1 章作为引言与概论,给出了e j b 容器集群研究所基于的 技术背景,一方面为实际的设计实现提供技术基础,另方面明确整个e j b 容 器集群研究开发的整体状态与重要性。然后按照典型的软件开发过程,第2 章用 u m l 的用例图和其它工具描述了系统的总体需求以及由总体需求得到的基于全 局名字服务和基于智能主接口存根的两种不同系统概要设计。第3 章首先用u m l 工具主要是类图和顺序图,表达了基于全局名字服务的集群系统详细设计,对其 实现做出了简要说明;然后采用传统方式,描述了基于智能主接口存根的快速可 行性集群原型设计与实现。结束语对全文做出了总结,并提出了一些需要改进和 在完整产品化的系统中需要注意的问题,同时提出了关于集群的一些可能研究方 向。 1 2 基础技术背景 1 2 1j 2 e e 平台 1 概念 j 2 e e ( i a v a2e n t e r p r i s ee d m o n l 是美国s u n 公司推出的一种全新概念的模型 与传统的互联网应用程序模型相比有着不可比拟的优势。当今许多企业都需要 第l 章研发背景 扩展他们的业务范围,降低自身经营成本,缩短他们和客户之间的响应时间这就 需要存在一种简捷,快速的服务。典型的说,提供这些服务的应用软件必须同企 业信息系统( e i s ) 相结合,并提供新的能向更为广阔的用户提供的服务。这些 服务要具备以下的特点: a 高可用性:来满足现在的全球商业环境 b 安全性:保护用户的隐私和企业数据的安全 c 可依赖性和可扩展性:保证商业交易的正确和迅捷 通常这些服务是由分布的应用程序组成的,包括前端数据端和后端数据源以 及它们之间的一层或几层,这些中间层提供了把商业功能和数据与e i s 相结合的 功能。这些中间层把客户端从复杂的业务逻辑中分离出来,利用成熟的i n t e m e t 技术使用户在管理上所花费的时间最小化。j 2 e e 降低了开发这种中间层服务的 成本和复杂程度,因而使得服务可以被陕速的展开,并能够更轻松的面对竞争中 的压力。 1 2 e e 通过定义一种标准的结构来实现它的优势,如下: a 1 2 e e 应用编程模型一种用于开发多层次,瘦型客户用户程序的标准 设计模型 b 1 2 e e 平台个标准的平台,用来整合1 2 e e 的应用程序,指定一系列 的接口和方法 c j 2 e e 兼容性测试套件一套兼容测试组件,用来检测产品是否同f f 2 e e 平台兼容 d j 2 e e 参考实现用来示范j 2 e e 的能力 2 j 2 e e 应用程序模型 1 2 e e 是被设计为顾客,雇员,供应商,合作者提供企业级服务,这样的应 用程序天生具有复杂性,要访问各种类型的数据并分发于大量的客户端。为了更 好的控制,管理这些应用程序,支持各种各样用户的商业功能要在中间层引入, 中间层描述了一个被企业的信息技术部门紧紧控制的环境。1 2 e e 应用程序依靠 于e i s 层来存储企业的商业数据。这些数据和用来管理它的系统是企业中的核 心。双层结构( c l i e n t s e r v e r ) 应用程序模型许诺将提高伸缩性与更广阔的功能,但 不幸的是直接向用户提供e i s 服务的复杂性和每台用户计算机上安装和维护业 2 第1 章研发背景 务逻辑所引起的管理上的问题成了很大的限制。而这些双层结构中的限制在三层 结构中己不存在了。 如今要求既开发服务的商业功能,还要开发访问数据库和其它资源的代码, 这是很复杂的,因为每一种多层结构的服务器都有它自己的应用模型,因此组建 一直富有经验的开发队伍将是困难的。另外,随着服务规模的扩大,为了降低开 支和加快响应速度,也要经常对其基层代码进行修改。j 2 e e 应用模型定义了一 种建筑模型来让多层应用程序实现服务,并消除了以上的问题,提供了可伸缩的, 易访问的,易于管理的方法。 j 2 e e 应用模型把实现多层结构服务的工作划分为二部分:开发者实现商业 和表达逻辑,以及由1 2 e e 平台提供的标准的系统服务。开发者可以依赖于这个 平台为开发中间层服务中遇到的系统级硬件问题提供解决方案 3 j a v a 技术基础 1 2 e e 应用程序模型起始于j a v a 程序语言和j a v a 虚拟机,它们提供的不断提 高的可移植性,安全性和开发人员能力的提高是应用程序模型的基础。应用程序 模型通常包括j a v ab e a n 组件模型,j a v ab e a n 是的为普通功能编写基于1 a v a 技 术的代码更加容易,利用j a v a b e a n 的开发工具可以可视的定制,组合这些组件。 4 安全性 当其它的应用程序模型需要在每个程序中有特定平台的安全性时,j 2 e e 平 台环境使在开发时安全约束便已定义了。1 2 e e 平台定义了一种标准的公开的存 取控制规则,当程序在企业平台上开发时就己被程序师定义和解释了。1 2 e e 也 需要提供一个标准的注册机制以便应用程序不用将这些注册机制和逻辑相混合, 相同的工作要执行于大量的不同的环境中而并不需要改变源代码。例如:j 2 e e 应用程序开发人员可以指定几个安全级别( 如,u s e r ,s u p e r u s e r ,a d m i n i s t r a t o r ) , 于是他们写出代码来检查当前用户权限的级别当用户访问数据时。在开发阶段, 开发人员赋予多组用户适当的安全级,使应用程序能够容易的判断限制级在执行 限制操作之前。 5 中间层 j 2 e e 应用程序模型的一个主要优点便是有中间层的多层应用程序。在j 2 e e 平台,中间层商业功能是由企业j a v a b e a n 实现的。这些企业b e a n 允许服务开发 第1 章研发背景 者集中于业务逻辑,并且让e y bs e r v e r 处理传送稳定的,可升级服务的复杂工作。 j a v as e r v e r p a g e 技术和s e r v l e t 向客户层提供了易于访问的i n t e m e t 型服务的中间 层功能。j s p 技术使用户接口开发者更加容易的提供向任何浏览器用户提供动态 页面的服务。s e r v l e t 让基于j a v a 技术的开发者有更大的自由来在j a v a 语言中提 供完全的动态服务。 6 客户层 j 2 e e 平台支持几种类型的客户。许多1 2 e e 服务被设计为浏览器用户服务, 这些服务通过动态生成h t m l 页和表单来同客户端实现交互,而j s p 和s e r v l e t s 是通过让这些商业数据通过某种方式格式化,使客户端更容易来同它工作。这些 客户端可以是运行于浏览器中的j a v aa p p l e t 和基于j a v a 技术的程序。要注意的 是安全是多层结构的关键部分,在j 2 e e 中安全性总是通过平台和管理员来解决 的。在大多案例中,服务方或客户方都不需要开发者与安全逻辑。 7 基于h t m l 页的客户 在j a v a 2 中可以实现向用户的浏览器直接提供动态h t m l 页的服务,在j a v a s e r v e r p a g e 技术中通过在h t m l 页中插入j a v a 代码动态生成页是一种很容易的 事情。在一些例子中,某些服务需要一些综合的代码,者可以通过从j s p 中调用 j a v a b e a n 的方法来实现。 8 j 2 e e 声明 j 2 e e 应用程序模型的一个重要的目标就是使应用程序最小化。实现这一点 的一种方法是提高在j 2 e e 平台上运行普通任务的负担,这些普通任务包括强制 一个应用程序的安全目标,执行它的交易处理,链接它所需要的组件。j 2 e e 提 供了一种简单的,公开的方式来说明这些行为。这些说明被分散的放在各部分代 码中和开发描述中,开发描述是应用程序包的一部分,这些基于x m l 的说明使 应用程序开发者不用修改任何组件就可以改变应用程序的作用。j 2 e e 应用模型 为中间层应用程序提供了编译一次,任意运行的特点( w r i t eo n c e ,r u n a n y w h e r e ) , 这种标准模型最小化了培训开发人员的费用。j 2 e e 应用程序模型通过在建立多 层应用程序中最小化其复杂程度,为简化和加速应用程序的开发迈出了重要的一 步。 4 第l 章研发背景 知蝌端0 拶 l 曛 艮。 ls 盘t蝴船m # b w盎糌钕“蜘“ l 毪 h _ i 霹国。j l 伟 嘲 lr 刚蓍酬;瀵荆警削隧 l _“ 0 释群 f p 群i 。i i i 。i “i “。“ l h 蝴躲 i :黼 - 谢$ 艇: c 缸鳞静耐瓣凇 幽 ; 一t 川樾 瑚蝣、 l 1 2 2e j b 和e j b 容器 1 2 2 1 简介 圈1 1j 2 e e 平台体系结构图 e j b 规范定义了j a v a 的服务器端组件模型。由于服务器端组件缺乏或很难构 造,因此基本上每一个开发人员不得不从头开始构造服务器体系结构。e j b 方法 扩充了j a v a 的客户端组件模型j a v a b e a n s ,以支持服务器端应用系统的开发。在 e j b 规范说明中,服务器中的很多功能由e j b 容器提供,开发人员可以集中精力 开发应用系统的核心功能。采用e j b 技术可以大大减轻开发服务器端应用系统 的工作量。因此,e j b 规范说明一经发布,立即引起许多开发人员的极大兴趣。 s u n 公司发布的文档中对e j b 的定义是:e b 是用于开发和部署多层结构的、分 布式的、面向对象的j a v a 应用系统的跨平台的组件体系结构。采用e j b 可以使 开发商业应用系统变得容易,应用系统可以在一个支持e i b 的环境中开发,开 发完之后部署在其它的环境中,随着需求的改变,应用系统可以不加修改地迁移 到其它功能更强、更复杂的服务器上。 e m 简化了多层体系结构应用系统的开发过程。在分布式应用系统的开发中, 采用多层体系结构的方法有很多优点,如增加了应用系统的可伸缩性的、可靠性、 第1 章研发背景 灵活性等。因为服务器端组件可以根据应用需求迅速地加以修改,且组件在网络 中的位置和应用无关,因此系统管理员可以很容易地重新配置系统的负载。多层 体系结构非常适合于大数据量的商业事务系统特别是在基于w e b 的应用中, 需要多层体系结构支持瘦客户机及浏览器的快速a p p l e t 下载。目前,越来越多 的系统开始采用多层体系结构的方法。 e j b 把j a v a 的“w r i t eo r l e e ,r u na n y w h e r e ”思想提到一个新的高度,服务器 端组件在组件执行系统内运行,规范说明定义了组件执行系统所需要的服务。遵 从e j b 规范说明开发的组件可以在任何一个支持e j b 的系统中运行。通过使用 r m i ,e j b 支持远程的客户端存取。r m i 是一个高级程序设计接口,它使得服务 器的位置对于客户机来说是透明的,k i v l i 产生一个对象,这个对象被安装在客 户机系统中,作为存取服务器对象的代理对象,e j b 开发人员为每一个可存取的 接口定义一个j a v a 远程接口。通过使用i i o p 协议0 n t e m e ti n t e ro r bp r o t o e o l l , e j b 也可以和其它的非j a v a 客户机进行通信。i i o p 允许e j b 系统和c o r b a 的 集成,e j b 可以存取c o r b a 服务器,c o r b a 客户机也可以存取e j b 服务器。 e j b 规范中定义了e j b 的组件模型的目标,其中的一些如下: ( 1 ) e m 将成为用j a v a 语言开发分布式的、面向对象的商业应用系统的标准 组件体系结构,e j b 使得通过组合组件得到分布式应用系统成为可能。 ( 2 ) e j b 使得应用系统开发更容易,应用系统开发人员不需要理解底层的事务 处理细节、状态管理、多线程、资源共享管理以及其它复杂的底层a p i 细节。 ( 3 ) e r a 遵循j a v a 的“w r i t eo n c e r u na n y w h e r e ”的原则,一旦一个e i b 开发 完成之后,那么就可以部署在任何支持e j b 的平台上,而不需要重新编译或对 源代码进行修改。 ( 4 ) e m 定义了一个协议,使得用不同供应商提供的工具开发和部署的组件能 在运行时互操作。 ( 5 ) e j b 体系结构和已有的服务器平台、其它的j a v a a p i 、c o r b a 等兼容。 ( 6 ) e j b 将支持e n t e r p r i s eb e a n s 和其它的非j a v a 应用系统的互操作性。 采用e j b 开发应用系统有很多优点,如标准的j a v a 技术使得应用系统可以 在许多不同的服务器平台上运行:修改应用系统变得容易,对单个组件进行增加、 修改、删除等操作,对应用系统体系结构的影响很小;应用系统经过划分之后, 6 第1 章研发背景 使得组件之间相互独立,又可以相互协作,提供给用户的是该用户所需要的组件: 应用系统的开发变得容易,基本上是即插即用的方式:应用系统从本质上说是可 伸缩的,可以运行在多线程、多处理机的环境中:e j b 可以在新的应用系统中得 到重用,减少了开发时间。 当然,和其它的新技术一样,e j b 也存在一些缺点,主要有:e j b 的数量可 能非常多,以至在软件开发库中很难对这些e b 进行跟踪和管理;如果应用开 发人员不能正确地使用e j b ,可能导致不恰当的应用系统设计,结果使得应用系 统的总体性能下降:除非j v m 及编译器的性能得到提高,否则e j b 应用系统的 性能仍将是一个问题;由于e j b 技术出现时间不长,因此目前可用的e j b 还不 多,要想得到大量的商业性e j b 还需要一段时间。 在e j b 的规范中,提到了6 中角色,包括b e a n 提供者,应用程序装配者, e j b 容器提供者,e j b 配置工具提供者,e j b 服务提供者,系统管理员。这里面 e j b 容器是e j b 之所以能够运行的核心。e j b 容器管理着e j b 的创建,撤消, 激活,去活,与数据库的连接等等重要的核心工作。在本文中,没有划分e j b 容器和e j b 服务棋的明确界限,通常这两部分都有容器提供者提供,看作一体。 1 2 2 2 基本框架和客户调用流程 以下是一个及客户使用这个e j b 的流程:对于一个e j b 来说,它的客户程序 会有许多,但是无论是哪种客户都会先通过j n d i 来找到e j b 容器中这个e j b 主接口的实现,通过调用这个接口的c r e a t e 0 方法来创建服务器上的e i b 实体, 同时也会执行这个e j b 中的e j b c r e a t e 0 方法。而调用主接v i 的c r e a t e 0 方法的返 回值就是这个e j b 的远程接口实现对象存根。客户通过调用远程接口的业务方 法来调用e j b 实现中的业务方法,而e j b 容器来处理这之中所有的流程。 第1 章研发背景 一嚣j 8 嚣舯“舢利 “ 厂。 、 ,然文 一气 一- 霍瀚: 隧垂k 9 s m v 懒 圈 1 2 2 2 用e j b 构建分布式应用 远程和本地接口是两种j a v ar m i 远程接口。分布式对象使用 j a v a r m i r e m o t e 接e l 来表示不同地址空间( 进程或机器) 中的b e a n 。e n t e r p r i s e b e a n 是一种分布式对象。那表示b e a n 类被实例化且在容器中存活,但存活在 其它地址空间中的应用程序也访问它。 要使一个地址空间中的对象实例在另一个地址空间中可用,需要一些涉及网 络套接字的技巧。要使该技巧生效,应将实例封装在一个称作“框架”的特殊对 象中,该对象拥有到另一个叫做“存根”的特殊对象的网络连接。存根实现远程 接口,因此它类似于一个商业对象。但存根不包含业务逻辑;它拥有到框架的网 络套接字连接。每次在存根的远程接口上调用商业方法时,存根将网络消息发送 到框架,告诉它调用了哪个方法。框架从存根接收到网络消息时,它标识所调用 的方法以及自变量,然后调用真正的实例上的相应方法。实例执行商业方法,并 将结果返回给框架,然后框架将结果发送给存根。图1 3 说明了这个概念: 第l 章研发背景 a e n t h w o r k m r k t l e - - ( i e 1c n t h m h _ - t n _ n 岫d 侩 c w m 月山m 7 、 2m e t h a 4 i ”哩 。、一 , 一伊心枷。、 图1 3 啪构建分布式应用 存根将结果返回给调用其远程接口方法的应用程序。从使用存根的应用程序 的角度来看,存根就象在本地运行。实际上,存根只是个哑网络对象,它将请求 通过网络发送给框架,然后框架调用真正实例上的方法。实例完成所有工作;存 根和框架只是通过网络来回传递方法和自变量。 在e j b 中,由容器实现远程和本地接口的框架,而不是b e a n 类。这可以 确保由客户机应用程序在这些引用类型上调用的每一个方法都先由容器处理,然 后再委托给b e a n 实例。容器必须拦截这些针对b e a n 的请求,这样它可以自动 应用持续( 实体b e a n ) 、事务和访问控制。 分布式对象协议定义了在地址空间之间发送的网络消息的格式。分布式对象 协议非常复杂,但幸好,您看不到这一点,因为它会被自动处理。大多数e j b 服 务器都支持j a v a 远程方法协议( m m p ) 或c o r b a 的网际o r b 间协议 0 l o p ) 。b e a n 和应用程序员只看到b e a n 类和远程接口 网络通信的详细信息是 隐藏的。 至于e j ba p i ,程序员不必关心e j b 服务器使用j r m p 还是h o p 一使用 同一个a p i 。e j b 规范要求在远程使用b e a n 时,应使用特殊版本的j a v ar m i a p l 。j a v ar m i 是用于处理分布式对象的a p i ,它独立于协议同样,i d b c 独 立于数据库。所以,e j b 服务器可以支持j r m p 或i i o p ,但b e a n 和应用开发 人员始终使用同一个j a v ar 1 m ia p i 。为了使e j b 服务器可以支持h o p ,因此 开发了一个特殊版本的j a v ar m i ,叫做j a v ar m i 1 1 0 p 。j a v ar m u i i o p 使用 i i o p 作为协议,它还使用j a v ar m ia p i 。e j b 服务器不必使用i i o p ,但却必 9 第1 章研发背景 须遵守j a v ar m u i i o p 限制,因此e j b 使用特殊的j a v ar m u i i o p 约定和类型 但可以使用任何基本协议。 1 2 3j a v a 名字和目录接口j n d 名字服务( n a m i n gs e r v i c e ) 是计算机系统中的一个基本功能。名字服务是将 名字和计算机中的一个对象相关联,通过名字可以方便地找到对应的对象。例如, 计算机中的文件系统就包含了一个名字服务,可以通过文件名找到对应的文件对 象。目录服务( d i r e c t o r ys e r v i c e ) 是名字服务的延伸,目录服务不只保存对象和对 象名的匹配,而且保存这个对象的各种属性,可以对这些属性进行查询、修改、 增加、删除操作。 j n d l ( j a v an a m i n ga n dd i r e c t o r yi n t e r f a c e ) 是一些标准a p i 接口,j a v a 程序通 过这些a p i 可以访问名字目录服务。j n d i 的定义不依赖于任何独立的名字目录 服务提供者,对于各种名字目录服务器,都可通过统一的j n d i 接口调用。j n d 结构如下: 圈1 , 4 , i n i ) i 悻系示意图 j n d i 结构包括两组a p i :m d ra p i ( 应用编程接口,a p p l i c a t i o np r o g r a m m i n g i n t e r f a c e ) s 1 1j n d is p 硼臣务提供者接e l i ,s e r v i c ep r o v i d e ri n t e r f a c e ) 。j a v a 应用程 j 0 1 曩互 蕊翻眍翮i - 一下t _ _ 一 第1 章研发背景 序通过i n d i a p i 访问各种名字目录服务。j n d is p i 使得各种名字目录服务透明 地加入到耶d i 结构中,如上图中的l d a p 、d n s 、n i s 等服务通过j n d is p i 加 入到n d i 结构中,从而使j a v a 应用程序能够通过j n d ia p i 访问这些服务。 j n d i 上下文( j n d i c o n t e x t ) 是一系列名字到对象绑定的集合,c o n t e x t 提供以 下主要接口访问名字服务: b i n d ( n a m en a m e o b j e c to h j ) 建立一个名字到一个对象的匹配关系,也叫绑 定 l o o k u p ( s t r i n gn a m e ) 通过名字查找其对应的对象 r e b i n d ( n a m en a m e o b j e c to h j ) 重新绑定一个名字到对象,覆盖原来的绑定 u n b i n d m a m en a m e ) 解除这个名字到其匹配对象的绑定关系 使用j n d i 过程如下: 首先,通过哈西表中的环境变量值传递j n d i 调用参数,取得j n d i 上下文, 各参数说明如下: c o n t e x ti n i t i a lc o n t e x tf a c t o r y :指定i n d i 上下文工厂。 c 0 n t e x t p r o v i d e ru r l :指定名字服务提供者的u r l ,格式为: r m i :1 0 c a l h o s t :1 0 9 9 。 然后,通过j n d i 初始上下文进行名字服务相关操作。 1 2 4 远程方法调用r m i 规范 1 3 4 1 简介 j a y a 平台的远程方法调用系统( r e m o t em e t h o di n v o c a t i o n , r m i ) 是专门为 在j a v a 应用环境中操作的分布式通信机制,它假定分布式系统在一个j a v a 虚拟 机组成的同构环境中,这样系统能够充分利用j a v a 平台的对象模型的优点。 为了在j a v a 编程语言中支持分布式对象,r m i 设计为满足下列系统目标: 支持无缝远程调用不同的j a v a 虚拟机内对象的方法 支持从服务器到j a v a 程序片的回调 将分布式对象模型集成到j a v a 编程语言同时保持大部分j a v a 编程语言的 对象语义 区分分布式对象模型和本地j a v a 对象模型 1 1 第1 章研发背景 使编写可靠的分布式对象尽量简单 保留j a v a 平台运行时环境的类型安全性 支持多种远程对象的引用语义:例如现场( 非持久) 引用、持久引用等 维护由安全性管理器和类装载器提供的j a v a 平台安全环境 1 2 4 2r m i 的分布式对象应用 r m i 的分布式对象应用通常包含两个单独的程序;服务器和客户。一个典型 的服务器应用创建一系列远程对象,为这些对象创建引用使其可被访问,然后等 待客户调用这些远程对象的方法。一个典型的客户应用获得该服务器上一个或多 个远程对象的引用,然后调用远程对象上的方法。r m i 提供了服务器和客户程 序交流和传递讯息的机制。 分布式对象应用需要: 定位远程对象 应用程序可以通过两种机制之一来获得远程对象的引用。一个应用可以注册 自己的远程对象到r m i 的简单名字设施r m i r e g i s t r y ,或者作为其正常操作的一部 分传递和返回远程对象引用。 与远程对象通信 远程对象之间的通信细节由r m i 来处理:对程序员而言,远程通信与一个 标准的方法调用相似。 对作为参数传递或作为返回值的对象装载类字节码 因为r m i 允许一个调用者传递对象到远程对象,r m i 提供了必要的机制来 装载一个对象的代码同时传送它的数据。 图1 5 描述了一个r m l 分布式应用,它使用远程对象注册表来获得远程对象 的引用。服务器调用对象注册表关联一个名字到一个远程对象。客户通过远程对 象的名字在服务器的对象注册表中查找远程对象并调用其上方法。同时还展示了 r m i 系统使用存在的w e b 服务器装载j a v a 类的字节码。r m i 能通过j a v a 平台 支持的任何u r l 协议( f t p ,h t t p 文件等) 来装载类的字节码。 第1 章研发背景 图1 5r m l 分布式应用示意图 1 2 4 3r f f i i 存根( s t u b ) 和骨架( s k o l e t o n ) 趾肛使用一个标准机制( r p c 所采用的) 来和远程对象通信:存根和骨架。 一个远程对象的存根作为客户方的远程对象本地代表或者代理。调用者调用本地 存根上的方法,由存根负责执行远程对象上的方法调用。在i 咖中,一个远程 对象的存根实现了与远程对象所实现的同样远程接口集合。 在一个存根的方法被调用时,它进行下面的工作: 发起与包含远程对象的远程j a v a 虚拟机连接 对参数进行数据汇集( m a r s h a l ) ( 编码写入并传输) 到远程j a v a 虚拟机 等待方法调用的结果 对返回值或异常解汇集( u n m a r s h a l ) ( 解码读取) 返回值到调用者 存根隐藏了参数序列化和网络层次通信以便为调用者呈现一个简单调用机 制。 在远程y v m ,每个远程对象可能有一个对应的骨架程序( 在只有j a v a 2 平台 的环境中不需要骨架程序) 。骨架负责派发调用到实际的远程对象实现。当骨 架程序收到来的方法调用,它进行下面的工作: 为远程方法解汇集( 解码读取) 参数 调用远程对象实现上的实际方法 第1 章研发背景 对结果( 返回值或异常) 进行数据汇集( 编码写出和传输) 到调用者 存根和骨架是由r m i c 生成的。 1 2 4 4 重要接口和类 j a v a r m i 包内有r e m o t e 接口、r e m o t e e x c e p t i o n 类以及n a m i n g 类。 r e m o t e 接口标识了所有的远程接口,所有的远程对象必须直接或间接实现 该方法。实现类可以实现任意数量的远程接口也能扩展其它的远程实现类。r m i 提供了一些远程对象实现类可以扩展的便利类以便于远程对象创建。这些类包 括: j a v a r m is e r v e r u n i c a s t r e m o t e o b j e c t j a v a r r n i a c t i v a t i o n a c t i v a t a b l e r e m o t e e x c e p t i o n 是一系列可能在远程方法调用执行的过程中发生的通信机 制相关异常的公共超类。一个远程接口的每个方法都必须在其t l l r o w s 子旬中列 出r e m o t e e x c e p t i o n ( 或者该异常的一个超类例如j a v a i o i o e x c e p t i o n 或者 ja v a 1 a n g e x c e p t i o n ) 。 n a m i n g 类提供了在远程对象注册表r e g i s t r y 中存储和获得远程对象引用的方 法。n a m i n g 类的方法使用一个u r l 格式的字符串名字作为它们的参数之一: “h o s t :p o r t n a m e ” 其中h o s t 是远程对象注册表位于的主机,p o r t 是对象注册表接收调用的端口号, n a m e 是一个对象注册表不解释的简单字符串。名字中的h o s t 和p o r t 都是可选的, 如果h o s t 省略,缺省主机是本地主机;如果p o r t 省略。缺省端口是1 0 9 9 ,即砌m 对象注册表r m i r e g i s t r y 的缺省端口。 为一个远程对象绑定名字是为一个远程对象关联或注册一个名字用于以后 客户查找该远程对象。一个远程对象可以通过使用n a m i n g 类的b i n d 或者r e b i n d 方法来关联名字。一旦一个远程对象被注册( 绑定) 到本地主机的r v l 对象注 册表,远程( 或本地) 主机上的调用者就能根据名字查找远程对象,获得其引用, 然后调用该对象上的远程方法。一个对象注册表可以被运行在一个主机上所有的 服务器共享,一个服务器进程也可以根据需要创建和使用自己的对象注册表。 n a m i n g 类的l o o k u p 方法返回与u r l 格式名字的文件部分( 即n 锄e ) 关联的远程 1 4 第l 章研发背景 对象。 i a v a r m i s e r v e r 包含有用于实现远程对象所使用的典型接口和类。其中最重要 的有r e m o t e o b j e c t 类、r e m o t e s e r v e r 类、u n i c a s t r e m o t e o b j e c t 类等。 r e m o t e o b j e c t 类为远程对象重载了j a v a 1 a n g o b j e c t 的行为,它是一个抽象类。 它的构造函数可以传递一个远程引用来初始化自己的远程引用k e m o m r e f 属性 r e f , g e t r e f 方法返回了该远程对象对应的远程引用r e f 而t o s t u b 方法为作为参 数的远程对象返回一个存根,该操作仅在远程对象实现已经被输, 小, ( e x p o r t ) 。 r e m o t e s e r v e r 类也是个抽象类,它是服务器实现类 i a v a r m i s e r v e r u n i c a s t r e m o t e o b j e c t 和j a v a r m ia c t i v a t i o n a c t i v a b l e 的公共父类。 u n i c a s t r e m o t e o b j e c t 提供了创建和输出远程对象的支持,该类实现了一个远

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论