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

70、Java分布式计算技术:JSP、RMI与CORBA详解 本文详细介绍了Java分布式计算中的三种关键技术:JSP、RMI和CORBA。JSP部分讲解了基础语法、Cookie操作及浏览器差异;RMI部分涵盖远程接口定义、实现、注册表设置及客户端使用方法;CORBA部分介绍了其架构、接口定义语言(IDL)和命名服务,并通过流程图总结了其工作流程。最后,文章对比了这三种技术的适用场景,并提供了选择建议及常见问题解决方案,帮助开发者更好地理解和应用这些分布式计算技术。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 用RMI和CORBA进行分布式Java编程 Qusay H. Mahmoud 2002年1月 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) 另外,在这里要着重指出,我们假定rmi注册表和服务器是在同一台电脑上运 行。如果不是这样,只需修改rebind方法中的地址即可。 开发客户机 下一步是开发客户机。客户机可以远程调用远程接口 (FileInterface)中指定的任何方法。但是为了能这么做,客户 机首先必须从RMI注册表中获得指向该远程对象的引用。获得引用之后就可以调 用downloadFile方法了。客户机的实现请见代码范例4。在这个实 现中,客户机从命令行接收两个参数: 第一个参数是要下载文件的名称,第二个参数是要下载的文件所在主机的地 址,也就是运行文件服务器的那台电脑的地址。 代码范例4: FileClient.java import java.io.*; import java.rmi.*; public class FileClient{ public static void main(String argv[]) { if(argv.length != 2) { System.out.println("Usage: java FileClient fileName machineName"); System.exit(0); } try { String name = "//" argv[1] "/FileServer"; FileInterface fi = (FileInterface) Naming.lookup(name); byte[] filedata = fi.downloadFile(argv[0]); File file = new File(argv[0]); BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(file.getName())); output.write(filedata,0,filedata.length); output.flush(); output.close(); } catch(Exception e) { System.err.println("FileServer exception: " e.getMessage()); e.printStackTrace(); } } } 运行应用程序 为了运行应用程序,我们需要生成存根和基干,编译服务器和客户机,启动 RMI注册表,最后是启动服务器和客户机。 为了生成存根和基干,请使用rmic编译器: prompt> rmic FileImpl 这将生成两个文件:FileImpl_Stub.class和 FileImpl_Skel.class。存根是一个客户机代理,基干是一个服 务器基干。 下一步是编译服务器和客户机。用javac编译器来做这件事。但是请注意:如 果服务器和客户机是在两台不同的机器上开发的,为了编译客户机,需要把接口 (FileInterface)复制一份。 最后,启动RMI注册表并运行服务器和客户机。为了在缺省的端口号上启动 RMI注册表,请在Windows中使用命令rmiregistry或 start rmiregistry。为了在其他端口号上启动RMI注册表,可以 提供该端口号作为RMI注册表的一个参数: prompt> rmiregistry portNumber 运行RMI注册表之后,就可以启动服务器FileServer了。但是, 因为在服务器应用程序中正在使用RMI安全管理员,所以需要一个安全方针来与之 相配。下面是一个安全方针范例: grant { permission java.security.AllPermission "", ""; }; 注意: 这只是一个方针的例子。它允许任何人做任何事情。对于关键 性事务应用程序,你需要指定更严格的安全方针。 现在,为了启动服务器,需要把除了客户机类 (FileClient.class)之外的所有类(包括存根和基干)复制一 份。请使用以下命令启动服务器,假定安全方针位于文件policy.txt中: prompt> java -Djava.security.policy=policy.txt FileServer 为了在另一台机器上启动客户机,需要复制远程接口 (FileInterface.class)和存根 (FileImpl_Stub.class)。请使用以下命令启动客户机: prompt> java FileClient fileName machineName 其中fileNamefileName是要下载的文件,machineName 是该文件所在的机器(运行文件服务器的那台机器)。如果一切顺利,那么客户 机就存在了,下载完的文件保存在本地的机器上。
基于CORBA的分布式程序设计(入门与提高) 基于CORBA的分布式程序设计(入门与提高),文档来自百度文库。 立即下载

相关推荐

Emotion-LLaMA实战指南:从零构建多模态情感识别系统(附Python代码)

本文提供了Emotion-LLaMA多模态情感识别系统的实战指南。通过详细的步骤,指导读者从零搭建开发环境、运行本地Demo、理解模型架构,并完成数据处理与模型训练。该创新模型融合视觉、听觉与文本信息,实现更精准、接近人类理解的情感分析与推理,并附有完整的Python代码实现。

weixin_29094775的博客 418

RMI与CORBA在Java中的应用

  本篇用实例来说明采用Java进行RMI远程方法调用及CORBA服务调用的实现方法,并分析它们的异同,从而为分布应用软件的开发者提供参考和帮助。   Internet/Intranet的飞速发展使得Web应用日益广泛而复杂,Web早已不仅仅是超媒体信息的浏览工具,它正逐步发展成为分布异构环境中企业应用的通用前端和事务处理的展现窗口。在分布式环境异构中,各种机器所采用的操作系统、网络通信协议和应用

Stone的专栏 3334

C++坦克大战源代码

【代码】C++坦克大战源代码。

强国豪,林中霖 2613

RMI AND CORBA简介——java菜鸟成长记

简介       RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大 的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的 Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对

Jack 架构师之路 1779

Unity抖音小游戏上架实战:从零到一,详解流程与避坑指南

本文详细介绍了Unity抖音小游戏上架的全流程,包括环境准备、SDK集成、开发者账号注册、软著申请、打包提交流程及常见问题解决方案。重点解析了抖音小游戏平台特有的配置细节和避坑技巧,帮助开发者高效完成游戏上架并优化用户体验。

weixin_33704234的博客 261

深入解析AndroidManifest.xml与device_admin.xml:打造完美DeviceOwner应用配置

本文深入解析了Android企业级开发中DeviceOwner应用的核心配置文件AndroidManifest.xml与device_admin.xml。详细阐述了如何精准声明DeviceAdminReceiver、定义管理策略,并提供了通过ADB命令进行设置与验证的实战指南,帮助开发者构建权限完整、配置正确的设备所有者应用。

ice55的博客 682

java中rmi和corba的区别

java中rmi和corba的区别:1、定义接口:rmi自己定义接口(interface)corba生成idl代码,然后使用idlj -fall name.idl生成接口和几个类文件2、启动服务:rmi启动的是rmiregistry (port)默认1099corba启动的是tnameserv3、实现的继承类:rmi extends UnicastRemoteObjectcorba extends

Stone的专栏 5894

win11本地部署openclaw实操第1集

OpenClaw 是一款开源、本地优先、可自托管的 AI 智能体(AI Agent)网关 / 自动化框架,核心是让 AI 从 “只聊天、给建议” 变成 “能在你电脑上真做事” 的数字助手。

weixin_44626085的博客 7129

用RMI和CORBA开发JAVA分布式程序

 用RMI和CORBA开发JAVA分布式程序  RMI(远程方法调用)和CORBA(通用对象调用代理架构)是两个最重要,并广泛应用的分布对象系统架构。每个架构都有优劣,这两个架构没应用到从电子商务到医保系统等不同的领域。两者中任何一个被应用到项目中都是个困难的工作。这篇文章大概介绍了RMI和CORBA,并演示了如何开发一个远程下载文件的实例。       。介绍分布式对象系统

gunandrose的专栏 1592

学Simulink——线控转向(Steer‑By‑Wire, SBW)路感模拟与回正控制仿真

本文详细介绍了线控转向(SBW)系统的Simulink建模方法,重点讲解了路感模拟与回正控制的实现原理。文章首先分析了SBW系统结构,建立了方向盘和前轮的动力学方程;随后分步骤演示了Simulink建模过程,包括方向盘二阶动力学、前轮位置闭环控制、路感反馈计算等核心模块;最后通过仿真验证了转向跟随性能、路感反馈效果和自动回正功能。文中还提供了工程实现的关键参数和注意事项,为开发真实的SBW系统提供了实用指导。该模型可扩展应用于主动转向、故障注入等高级功能开发。

xiaoheshang_123的博客 42

AUTOSAR OS演示项目搭建与验证

请注意,以上代码只是一个简单的示例,用于说明AUTOSAR OS项目的搭建和验证过程。此外,AUTOSAR OS还提供了其他功能和API,如事件、消息队列和任务间通信等,可以根据实际需求进行使用。AUTOSAR OS是AUTOSAR架构中的一部分,它提供了一种可移植且可扩展的操作系统,用于管理嵌入式应用程序的任务和资源。通过以上步骤,我们成功搭建了一个基于AUTOSAR OS的演示项目,并验证了应用程序任务的执行顺序。3、打开app.c文件,并编写一个简单的应用程序,作为我们的示例任务。

weixin_50547796的博客 195

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

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

yamgmc的博客 156

【MATLAB-app】系列教程(含视频)第4、5、6课:实战_制作简单的图像处理软件

写作时间: 2020-12-27 我的教程目录 第1课:初步了解appdesigner 第2课:学会制作一个计算器 第3课:学习更多的控件(重点!) 第4课:实例1:制作一个图像处理软件 第5课:学习APPdesigner的设计精髓,框架 第6课:结合使用多种控件,函数等,丰富我们的实例1 第7课:app设计打包,完成工程应用导出 标题: 第4课:我的实例_学会制作一个图像处理软件 本文目录: 1.先看看我之前的一个工程 2.常用的基本组件控件 3.最常用且实用的控件的用法 -3.1 editfilel

wind 4055

java高级特性之RMI CORBR

RMI与CORBR是分布式网络编程两种方法    1.RMI较简单易用,仅支持java语言,服务扩展还行     2.CORBR复杂,支持多平台多语言,但服务扩展不足 COM/DCOM是微软推出的分布式组件技术,仅支持window平台,拥有微软广阔市场   RMI应用程序编译后会产生Stub和Skeleton     Stub存根担当远程调用中客户端的代理对象,即在客户端,调用服务端

Weirenren_027的专栏 1053

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

两篇RMI开发文档

原来做短信和彩信应用开发的时候接触过RMI,对怎么使用初步有了一定了解,但是如何开发还没有研究过,这两篇文章讲的浅显易懂,收藏下来: 用RMI和CORBA进行分布式Java编程 JDK5新版RMI编程指南...

lwz7512-RIA传播者 1008

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java C#.net C++分布式设计技术

在现在的服务程序设计中,分布式技术是用的越来越多了,本文就对我接触到的几种语言的分布式开发技术做一个介绍。 首先分布式是一种将大规模运算分布到多台机器上运行的方法,这样多台计算机可以同时进行计算进而提高计算效率,所以在使用分布式的时候我们需要提前分析需求和系统情况,得到效率低的根因在哪,如果是由于连接路径过长导致的慢使用分布式未必有效果。 既然分布式是一种思想,那么使用什么编程语言开发就不是一

tan_tan_1的专栏 2117

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

RMI /IIOP/CORBA

什么是RMI 分布式计算系统要求运行在不同地址空间不同主机上的对象互相调用。各种分布式系统都有自己的调用协议,如CORBA的IIOP(Internet InterORB Protocol), MTS的DCOM。那么EJB组件呢?在Java里提供了完整的sockets通讯接口,但sockets要求客户端和服务端必须进行应用级协议的编码交换数据,采用sockets是非常麻烦的。 一个代替Sockets

aawanghuan的专栏 1224

Java学习笔记——其它Java知识

1. JNLP(Java网络加载协议),它可以允许使用一组API及Ant等构建工具,在用户访问Web服务器时,Servlet通过响应生成应用程序及数据文件的jar包,下载传输到客户端去执行,然后再将结果返回服务器,由此节约服务器资源。下载文件运行时,需要提供签名保障安全。大致包含一个JNLP描述文件等的设置,利用了Java执行Runtime外部命令及Java中执行Ant的一些API。2. Ja

zhangren07的专栏 701

RMI JNDI CORRA

RMI Remote Method Invocation(远程方法调用),Java中进行分布式编程的基础技术,EJB技术也是基于RMI的。 JNDI Java Naming and Directory Interface(Java命名和目录服务接口),Java中使用目录和命名服务的技术规范,和JDBC类似,他由API和SPI构成。J2EE的目录服务使得Java客户端和Web层Serv...

wangqiaowqo的专栏 146

来学一学分布式系统核心:面向对象的分布式架构,分布式对象系统

面向对象的分布式架构 面向对象编程是非常流行的编程模式,因此,在分布式系统中,基于对象来设计分布式架构是自然而然的。 本章介绍面向对象的分布式架构。 基于对象的分布式架构 在基于对象的分布式系统中,对象的概念在分布式实现中起着极其关键的作用。从原理上来讲,一切都可以被作为对象抽象出来,而客户端将以调用对象的方式来获得服务和资源。 分布式对象之所以成为重要的范型,是因为它相对比较容易地把分布的特性隐藏在对象接口后面。此外,因为对象实际上可以是任何事务,所以它也是构建系统的强大范型。 面向对象技术于20世纪80

m0_58479800的博客 1931

Distributed Java Programming with RMI and CORBA

Distributed Java Programming with RMI and CORBAQusay H. MahmoudJanuary 2002 The Java Remote Method Invocation (RMI) mechanism and the Common Object Request Broker Architecture (CORBA) are the two

CanFly的专栏 1464
上一篇: 在JSP中操作文件
下一篇: Intel宣布加入到Eclipse
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值