科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用RMI和CORBA进行分布式Java编程

用RMI和CORBA进行分布式Java编程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Java远程方法调用(RMI)机制和公用对象请求代理体系(CORBA)是最重要和使用最广泛的两种分布式对象系统。它们在行业中被用于从电子交易到保健医疗的各个领域。

作者:大海 来源:CSDN 2008年2月29日

关键字: java CORBA RMI

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共7页)

现在,为了启动服务器,需要把除了客户机类 (FileClient.class)之外的所有类(包括存根和基干)复制一 份。请使用以下命令启动服务器,假定安全方针位于文件policy.txt中:

prompt> java -Djava.security.policy=policy.txt FileServer

为了在另一台机器上启动客户机,需要复制远程接口 (FileInterface.class)和存根 (FileImpl_Stub.class)。请使用以下命令启动客户机:

prompt> java FileClient fileName machineName

其中fileNamefileName是要下载的文件,machineName 是该文件所在的机器(运行文件服务器的那台机器)。如果一切顺利,那么客户 机就存在了,下载完的文件保存在本地的机器上。


要运行前面介绍的客户机,需要复制接口和存根。更适当的方法是使用RMI动态类加载。这种做法不需要复制接口和存根。取而代 之的做法是,可以把接口和存根放在共享的目录里供服务器和客户机使用,在需要存根或者基干的时候,RMI类加载器就会自动下载它。举例来说,用以下命 令运行客户机: java -Djava.rmi.server.codebase=http://hostname/locationOfClasses FileClient fileName machineName。 有关这种方法的更多信息,请参见使用 RMI加载动态代码。


CORBA

公用对象请求代理体系(即CORBA)是由对象管理组织(OMG)开发的一项工业标准,用于帮助分布式对象编程。要注意的重要一点是,CORBA只是一项规范。 CORBA的实现称为ORB(对象请求代理)。从市场上可以找到几个CORBA的实现,比如VisiBroker、ORBIX,等等。JavaIDL是另一个实现,它是JDK1.3或更高版本 的核心软件包之一。

CORBA被设计成与平台和语言无关。因此,CORBA对象可以运行于任何平台之 上,位于网络的任何位置,还可以用任何语言编写,只要该语言具有Interface Definition Language(IDL,接口定义语言)的映射。

和RMI类似,CORBA对象是用接口规定的。但是CORBA中的接口在IDL中指定。 虽然IDL与C++相似,但请注意,IDL并不是一种编程语言。有关CORBA的详细介绍, 请参见用 Java进行分 布式编程: 第11章(CORBA概述)

CORBA应用程序初步

开发CORBA应用程序包括许多步骤。它们是:

  1. 在IDL中定义一个接口
  2. 把IDL接口映射到Java中(自动完成)
  3. 实现这个接口
  4. 开发服务器
  5. 开发客户机
  6. 运行命名服务、服务器和客户机。

我们现在要开发一个基于CORBA的文件传送程序,以此来解释各个步骤,这个 程序类似于本文前面开发的那个RMI应用程序。在这里将使用JavaIDL,它是 JDK1.3+的核心软件包之一。

定义接口

在定义CORBA接口时,请考虑服务器将支持的操作类型。在文件传输应用程序 中,客户机将调用一个方法来下载文件。代码范例5显示了FileInterface 的接口。Data是使用typedef关键字引入的新类型。 IDL中的sequence类似于数组,区别在于序列没有固定的大小。 octet是一个8-bit数,等价于Java中的类型byte

请注意,downloadFile方法接收一个类型为string ,声明为in的参数。IDL定义了三种参数传送模式:in (从客户机输入到服务器),out(从服务器输出到客户机), inout(输入输出都可用)。

代码范例 5: FileInterface.idl

interface FileInterface {
typedef sequence<octet> Data;
Data downloadFile(in string fileName);
};

定义好IDL接口之后,就可以编译它了。JDK 1.3+附带了idlj 编译器,用于把IDL定义映射为Java的声明和语句。

idlj编译器可以通过选项来指定是生成客户机存根、服务器基 干,还是二者都生成。-f选项用于指定要生成什么。 side可以是client, server或者 all,用于指定客户机存根和服务器基干。在这个例子中,因为应 用程序将在两台单独的机器上运行,所以在服务器端使用-fserver 选项,而在客户机端使用-fclient选项。

现在编译FileInterface.idl,生成服务器端基干。请使用命令:

prompt> idlj -fserver FileInterface.idl

这条命令将产生几个文件,比如基干,持有者和辅助器类,等等。其中生成 的一个重要文件是_FileInterfaceImplBase,它是实现接口的类的 子类。

实现接口

下面我们提供了downloadFile方法的一个实现。这个实现称为 仆人,正如你从代码范例6中看到的那样,类FileServant扩展了 _FileInterfaceImplBase类,以便把这个仆人指定为一个CORBA 对象。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章