用RMI和CORBA开发JAVA分布式程序(二)

原创 2003年08月21日 21:45:00

CORBA

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

CORBAOMG组织针对企业应用上的分布式程序开发标准。重要的一点是CORBA仅仅是个规范。CORBA应用以ORB而知名。市场上已经出现了几个CORBA产品如VISIBROKEORBIX等。JAVAIDL是在JDK13及以上版本核心包的另一个应用。

CORBA设计的与平台和语言无关(注:与WEB SERVICE类似),因此CORBA能运行在任何平台上,能应用在任何网络里,能用任何支持IDL接口的语言编写。

 

RMI类似,CORBA对象也需要用接口描述说明。但是CORBA接口需要用一种和C++类似的IDL来描述,需要指出的是IDL不是一种程序语言。

 

CORBA应用起步

 

开发CORBA应用程序主要有以下几个步骤:

1 定义IDL接口

2 IDL转换成JAVA

3 应用接口

4 开发服务器端

5 开发客护端

6 运行名称服务器,服务器和客户程序

 

我们现在一步一步地讲述用CORBA开发文件传输的应用,和RMI相似。我们将用到JAVAIDL,在JDK13包里有。

 

定义接口

 

 定义接口的时候,我们需要考虑服务器支持的操作类型。在文件传输应用里,需要用到一个下载文件的方法。例5有了这个接口FileInterface。客户端将调用这个方法下载文件。

IDL里的sequence和数组比较接近,但它不是个固定的长度。

注意方法downloadFileString 参数类型有三种传输模式:in(从客户端到服务器),out(从服务器端到客户端)inout(双向)

 

Code Sample 5: FileInterface.idl

 

接口定义完成后,你可以用JDK13带的IDLJ编译器编译生成JAVA

Idlj编译器带有一些参数,如-f参数 可以生成你指定的客护端代码或服务端骨干码,或两者。在这个例子里,我们将在两台机器里,所以我们用-fserver,-fclient生成服务器端,客户端JAVA代码。

下面我们编译接口生成服务器端代码,用下面命令:

prompt> idlj -fserver FileInterface.idl

这个命令将生成Skeleton,holder,helper和其它类。生成类_FileInterfaceImplBase,我们将利用这个类的接口来实现应用。

 

应用接口

 

下面我们将实现下载方法。

Code Sample 6: FileServant.java

 

服务器端开发

 

下一步我们开发服务器端。包括以下几个步骤:

1 初始化ORB

2 创建一个FileServant对象

3 CORBA名称服务里注册对象名

4 打印一个状态信息

5 等待客户端请求

 

Code Sample 7: FileServer.java

}

 

一旦FileServer有了ORB(对象请求代理),它就能注册CORBA服务。它用OMG制定的COS命名服务注册。它从命名服务根开始,返回一个生成的CORBA对象。为了引用

NamingContext对象,必须narrowed down一个合适的类型。如下做:

NamingContext ncRef = NamingContextHelper.narrow(objRef);

对象ncRef object is 现在就是 org.omg.CosNaming.NamingContext 的实例.你可以用它来注册一个代用绑定方法明明服务的CORBA服务。

开发客户端

 

下一步是开发一个客户端应用,获得命名服务,访问和查找别的服务。当得到FileTransfer服务后,就可以调用下载方法了。

 

Code Sample 8: FileClient

 

运行应用

 

最后一步是运行应用。有几个步骤:

1 运行CORBA命名服务。用命令tnameserv.来做。却省端口是900,如果900不能用,你可以用另一端口2500,命令如下:

prompt> tnameserv -ORBinitialPort 2500

 

2 运行服务器 当在却省端口时

prompt> java FileServer

当在其它端口如2500

prompt> java FileServer -ORBInitialPort 2500

 

3 生成客户端干码

prompt> idlj -fclient FileInterface.idl

 

4 运行客户端,假设在2500端口

prompt> java FileClient hello.txt -ORBInitialPort 2500

hello.txt是要下载的文件

 

如果命名服务在4500端口

prompt> java FileClient hello.txt -ORBInitialHost gosling -ORBInitialPort 4500

 

我们还可以在ORB初始化指定一些参数:如

ORB orb = ORB.init(argv, null);

指定CORBA服务器,和命名端口如下:

 

测试

 

在文件传输应用中,客户端需要先知道要传输文件的名字,服务器端没有列表显示文件名的方法,你可以增加方法扩展应用。当然,你也可以开发UI客户端代替命令行。当客户端启动后,它调用服务器端的方法显示文件列表,就可以让用户选择文件来下载它。如下图:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2003-8-211754370.gif

Figure 1: GUI-based File Transfer Client

 

CORBARMI比较

 

显而易见,RMICORBA简单,开发者不需要熟悉IDL。通常,CORBARMI有下列不同:

接口定义不同,CORBAIDL,而RMIJAVA

       CORBA的参数有输入,输出类型。

       CORBA设计与语言无关。是不同语言开发系统的桥梁。

       CORBA对象不能垃圾收集。象我们提到的那样,CORBA与语言无关。象C++不支持垃圾收集那样。这是CORBA的缺点。一旦我们创建CORBA对象,它将一直存在,知道你亲自去处它。而RMI是自动收集。

 

结论

我们可以用RMICORBA开发分布式应用。它们在第一步定义对象接口很接近。

开发系统RMICORBA中做选择其一取决于项目需要。我希望这篇文章能给你开发分布式应用的信息并能在选择分布式架构时能给你些参考。

 

 

翻译不当之处,请大家批评指正,谢谢!  My mail:lisong@anyi.com.cn

 

java中rmi和corba的区别

java中rmi和corba的区别:1、定义接口:rmi自己定义接口(interface)corba生成idl代码,然后使用idlj -fall name.idl生成接口和几个类文件2、启动服务:rm...
  • njchenyi
  • njchenyi
  • 2005年08月31日 03:48
  • 3997

用RMI和CORBA开发JAVA分布式程序(二)

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";...
  • java169
  • java169
  • 2008年05月24日 02:33
  • 274

RMI, RPC, CORBA区别

RMI 和 RPC均可以均提供远程方法访问的基础通信和参数引用要求的串行化机制,RPC和RMI之间的一个重要差别是RPC用快速而不够可靠的UDP协议,RMI用低速而可靠的TCP/IP协议。另外 RMI...
  • AbnerChai
  • AbnerChai
  • 2012年06月14日 11:02
  • 2114

CORBA技术和Java技术的结合-Java IDL

一、什么是Java IDL----Java IDL(Interface Definition Language)可实现网络上不同平台上的对象相互之间的交互,该技术基于通用对象请求代理体系结构CORBA...
  • dolphin_notswim
  • dolphin_notswim
  • 2007年10月23日 21:44
  • 2953

远程通信的几种选择(RPC,Webservice,RMI,JMS,SOAP,REST,CORBA的区别)

RPC(Remote Procedure Call Protocol 远程过程调用) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集...
  • xiaopingping___
  • xiaopingping___
  • 2016年04月21日 15:17
  • 1052

用RMI和CORBA开发JAVA分布式程序

 用RMI和CORBA开发JAVA分布式程序  RMI(远程方法调用)和CORBA(通用对象调用代理架构)是两个最重要,并广泛应用的分布对象系统架构。每个架构都有优劣,这两个架构没应用到从电子商务到医...
  • gunandrose
  • gunandrose
  • 2003年08月20日 10:40
  • 1255

用RMI和CORBA开发JAVA分布式程序

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";...
  • java169
  • java169
  • 2008年05月24日 02:33
  • 202

分布式对象模型框架--RMI

分布式对象模型框架RMI: RMI(Remote Method Invoke): 概念:RMI是jdk提供的远程方法调用框架,它封装了所有底层通信的细节,并且解决了编组、分布式垃圾收集、安全检查以...
  • A__17
  • A__17
  • 2016年12月10日 01:00
  • 665

RMI、CORBA、IIOP简单实例--1. RMI

    分布式对象技术主要是在分布式异构环境下建立应用系统框架和对象构件。在应用系统框架的支撑下,开发者可以将软件功能封装为更易管理和使用的对象,这些对象可以跨越不同的软、硬件平台进行互操作。目前,分...
  • javamxj
  • javamxj
  • 2005年02月06日 11:16
  • 4764

java分布式对象RMI应用测试用例

【0】README 0.1)本文旨在对http://blog.csdn.net/PacosonSWJTU/article/details/50705192  中的代码进行实践(如何部署一个使用RMI框...
  • PacosonSWJTU
  • PacosonSWJTU
  • 2016年02月20日 16:59
  • 970
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用RMI和CORBA开发JAVA分布式程序(二)
举报原因:
原因补充:

(最多只允许输入30个字)