基于Java Corba的分布式文件系统应用

描述

现在的需求是基于java corba实现一个分布式文件系统应用,基本功能无非就是上传、下载这两个功能。

在写程序之前,脑子里对系统的整体架构或对编程思路有一个high level的理解是必须的。至于Java corba中的入门程序,这里就不多说了,百度一大片,基本都是那个Hello World的实例程序了,英语还不错的可以看>>这里<<,官方文档解释的比较清晰,请务必看一个入门教程,不然这篇文章你可能看不太懂。(我忽略了许多入门知识)

在这个系统中,我们要考虑的也就是怎么做到上传、下载了,对于纯Java编程来说,这也无非就是FileInputStreamFileOutputStream操作几下,但分布式系统里面,怎么处理呢?怎么把字节流通过网络传输呢?其实很简单,去查一下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文件࿰

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值