随笔-128  评论-55  文章-5  trackbacks-0
 

对象中间件之Java RMI

作者:orangelizq   2007-11-30

、中间件简介

1.1 中间件的定义

中间件(middleware)是基础软件的一大类,属于可复用的软件范畴。中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的应用软件。[1]

IDC对中间件的定义为:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件定位于客户机服务器的操作系统之上,管理计算机资源和网络通信。

因而中间件是指一类软件,是基于分布式处理的软件,最突出的特点是其网络通信功能。也可认为中间件是位于平台和应用之间的通用服务,这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,可以有符合接口和协议的多种实现。

 

1.1 中间件

1.2 中间件的分类

按照IDC的分类方法,中间件可分为六类:[1]

1)        终端仿真/屏幕转换

2)        数据访问中间件(UDA

3)        远程过程调用中间件(RPC

4)        消息中间件(MOM

5)        交易中间件(TPM

6)        对象中间件

然而在实际应用中,一般将中间件分为两大类:一类是底层中间件,用于支撑单个应用系统或解决一类问题,包括交易中间件、应用服务器、消息中间件、数据访问中间件等;另一类是高层中间件,更多的用于系统整合,包括企业应用集成中间件、工作流中间件、门户中间件等,他们通常会与多个应用系统打交道,在系统中层次较高,并大多基于前一类的底层中间件运行。

1.2.1 终端仿真/屏幕转换

此类中间件用于实现客户机图形用户接口与已有的字符接口方式的服务器应用程序之间的互操作,应用与早期的大型机系统,现在已很少使用。

1.2.2 数据访问中间件

此类中间件是为了建立数据应用资源互操作的模式,对异构环境下的数据库或文件系统实现联接。

1.2.3 远程过程调用中间件

此类中间件可以使开发人员在需要时调用位于远端服务器上的过程,屏蔽了在调用过程中的通信细节。一个应用程序使用RPC来远程执行一个位于不同地址空间里的过程,在效果上看和执行本地调用相同。

1.2.4 交易中间件

此类中间件是专门针对联机交易系统而设计的。联机交易系统需要处理大量并发进程,处理并发涉及到操作系统,文件系统,编程语言,数据通信,数据库系统,系统管理,应用软件等。而交易中间件根据分布式交易处理的标准及参考模型,对资源管理,交易管理和应用进行了实现,从而使得基于交易中间件开发应用程序更为简单。交易中间件基本上只适用于联机交易系统,是一种较为专用的中间件。

1.2.5 消息中间件

此类中间件是指利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。

消息中间件可以即支持同步方式,又支持异步方式。异步中间件比同步中间件具有更强的容错性,在系统故障时可以保证消息的正常传输。异步中间件技术又分为两类:广播方式和发布/订阅方式。由于发布/订阅方式可以指定哪种类型的用户可以接受哪种类型的消息,更加有针对性,事实上已成为异步中间件的非正式标准。目前主流的消息中间件产品有IBMMQSeriesBEAMessageQSunJMS等。

1.2.6 对象中间件

传统的对象技术通过封装、继承及多态提供了良好的代码重用功能。但这些对象只存在与一个程序中,外界并不知道它们的存在,也无法访问它们。对象中间件提供了一个标准的构建框架,能使不同厂家的软件通过不同的地址空间,网络和操作系统实现交互访问。对象中间件的目标是为软件用户及开发者提供一种应用级的即插即用的互操作性。目前主流的对象中间件有OMGCORBAMicrosoft COM以及IBMSOMSunRMI等。

1.3 中间件的特点

一般来讲,中间件具有以下一些特点:满足大量应用的需求,运行于多种硬件和操作系统平台,支持分布式计算,支持标准接口和协议。开发人员通过调用中间件提供的大量API,实现异构环境的通信,从而屏蔽异构系统中复杂的操作系统和网络协议。

由于标准接口对于可移植性和标准协议对于互操作性的重要性,中间件已成为许多标准化工作的主要部分。分布式应用软件借助中间件可以在不同的技术之间共享资源。

总的来说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少了程序设计的复杂性,将注意力集中与自己的业务上,不必再为程序在不同软件系统上的移植而重复工作,从而大大减少了技术上的负担。
 

 

二、Java RMI简介

       Java RMI(Remote Method Invocation)是一种分布式对象技术,它允许一个Java虚拟机(JVM)调用运行在位于网络中另一个地方的JVM上的对象方法。这种技术使得在多台机器上分布资源和处理负载的想法成为可能。

    分布式对象技术正在成为分布式计算环境发展的主流方向,可以说是伴随着网络发展起来的一种面向对象技术,其技术特点是:[2]

1)       主要针对异构环境下的应用互操作问题。

2)       系统核心的对象管理将客户/服务器模型与面向对象技术结合在一起。

3)       提供面向对象的API

4)       已经成为建立集成框架和软件部件标准的核心技术。

       目前主要的分布式互操作标准有OMG组织的CORBA标准,Sun公司的Java RMI标准和MicrosoftOLE/COM/DCOM标准。

 

 

2.1 Java RMI的体系结构

RMI的基本体系结构,概括起来说,由三个抽象层组成:

1.         存根/框架层(Stubs/Skeletons Layer)

RMI为我们引入了两种特殊类型的对象,称为存根(Stub)和框架(Skeleton),它们组成了RMI的第一层。

在远程通信的时候,要利用TCP/IP协议,做很多底层数据的打包传输。运用Java技术,我们先要把数据或者对象转换成字节流(byte stream),便于网络传输,这个过程叫汇集(marshaling);当收到远程传来的字节流后,我们要把流信息转换成对象或者数据,这个过程叫解读(unmarshaling),它与汇集刚好相反。

StubSkeleton层位于实际应用程序之下,建立在Proxy(代理)设计方案之上。Stub类的作用是远程服务器实现的代理的角色,Stub是客户方对象;Skeleton类用于帮助对象通过RMI链接与Stub通信,它从链路中读取方法调用的参数,向远程服务实现对象进行调用,接受返回值,然后再把返回值写回到Stub

2.         远程引用层(Remote Reference Layer)

远程引用层定义和支持着RMI连接的调用语义(semantics)

RMI进行远程访问要用到JRMP(Java Remote Method Protocol,Java远程方法协议)

这一层提供专用于JRMPRemoteRef对象,它位于java.rmi.server包内,代表着远程对象的一个句柄。RemoteRef使用远程引用来执行远程对象的一个远程方法调用。

3.         传输层(Transport Layer)

传输层在JVM之间建立基于流的网络连接,并且负责设置和管理这些连接。这时候,RMI使用一种线级(wire-level)协议进行基于TCP/IP的连接,该协议就是Java远程方法协议(JRMP,Java Remote Method Protocol)

JDK版本1.2开始,JRMP不再需要Skeleton,而是使用reflection来建立与远程服务的连接。为了生成Stub,我们须用rmic

当前的RMI实现中,传输层建立在TCP/IP基础上,设计用于在客户和服务器之间建立一条连接。

2.2 Java RMIRPCJMS的比较

远程对象方法调用并不是新概念,远程过程调用(RPC)已经使用很多年了。远程过程调用被设计为在应用程序间通信的平台中立的方式,它不理会操作系统之间以及语言之间的差异。即RPC支持多种语言,而RMI只支持Java写的应用程序。[1]

另外RMI调用远程对象方法,允许方法返回Java对象以及基本数据类型。而RPC不支持对象的概念,传送到RPC服务的消息由外部数据表示(External Data Representation, XDR)语言表示,这种语言抽象了字节序类和数据类型结构之间的差异。只有由XDR定义的数据类型才能被传递,RPC不允许传递对象。可以说RMI是面向对象方式的Java RPC

Java消息服务 ( Java Messaging Service, JMS )是一种允许应用程序创建、发送、接受和读取消息的Java APIJMSRMI的区别在于,采用JMS服务,对象是在物理上被异步从网络的某个JVM上直接移动到另一个JVM上。而RMI对象是绑定在本地JVM中,只有函数参数和返回值是通过网络传送的。

2.3 Java RMICORBADCOM的比较

CORBA90年代初有OMG组织提出的一个分布式互操作标准,属于语言中立的。而RMI直接把分布式对象模型嵌入到Java语言的内部,使得Java程序员可以自然的编写分布式程序,不必离开Java环境,或者涉及CORBA IDL以及JavaCORBA的类型转换。然而RMI不遵守CORBA标准,基本上是Java-to-Java技术,难以实现与其他语言编写的对象之间的互操作。[1]

RMI CORBA 常被视为相互竞争的技术,因为两者都提供对远程分布式对象的透明访问。但这两种技术实际上是相互补充的,一者的长处正好可以弥补另一者的短处。RMI CORBA 的结合产生了 RMI-IIOPRMI-IIOP 是企业服务器端 Java 开发的基础。

1997 年,IBM Sun Microsystems启动了一项旨在促进 Java 作为企业开发技术的发展的合作计划。两家公司特别着力于如何将 Java 用作服务器端语言,生成可以结合进现有体系结构的企业级代码。所需要的就是一种远程传输技术,它兼有 Java RMIRemote Method Invocation,远程方法调用)较少的资源占用量和更成熟的 CORBACommon Object Request Broker Architecture,公共对象请求代理体系结构)技术的健壮性。出于这一需要,RMI-IIOP问世了,它帮助将 Java 语言推向了目前服务器端企业开发的主流语言的领先地位

DCOM是从COM改造过来的,COM这一技术部分是作为规范,定义了对象实现的二进制标准,用于单机上应用之间的通信,对象实现与使用的语言无关。DCOMCOM的分布式扩展,在DCE RPC之上构造对象的远程过程调用层支持对远程对象的访问。一个DCOM对象是支持一个或多个接口的组件。DCOM对象不支持对象ID,因此,客户程序不能与某个特定的对象发生联系。



Author: orangelizq
email: orangelizq@163.com

欢迎大家访问我的个人网站 萌萌的IT人
posted on 2007-12-01 20:45 桔子汁 阅读(2029) 评论(0)  编辑  收藏 所属分类: J2SE

只有注册用户登录后才能发表评论。


网站导航: