首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>J2EE>正文

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

http://www.oklinux.cn  2008-01-20  来源: ccidnet baocl  会员收藏  游客收藏  【 】 

Java远程方法调用(RMI)机制和公用对象请求代理体系(CORBA)是最重要 和使用最广泛的两种分布式对象系统。每个系统都有其特点和短处。它们在行 业中被用于从电子交易到保健医疗的各个领域。一个项目假如要从这两种分布式 机制中选用一个,往往难以抉择。本文概括地介绍了RMI和CORBA,更重要的是, 它将介绍如何开发一个有用的应用程序,用于从远程主机下载文件。然后它将:

简要介绍分布式对象系统
简要介绍RMI和CORBA
让你对在RMI和CORBA中开发应用程序所涉及的工作有个初步印象
演示如何使用RMI和CORBA,从远程主机传送文件
对RMI和CORBA进行简单比较
客户机/服务器模型
客户机/服务器模型是分布式计算的一种形式,在这种形式中,一个程序(客 户机)与另一个程序(服务器)通讯以便交换信息。在这种模型中,客户机和服 务器通常都说同样的语言--也就是说客户机和服务器能理解同一个协议--这 样它们才能通讯。

虽然客户机/服务器模型的实现方式多种多样,但典型做法是使用底层套接字。 使用套接字开发客户机/服务器系统意味着,我们必须设计一个协议,也就是客户 机和服务器都熟悉的一组命令集,通过这些命令它们就能通讯了。举例来说, HTTP协议中提供了一个名为GET的方法,所有Web服务器都必须实现这个方法,所 有Web客户机(浏览器)都必须使用这个方法,才能获取文档。

分布式对象模型
基于分布式对象的系统是一组对象的集合,这些对象以一种明确定义封装的接 口把服务的请求者(客户机)和服务的提供者(服务器)分隔开。换言之,客户 机从服务的实现中分离出来,变成数据的呈现和可执行代码。这就是基于分布式 对象的模型与纯粹的客户机/服务器模型的主要区别之一。

在基于分布式对象的模型中,客户机向对象发送消息,然后对象解释该消息以 便决定要执行什么服务。这项服务,也就是方法,可以选择是让对象还是让代理 来执行。Java远程方法调用(RMI)和公用对象请求代理体系(CORBA)就是这种 模型的例子。

RMI
RMI是一个分布式对象系统,它使你能够轻松地开发出分布式Java应用程序。 在RMI中开发分布式应用程序比用套接字开发要简单,因为不需要做设计协议这种 很轻易出错的工作。在RMI中,开发者会有一种错觉,似乎是从本地类文件调用的 本地方法,其实参数传送给了远程目标,目标解释参数后再把结果发回给调用方。

RMI应用程序初步
使用RMI开发分布式应用程序包括以下步骤:

定义一个远程接口
实现这个远程接口
开发服务器
开发客户机
生成存根和基干,启动RMI注册表、服务器和客户机
下面我们将通过开发一个文件传输程序来实践这些步骤。

范例: 文件传输程序
这个应用程序答应客户机从远程主机上传送(即下载)任何类型的文件(纯 文本或二进制文件)。第一步是定义一个远程接口,这个接口规定了服务器所提 供方法的信号,客户机将调用这些方法。

定义一个远程接口

用于文件下载应用程序的远程接口如代码范例1所示。接口 FileInterface提供了一个方法downloadFile,这个 方法接受String参数(文件名),将文件的数据以字节数组的形式 返回。

代码范例1 1: FileInterface.java

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface FileInterface extends Remote {
public byte[] downloadFile(String fileName) throws
RemoteException;
}

请注重FileInterface的以下特征:

它必须声明为public,这样客户机才能加载实现远程接口 的远程对象。
它必须扩展为Remote接口,以满足使该对象成为远程对象的 要求。
这个接口中的每种方法都必须投出一个java.rmi.RemoteException。
实现远程接口

下一步是实现接口FileInterface。实现的范例见代码范例2。 请注重,除了实现FileInterface之外,还把FileImpl 类扩展为UnicastRemoteObject。这表示FileImpl类 将用于创建一个单独的、不可复制的远程对象,它使用RMI缺省的基于TCP的传送 通道进行通讯。

代码范例2: FileImpl.java

import java.io.*;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

public class FileImpl extends UnicastRemoteObject
implements FileInterface {

private String name;

public FileImpl(String s) throws RemoteException{
super();
name = s;
}

public byte[] downloadFile(String fileName){
try {
File file = new File(fileName);
byte buffer[] = new byte[(int)file.length()];
BufferedInputStream input = new
BufferedInputStream(new FileInputStream(fileName));
input.read(buffer,0,buffer.length);
input.close();
return(buffer);
} catch(Exception e){
System.out.println("FileImpl: " e.getMessage());
e.printStackTrace();
return(null);
}
}
}

开发服务器

第三个步骤是开发服务器。服务器需要做三件事:

创建RMISecurityManager的一个实例并安装它
创建远程对象(在本例中是FileImpl)的一个实例
在RMI注册表中登记这个创建的对象。实现的范例见代码范例3。
代码范例 3: FileServer.java

import java.io.*;
import java.rmi.*;

public class FileServer {
public static void main(String argv[]) {
if(System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
try {
FileInterface fi = new FileImpl("FileServer");
Naming.rebind("//127.0.0.1/FileServer", fi);
} catch(Exception e) {
System.out.println("FileServer: " e.getMessage());
e.printStackTrace();
}
}
}

语句Naming.rebind("//127.0.0.1/FileServer", fi)假定RMI 注册表在缺省的端口号1099上运行。但是,假如RMI注册表在其他端口号上运行, 就必须在这一句中指定端口号。例如,假如RMI注册表在端口4500上运行,那么 这一句就变成:

Naming.rebind("//127.0.0.1:4500/FileServer", fi)

共2页: 上一页 1 [2] 下一页

上一篇:J2EE基础:j2ee所包含的13种核心技术   下一篇:spring 2.0自定义xml 标记 (二 如何实现)


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·J2EE基础:j2ee所包含的13种核心技术
·J2EE基础--weblogic的几个基础问题
·J2EE基础:Servlet/JSP服务器端的重定向
·solaris上开发J2EE应用中文问题的解决
·J2EE基础:Spring的MVC模型运行序列分析
·J2EE--关于用JAVA开发短信方面的知识
·J2EE基础:为什么jsp不能取代servlet?
·J2EE基础:怎样读取和处理XML的配置文件
·高手为你解读J2EE开发过程中的异常处理
·J2EE基础:web开发需要注意的一些地方
·J2EE基础:在Struts 2中实现文件上传
·J2EE基础:几种Portal技术的比较与评述
·J2EE基础:开发第一个分布式的j2ee应用
·J2EE基础:步入J2EE架构和过程
·[J2EE] JNDI定义Oracle数据源的方法
·J2EE:教你提升JSP应用程序的七大绝招
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·一个用JAVA写的测算服务器响应速度程序
·软件测试:软件测试的基础知识概要介绍
·J2EE综合--浅析Java程序员的存储过程
·J2EE综合:业务逻辑和数据库的访问决策
·J2EE综合:关于Java EJB容器存取和实现
·J2EE综合--Java企业系统架构的选择考量
·J2EE综合--java语言不一定就跨平台
·J2EE综合--对Struts中常见错误的汇总
·J2EE综合:开发J2EE应用应遵循的几点原
·J2EE综合:Java EE/J2EE面向对象编程之
·提高J2EE层与数据库层交互操作能力的优
·开发J2EE应用时应该遵循的几个基本准则
  阅读排行
·对J2EE开发中常用开源项目的介绍
·J2EE综合--关于权限设计的详细探讨
·J2EE--关于JAVA的分页查询操作技术
·J2EE综合--Java企业系统架构选择考量
·J2EE基础:j2ee所包含的13种核心技术
·J2EE综合:Struts上传多个文件的例子
·J2EE基础:在Struts 2中实现文件上传
·J2EE综合--业务逻辑和数据库访问决策
·与你共同分享12个最重要的J2EE最佳实践
·J2EE综合--浅谈Java程序员的存储过程
·J2EE综合--Java EJB容器的存取和实现
·J2EE综合--JAVA开发工具安装配置心得
·J2EE综合--总结java编程中的经验教训
·J2EE综合--java语言不一定就跨平台
·J2EE基础:Struts开发中异常处理机制
网摘收藏: