扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共7页)
现在,为了启动服务器,需要把除了客户机类 (FileClient.class
)之外的所有类(包括存根和基干)复制一 份。请使用以下命令启动服务器,假定安全方针位于文件policy.txt中:
prompt> java -Djava.security.policy=policy.txt FileServer
为了在另一台机器上启动客户机,需要复制远程接口 (FileInterface.class
)和存根 (FileImpl_Stub.class
)。请使用以下命令启动客户机:
prompt> java FileClient fileName machineName
其中fileName
fileName是要下载的文件,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应用程序包括许多步骤。它们是:
- 在IDL中定义一个接口
- 把IDL接口映射到Java中(自动完成)
- 实现这个接口
- 开发服务器
- 开发客户机
- 运行命名服务、服务器和客户机。
我们现在要开发一个基于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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者