描述
现在的需求是基于java corba实现一个分布式文件系统应用,基本功能无非就是上传、下载这两个功能。
在写程序之前,脑子里对系统的整体架构或对编程思路有一个high level的理解是必须的。至于Java corba中的入门程序,这里就不多说了,百度一大片,基本都是那个Hello World的实例程序了,英语还不错的可以看>>这里<<,官方文档解释的比较清晰,请务必看一个入门教程,不然这篇文章你可能看不太懂。(我忽略了许多入门知识)
在这个系统中,我们要考虑的也就是怎么做到上传、下载了,对于纯Java编程来说,这也无非就是FileInputStream、FileOutputStream操作几下,但分布式系统里面,怎么处理呢?怎么把字节流通过网络传输呢?其实很简单,去查一下corba IDL接口里面对字节流是怎样定义的,然后在相关的实现类中实现即可,这里说的太笼统了,下面我将一一叙述整个项目的开发流程。请着重看下面编写IDL接口文件步骤中的技术核心部分。
开发环境
- jdk 1.8
- windows 操作系统
- intellij IDEA
开发步骤
一个标准的Java corba程序,开发流程可大致分为下面的几个步骤:
- (1) 编写IDL接口文件
- (2) 编译IDL接口文件
- (3) 实现远程对象
- (4) 实现服务器程序
- (5) 实现客户端程序
- (6) 编译客户端和服务端程序
- (7) 分别运行服务端和客户端程序
(1) 编写IDL接口文件
在最开始的时候,我们说了要实现流在网络中传输,我们必须知道corba IDL接口里面对字节流的定义方式,关于corba IDL的具体介绍可以>>点击这里<<.
技术核心
文件字节流嘛,传输的时候肯定是8字节的序列,可是我们又不知道文件的长度(也就是说无法确定字节流序列要开多大),没关系,IDL里面的sequence<octet>就是声明一个无限制长度的字节序列(idlj程序编译后将之会匹配成byte[]类型),这样就好办了。
上传文件时,我在客户端这边打开一个FileInputStream文件输入流,然后读出文件输入流的内容到一个byte[]数组里面,然后再把这个byte[]数组转化为的内容送给corba的输入流传到服务端,服务端又取出corba的输入流中的内容,转化为一个byte[]数组,然后放到一个FileOutputStream文件输出流中去,这样就可以做到将客户端上的文件保存在服务端中了。
下载文件类似,客户端这边告诉服务端两个参数,一个是待下载的文件名,另一个是输出参数fileData,服务端那边打开一个FileInputStream文件输入流,然后读出文件输入流的内容到一个byte[]数组里面,然后再把这个byte[]数组转化为的内容放到客户端调用方法时传递的那个输出参数fileData中,然后客户端把输出参数fileData的内容放到一个byte[]数组中,然后放到一个FileOutputStream文件输出流中去,这样就可以做到将服务端上的文件保存在客户端中了。
好,这个核心解决了基本程序就跃然于屏幕上了,o( ̄︶ ̄)o
// TFile.idl
module corba
{
typedef sequence<octet> MyData;
typedef sequence<string> MyList;
interface TFile
{
/* fileData为服务端返回的流 */
boolean download(in string fileName,out MyData fileData);
/* fileData为客户端输入的流 */
boolean upload(in string fileName,in MyData fileData);
/* 服务器端所有可下载的文件名 */
void listAllFile(out MyList allFileNames);
};
};
in表示是输入参数,out表示输出参数(都是站在客户端的立场上看的哈!),我这里还加了一个功能,就是显示出服务器上的所有文件列表(这都是无所谓的功能了)。
sequence<string>想必你也知道是什么意思了,恩,就是一个不知道大小的字符串序列了。
(2) 编译IDL接口文件
jdk中自带了idlj编译程序,你可以在你的jdk目录下的bin文件夹中找到它。额,是的,你要用这个的话需要配置好java环境变量哈,这个比较简单,就不说了。
idlj -fall TFile.idl (for all)
idlj -fclient TFile.idl (for client)
idlj -fserver TFile.idl(for server)
假如你要把客户端和服务端分开开发的的话(想必生产环境下肯定是这样的),编译时就要带上 -fclient 或者 -fserver选项,corba在客户端那边会生成_stub桩文件,服务端会生成一个POA文件,然后服务端的程序员要继承这个类,Override相应的方法。
额,这里我为了简单,也和大部

本文介绍了基于Java CORBA构建分布式文件系统的过程,包括上传和下载功能。讲解了从编写IDL接口文件到实现远程对象、服务端和客户端程序的详细步骤。重点在于理解如何通过CORBA处理字节流在网络中的传输,以及使用Naming Service注册和查找远程对象。
最低0.47元/天 解锁文章
1142

被折叠的 条评论
为什么被折叠?



