J2EE与中间件技术.ppt_第1页
J2EE与中间件技术.ppt_第2页
J2EE与中间件技术.ppt_第3页
J2EE与中间件技术.ppt_第4页
J2EE与中间件技术.ppt_第5页
免费预览已结束,剩余60页可下载查看

下载本文档

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

文档简介

1、J2EE与中间件技术,中间件概述,中间件概述,一、发展历史 二、中间件技术集合 三、定义 四、对象中间件,一、发展历史,操作系统,数据库管理系统,中间件,操作系统,初始状态:硬件 + 程序,程序的共性(稳定)成分:计算资源管理,操作系统,应用程序,产生了:,分离出了:,数据库管理系统,初始状态:硬件 + 操作系统 + 应用程序,程序的共性(稳定)成分:数据管理,产生了:数据库管理系统,分离出了:应用软件,中间件,远程过程调用(RPCRemote Procedure Calling ) 哑终端 客户机/服务器 基于RPC的分布式计算,哑终端(Dumb Terminal),从远程大型主机(main

2、frame)或强大的UNIX服务器上运行的整体进程显示结果,客户/服务器计算,80年代末,PC的发展两层(two tier)客户机/服务器结构,应用服务器中间件,程序的共性(稳定)成分:网络资源管理,产生了:应用服务器中间件,分离出了:业务逻辑(构件),初始状态:硬件 + 操作系统 + 数据库管理系统 +应用软件,中间件之于底层网络编程,如同数据库之于文件系统,二、中间件技术集合,远程过程调用(RPC) 远程数据库访问 分布式事务处理 消息队列,远程过程调用,程序和程序之间通信: 客户端应用程序调用位于远端服务器上的过程 基本思想: 保持客户端(调用者)和服务器(被调用的)程序的语法一样,好像

3、它们是在同一台机器上 实现: SUN RPC(Solaris上实现) DCE(Distributed Computing Environment) RPC(UNIX,Windows),Deposit(,1000,),继续运行,启动服务器上的存款过程,int Deposit(number),return total + number;,客户端程序,服务器端程序,以对某银行帐户的一个存款过程为例:,示例,Network,Local Call,send,receive,send,receive,客户端程序,服务器端程序,调用过程,列集/解列,Stub的主要工作包括: 1)建立客户与服务器之间的连接

4、2)将客户的高层调用语句打包为一条底层的请求消息,这一过程在RPC中被称为列集(marshalling) 3)等待服务器返回应答消息 4)将来自服务器底层的应答消息解析为可以返回的数据,这一过程在RPC中被称为解列(unmarshalling) 5)将返回值传送给客户程序 需要特别处理:编码、字节序 等问题,请求分派,Skeleton的主要工作包括: 除了需要进行列集、解列外,还需要区分客户所请求的过程名,然后将客户的请求分派(dispatch)给正确的过程,过程描述(1),1)客户按本地调用的方式 ,直接调用本地的客户占位程序/指代/代理(Stub), Stub具有与服务器相同的过程接口 2

5、)Stub将客户的调用请求进行加工、打包,向底层通信机制(如套接字)发出请求消息;Stub不进行任何逻辑处理,只是一个中介 3)客户端通过底层的通信机制,将消息传送给服务器端的底层通信机制,4)服务器需要部分地解析消息,找出客户希望调用的服务器程序 5)服务器构架(Skeleton)对消息进行解析,从中获得调用者的参数,然后调用服务器程序 6)服务器程序执行相应的过程 7)服务器程序将结果返回给Skeleton 8) Skeleton将结果打包,向底层通信机制发出应答消息 9)服务器端通信机制将消息传送给客户端通信机制,过程描述(2),过程描述(3),10)客户端节点上也可能有多个调出点,通信

6、机制需要部分地解析返回的消息,找出消息应该返回给哪个客户程序,并将消息发送给对应的Stub 11) Stub从消息中解析结果,返回给客户程序,RPC的体系结构,stub,skeleton,客户端,服务器,接口定义语言(IDL),编译环境,1、定义并编译接口 2、编写实现具体服务功能的代码 3、编译、连接,产生可执行的服务器程序 4、编写客户端代码 5、编译、连接,产生客户程序 6、运行服务器端程序 7、运行客户端程序,基于RPC的开发过程,客户端开发过程,服务器端开发过程,服务器端程序,IDL编译器 (rpcgen),客户端程序,IDL,account.h,account_clnt.c,acc

7、ount _svc.c,server.c,client.c,rpclib.o,1、定义并编译接口,银行帐号的例子接口定义文件account.x :,program ACCOUNT version ACCOUNT_VER int deposit(int) = 2; /*过程号*/ int withdraw(int) = 1; =1; /*版本号*/ =0 x20010929; /*程序号*/,编译后生成三个主要文件: account.h account_clnt.c account_svc.c,1、定义并编译接口,使用RPC协议编译工具:rpcgen account.h:头文件(.h)包括服务器

8、和客户端程序变量、常量、类型等说明; account_clnt.c : Client端的标准程序框架; account_svc.c :Server端的标准程序框架。,extern C #define ACCOUNT 0 x20010929 #define ACCOUNT_VER 1 #define deposit 2 extern int * deposit_1(int *, CLIENT *); extern int * deposit_1_svc(int *, struct svc_req *); #define withdraw 1 extern int * withdraw_1(int

9、 *, CLIENT *); extern int * withdraw_1_svc(int *, struct svc_req *); extern int account_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); ,account.h,account_clnt.c,static struct timeval TIMEOUT = 25, 0 ; int * deposit_1(int *argp, CLIENT *clnt) static int clnt_res; memset(char *) ,int main (int argc, ch

10、ar *argv) register SVCXPRT *transp; pmap_unset (ACCOUNT, ACCOUNT_VER); transp = svctcp_create(RPC_ANYSOCK, 0, 0); if (transp = NULL) fprintf (stderr, %s, cannot create tcp service.); exit(1); if (!svc_register(transp, ACCOUNT, ACCOUNT_VER, account_1, IPPROTO_TCP) fprintf (stderr, %s, unable to regis

11、ter (ACCOUNT, ACCOUNT_VER, tcp).); exit(1); svc_run (); fprintf (stderr, %s, svc_run returned); exit (1); ,account_svc.c,static void account_1(struct svc_req *rqstp, register SVCXPRT *transp) union int deposit_1_arg; int withdraw_1_arg; argument; char *result; xdrproc_t _xdr_argument, _xdr_result; c

12、har *(*local)(char *, struct svc_req *); switch (rqstp-rq_proc) case NULLPROC: (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL); return; case deposit: _xdr_argument = (xdrproc_t) xdr_int; _xdr_result = (xdrproc_t) xdr_int; local = (char *(*)(char *, struct svc_req *) deposit_1_svc;

13、break; case withdraw: _xdr_argument = (xdrproc_t) xdr_int; _xdr_result = (xdrproc_t) xdr_int; local = (char *(*)(char *, struct svc_req *) withdraw_1_svc; break;,default: svcerr_noproc (transp); return; memset (char *) ,2、编写实现具体服务功能的代码,#include account.h int total= 10000; int * deposit_1_svc(int *ar

14、gp, struct svc_req *rqstp) static int result; total= total + * argp; result = total; printf(“new total =%d”, total); return ,server.c,3、编译、连接,产生可执行的服务器程序,cc o server server.c account_svc.c,4、编写客户端代码,#include account.h void account_1(char *host) CLIENT *clnt; int *result_1; int deposit_1_arg=1000; in

15、t *result_2; int withdraw_1_arg=2000; clnt = clnt_create (host, ACCOUNT, ACCOUNT_VER, tcp); result_1 = deposit_1( ,client.c,5、编译、连接,产生客户程序,cc o client client.c account_clnt.c,6、运行服务器端程序 7、运行客户端程序 服务器端应当显示: new total = 11000 new total = 9000 客户端应当显示: result = 11000 result = 9000,小结(1),分布式系统提供的服务:远程方法

16、调用、事务、负载平衡、故障恢复、安全 操作系统的多样性,繁杂的网络程序设计、管理,复杂多变的网络环境,数据分散处理带来的不一致性问题、性能和效率、安全 将应用软件所要面临的共性问题进行提炼、抽象,在操作系统之上再形成一个可复用的部分,供成千上万的应用软件重复使用。这一技术思想最终构成了中间件(middleware)这类的软件。,小结(2),在操作系统与应用系统之间的一层软件,为分布式应用的开发、部署、运行与管理提供支持 中间件的建立,有四个原因:性能、控制、数据完整性和易用性。,小结(3),中间件应提供如下特性: 易用性相对于网络底层编程而言; 位置透明性应用不必知道对方网络和应用的地址。不经

17、重新编译,就可把一个应用从一台机器转移到另一台具有不同网络地址的机器上; 消息传输的完整性消息不应丢失或重复; 消息格式的完整性消息格式不应被破坏; 语言透明性使用中间件的程序应能够与另一个用不同语言编写的程序通信。如果用一种不同的语言重写一个程序,其他程序应不受影响。,小结(4),中间件处于操作系统软件与用户的应用软件的中间。 中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。,中间件定义,/ 的一个定义: Middleware,

18、 is a layer of software between the network and the applications. This software provides services such as identification, authentication, authorization, directories, and security. In todays Internet, applications usually have to provide these services themselves, which leads to competing and incompa

19、tible standards. By promoting standardization and interoperability, middleware will make advanced network applications much easier to use.,中间件定义,IDC(Internet Data Center )定义:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。,中间件定义,中间件是一类软件,而非一种软件 中间件不仅仅实现互连,还要实现应用之间的互操作 中间件

20、是基于分布式处理的软件,最突出的特点是其网络通信功能 中间件=平台通信,中间件的工作机制,中间件是一个用API定义的分布式软件管理框架,具有强大的通信能力和良好的可扩展性。 客户端上的应用程序需要从网络中的某个地方获取一定的数据或服务,这些数据或服务可能处于一个运行着和客户端不同的操作系统服务器中。客户/服务器应用程序中负责寻找数据的部分只需通过调用中间件API访问一个中间件系统,由中间件完成到网络中找到数据源或服务,进而传输客户请求、重组答复信息,最后将结果送回应用程序的任务。,中间件的工作机制,主要作用,用来屏蔽网络硬件平台的差异性和操作系统与网络协议的异构性,使应用软件能够比较平滑地运行

21、于不同平台上。 同时在负载平衡、连接管理和调度方面起了很大的作用,使企业级应用的性能得到大幅提升,满足了关键业务的需求。,中间件的优越性,缩短应用的开发周期 节约应用的开发成本 减少系统初期的建设成本 降低应用开发的失败率 保护已有的投资 简化应用集成 减少维护费用 提高应用的开发质量 保证技术进步的连续性 增强应用的生命力,远程数据库访问,程序与数据库之间通信; 从客户端读取或者写入一个数据库的能力,该数据库在物理上位于一台不同的机器上 远程数据库访问技术:ODBC/OLE DB/ADO,分布式事务处理,在一个事务中更新不止一个数据库,而且数据库位于不同的机器上 如:某个人从机器X上从账户A

22、转移资金到机器Y上的账户B 它需要一个协议:如两阶段提交协议。,两阶段提交协议,步骤: 1、客户程序首先告诉中间件,一个事务正在开始; 2、客户程序然后请求服务器A; 3、服务器A更新其数据库; 4、客户程序请求服务器B; 5、服务器B更新其数据库; 6、客户程序告诉中间件,事务现在结束。,两阶段提交协议,如果第二个数据库更新失败,则取消对第一个数据库的更新; 为保持事务处理的隔离性,数据库软件捕获到的所有锁定都不能被释放,直到事务结束; 数据库的数量是任意的;子事务也可以以并行的而不是串行的方式处理。 至少存在两个协议: 数据库系统与中间件之间的协议 :XA协议两阶段提交 客户机与服务器之间

23、的协议 :支持RPC/消息 LU6.2协议没有列集,消息只是一个比特串; Encina是一个RPC,意味着参数列集,线程在一个调用期间被阻塞; Tuxedo用自己的方式定义消息格式,支持RPC式的调用和非阻塞式的调用(异步调用,客户端向服务器发送一个消息后,就可以转作其他事情,过一会回来看看服务器是否发送一个应答)。 Encina和Tuxedo既是事务监视器,也是事务管理器。,消息队列,程序与队列之间的通信 RPC电话;消息队列短消息,消息队列,对象中间件,调用位于另一个系统上的对象; 客户和对象之间的关系; 通过引用调用远程对象,在网络上发送消息通过中间件向程序员隐藏,对象中间件,帐户取款的

24、例子: RPC调用: Call Debit(012345678,100); /帐号,取款数额 对象中间件: Call AcountSet.GetAcount(012345678) return AcountRef; Call AcountRef.Debit(100); 对象中间件与RPC不同 列集:把一个对象的引用转换成一个二进制字符串 操作也可以通过一个解释型的接口来调用,体系结构,stub,skeleton,客户端,服务器,接口定义语言(IDL),编译环境,接口库,编译时运行环境,解释时运行环境,对象中间件,适合面向对象语言; 主要技术: CORBA,COM/DCOM,RMI,CORBA概

25、述,OMG(Object Management Group) 1991年颁布了CORBA1.0标准 CORBA(Common Object Request Broker Architecture,公共对象请求代理程序体系结构),用于开发和配置分布式应用的服务器端中间件模型的规范,让分布式应用程序中的远程对象可以相互通信,独立于系统平台和开发语言,体系结构,Dynamic Invocation,ORB Interface,Skeleton,Object Adapter,ORB Core,Client,Object Implementation,Stub,CORBA体系结构,对象请求代理(ORB):通过代表客户查找对象,使客户与服务器建立连接 公共对象服务:创建对象、监视存取控制、重新分配对象,提供命名、事务(交易)、安全服务 接口定义语言(IDL):实现服务 Internet ORB间协议(Internet Inter-ORB Protocol, IIOP) :分布式体系结构遵守的协议 基本对象适配器(Basi

温馨提示

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

评论

0/150

提交评论