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

浅谈分布式开发 若某一个销售系统:库存信息存储在一个应用系统中,订单系统又存储在另一个应用系统,客户信息在第三个系统中,那若把三者整合,则如何实现呢?   对于目前的主分店中的收银软件等情况,分店与主店是如何通信呢?   以及目前的售票系统,全国地区又是如何通信呢?      因此:我们平常开发,根本满足不了这种方式。   回头细想一下:平常开发:纵向开发从页面知道数据库层,完全在一个服务器中,并且完全 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> CORBA CORBA是OMG组织针对企业应用上的分布式程序开发标准。重要的一点是CORBA仅仅是个规范。CORBA应用以ORB而知名。市场上已经出现了几个CORBA产品如VISIBROKE,ORBIX等。JAVAIDL是在JDK1。3及以上版本核心包的另一个应用。 CORBA设计的与平台和语言无关(注:与WEB SERVICE类似),因此CORBA能运行在任何平台上,能应用在任何网络里,能用任何支持IDL接口的语言编写。 和RMI类似,CORBA对象也需要用接口描述说明。但是CORBA接口需要用一种和C 类似的IDL来描述,需要指出的是IDL不是一种程序语言。 CORBA应用起步 开发CORBA应用程序主要有以下几个步骤: 1 定义IDL接口 2 将IDL转换成JAVA 3 应用接口 4 开发服务器端 5 开发客护端 6 运行名称服务器,服务器和客户程序 我们现在一步一步地讲述用CORBA开发文件传输的应用,和RMI相似。我们将用到JAVAIDL,在JDK1。3包里有。 定义接口 定义接口的时候,我们需要考虑服务器支持的操作类型。在文件传输应用里,需要用到一个下载文件的方法。例5有了这个接口FileInterface。客户端将调用这个方法下载文件。 IDL里的sequence和数组比较接近,但它不是个固定的长度。 注意方法downloadFile的String 参数类型有三种传输模式:in(从客户端到服务器),out(从服务器端到客户端),inout(双向) Code Sample 5: FileInterface.idl interface FileInterface { typedef sequence Data; Data downloadFile(in string fileName); }; 接口定义完成后,你可以用JDK1。3带的IDLJ编译器编译生成JAVA。 Idlj编译器带有一些参数,如-f参数 可以生成你指定的客护端代码或服务端骨干码,或两者。在这个例子里,我们将在两台机器里,所以我们用-fserver,-fclient生成服务器端,客户端JAVA代码。 下面我们编译接口生成服务器端代码,用下面命令: prompt> idlj -fserver FileInterface.idl 这个命令将生成Skeleton,holder,helper和其它类。生成类_FileInterfaceImplBase,我们将利用这个类的接口来实现应用。 应用接口 下面我们将实现下载方法。 Code Sample 6: FileServant.java import java.io.*; public class FileServant extends _FileInterfaceImplBase { public byte[] downloadFile(String fileName){ File file = new File(fileName); byte buffer[] = new byte[(int)file.length()]; try { BufferedInputStream input = new BufferedInputStream(new FileInputStream(fileName)); input.read(buffer,0,buffer.length); input.close(); } catch(Exception e) { System.out.println("FileServant Error: " e.getMessage()); e.printStackTrace(); } return(buffer); } } 服务器端开发 下一步我们开发服务器端。包括以下几个步骤: 1 初始化ORB 2 创建一个FileServant对象 3 在CORBA名称服务里注册对象名 4 打印一个状态信息 5 等待客户端请求 Code Sample 7: FileServer.java import java.io.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*; public class FileServer { public static void main(String args[]) { try{ // create and initialize the ORB ORB orb = ORB.init(args, null); // create the servant and register it with the ORB FileServant fileRef = new FileServant(); orb.connect(fileRef); // get the root naming context org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContext ncRef = NamingContextHelper.narrow(objRef); // Bind the object reference in naming NameComponent nc = new NameComponent("FileTransfer", " "); NameComponent path[] = {nc}; ncRef.rebind(path, fileRef); System.out.println("Server started...."); // Wait for invocations from clients java.lang.Object sync = new java.lang.Object(); synchronized(sync){ sync.wait(); } } catch(Exception e) { System.err.println("ERROR: " e.getMessage()); e.printStackTrace(System.out); } } } 一旦FileServer有了ORB(对象请求代理),它就能注册CORBA服务。它用OMG制定的COS命名服务注册。它从命名服务根开始,返回一个生成的CORBA对象。为了引用 NamingContext对象,必须narrowed down一个合适的类型。如下做: NamingContext ncRef = NamingContextHelper.narrow(objRef); 对象ncRef object is 现在就是 org.omg.CosNaming.NamingContext 的实例.你可以用它来注册一个代用绑定方法明明服务的CORBA服务。 开发客户端 下一步是开发一个客户端应用,获得命名服务,访问和查找别的服务。当得到FileTransfer服务后,就可以调用下载方法了。 Code Sample 8: FileClient import java.io.*; import java.util.*; import org.omg.CosNaming.*; import org.omg.CORBA.*; public class FileClient { public static void main(String argv[]) { try { // create and initialize the ORB ORB orb = ORB.init(argv, null); // get the root naming context org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContext ncRef = NamingContextHelper.narrow(objRef); NameComponent nc = new NameComponent("FileTransfer", " "); // Resolve the object reference in naming NameComponent path[] = {nc}; FileInterfaceOperations fileRef = FileInterfaceHelper.narrow(ncRef.resolve(path)); if(argv.length < 1) { System.out.println("Usage: java FileClient filename"); } // save the file File file = new File(argv[0]); byte data[] = fileRef.downloadFile(argv[0]); BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(argv[0])); output.write(data, 0, data.length); output.flush(); output.close(); } catch(Exception e) { System.out.println("FileClient Error: " e.getMessage()); e.printStackTrace(); } } } 运行应用 最后一步是运行应用。有几个步骤: 1 运行CORBA命名服务。用命令tnameserv.来做。却省端口是900,如果900不能用,你可以用另一端口2500,命令如下: prompt> tnameserv -ORBinitialPort 2500 2 运行服务器 当在却省端口时 prompt> java FileServer 当在其它端口如2500时 prompt> java FileServer -ORBInitialPort 2500 3 生成客户端干码 prompt> idlj -fclient FileInterface.idl 4 运行客户端,假设在2500端口 prompt> java FileClient hello.txt -ORBInitialPort 2500 hello.txt是要下载的文件 如果命名服务在4500端口 prompt> java FileClient hello.txt -ORBInitialHost gosling -ORBInitialPort 4500 我们还可以在ORB初始化指定一些参数:如 ORB orb = ORB.init(argv, null); 指定CORBA服务器,和命名端口如下: Properties props = new Properties(); props.put("org.omg.CORBA.ORBInitialHost", "gosling"); props.put("orb.omg.CORBA.ORBInitialPort", "2500"); ORB orb = ORB.init(args, props); 测试 在文件传输应用中,客户端需要先知道要传输文件的名字,服务器端没有列表显示文件名的方法,你可以增加方法扩展应用。当然,你也可以开发UI客户端代替命令行。当客户端启动后,它调用服务器端的方法显示文件列表,就可以让用户选择文件来下载它。如下图: Figure 1: GUI-based File Transfer Client CORBA和RMI比较 显而易见,RMI比CORBA简单,开发者不需要熟悉IDL。通常,CORBA与RMI有下列不同: 接口定义不同,CORBA用IDL,而RMI用JAVA。 CORBA的参数有输入,输出类型。 CORBA设计与语言无关。是不同语言开发系统的桥梁。 CORBA对象不能垃圾收集。象我们提到的那样,CORBA与语言无关。象C 不支持垃圾收集那样。这是CORBA的缺点。一旦我们创建CORBA对象,它将一直存在,知道你亲自去处它。而RMI是自动收集。 结论 我们可以用RMI和CORBA开发分布式应用。它们在第一步定义对象接口很接近。 开发系统RMI和CORBA中做选择其一取决于项目需要。我希望这篇文章能给你开发分布式应用的信息并能在选择分布式架构时能给你些参考。 翻译不当之处,请大家批评指正,谢谢! My mail:lisong@anyi.com.cn
构建分布式酒店预订系统:Java RMI和CORBA的应用 本文还有配套的精品资源,点击获取 简介:分布式通信对于构建大规模、高可用性的IT系统至关重要。本课程项目“Distributed-Communication”通过Java平台上的远程方法调用(RMI)和公共对象请求代理架构(CORBA)技术,实现了一个酒店预订系统。该系统涵盖了一系列组件,如预订服务器、用户界面、数据库、认证与授权以及负载均衡。项目同时探讨了性能优化、容错与... 阅读详情

相关推荐

基于Java RMI与CORBA的分布式军舰游戏实战项目

在军舰游戏的分布式实现中,服务端需要对外暴露一组标准化的操作接口,供多个客户端并发访问。这些接口不仅要满足基本的游戏逻辑需求,还需兼顾扩展性、安全性与性能表现。借助Java RMI的能力,我们可以将这些操作封装为远程方法,实现跨JVM调用。在分布式系统尤其是CORBA(Common Object Request Broker Architecture)架构中,接口定义语言(Interface Definition Language, IDL)是实现跨平台、跨语言通信的核心工具。

weixin_35752233的博客 1009

编写基于RMI/IIOP的分布式应用或系统的运行步骤

1----配置环境 已安装JDK及添加环境变量 即 命令行下输入java -version显示成功。 2----已有编写好的程序 编译通过,即在项目的bin文件夹下有.class文件 3----转到项目文件夹,在地址栏,输入cmd启动命令行(如下图) (1)进行编译远程对象 (2)再进行三步就能启动应用啦(如下) 分别在项目文件夹下打开三个命令行窗口,分别依次输入...

Iris54Iris的博客 420

HFSS仿真平行线定向耦合器学习笔记

材料:FR4(玻璃纤维环氧树脂),介电常数:4.4,损耗角正切:0.02,厚度0.8mm。扫频方式:快速扫频,扫频范围:1.0GHz~3.0GHz,步进:0.01GHz。端口2是端口1关于Y轴对称,端口3,端口4是端口1和端口2关于X轴对称得到。求解中心频率:2.0GHz,迭代次数:20,收敛误差为0.02。右键设置边界条件----辐射边界。激励方式:集总端口激励。

qq_36521926的博客 4493

CORBA知识扫盲

CORBA(公用对象请求代理体系)是OMG(对象管理组织)于1991年提出的基于对象技术的分布计算应用软件体系结构。CORBA标准主要分为三个部分:接口定义语言(IDL)、对象请求代理(ORB),以及ORB之间的互操作协议IIOP,核心是对象请求代理。CORBA可以抽象系统平台、网络通讯及编程语言的差异。通过在CORBA技术规范中定义多种类型的服务,如名字服务(Naming Service)、事...

highPony的博客 587

了解你的GPU:深入探讨AMD SMI

2024年9月17日 作者:Matt Elliott对于使用AMD硬件的系统管理员和高级用户来说,性能优化和高效的资源监控至关重要。AMD系统管理界面命令行工具`amd-smi`正是为了解决这些需求而设计的。amd-smi是一个多功能的命令行工具,专门用于管理和监控AMD硬件,主要侧重于GPU。作为未来取代`rocm-smi`的工具,`amd-smi`有望成为跨广泛设备的AMD硬件管理的主要工具。

数字人生 4527

YOLOv8损失函数升级:从CIoU到Wise-IoU v3的实战调优与避坑指南

本文详细介绍了如何将YOLOv8的损失函数从CIoU升级到Wise-IoU v3,以提升目标检测性能,特别是在小目标检测和样本不均衡场景下的表现。通过实战调优步骤和避坑指南,帮助开发者有效应用Wise-IoU v3的动态聚焦机制和单调性控制,显著提升模型精度和训练稳定性。

weixin_33737774的博客 590

CORBA程序——HelloWorld

一、Java版CORBA程序1——HelloWorld 1.编写IDL接口HelloWorld.idl module sample{ interface HelloWorld{ string sayHello(); }; }; 2.在dos下使用X:\corba>idlj –fall HelloWorld.idl命令编译idl文件,生成桩文件和骨架文件,该过程是将idl文件转化...

weixin_43759342的博客 681

OpenCASCADE(OCC)读取 STEP 模型文件并在MFC中显示

OpenCASCADE(OCC)读取 STEP 模型文件并在MFC中显示

weixin_61900468的博客 1万+

使用RMI和CORBA进行分布式java程序设计

RMI和corba是两种最重要和使用最广泛的分布式对象系统。 每种都有它的长处和短处。这两种系统都在从电子商务到卫生保健等不同的行业成功的使用。在项目中使用这两种分布机制中的任何一种都是一项很困难的任务。本文介绍了RMI和corba的机理和最主要的是显示了如何开发一个有用的程序(一个从远程站点下载文件的程序)。于是有以下内容: 一个分布式系统的简介 一个RMI和corba的简介 让你体验开发一个R

波波熊的专栏 1143

Unity URP项目里Post Processing死活没效果?别慌,这5个坑我帮你踩过了

本文详细解析了Unity URP项目中Post Processing效果失效的五大常见问题,包括渲染管线配置冲突、Volume作用域误判、摄像机参数漏配、Layer层级冲突和Profile引用异常。通过实际项目案例和代码示例,提供专业级解决方案,帮助开发者快速排查并修复后处理效果不生效的问题。

weixin_33721427的博客 334

VS code 调试显示preLaunchTask“g++“已终止,退出代码为-1。 生成‘... .exe‘文件错误

总结: 以后每个工程都需要按照这样的流程:创建一个.c/.cpp文件 -> F5运行 -> 配置tasks.json文件-> launch.json文件 -> 运行

qq_45151652的博客 2517

RMI与CORBA在Java中的应用

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

Stone的专栏 3334

4、高光图像滤镜显著改善文本图像的光学字符识别

本文介绍了高光图像滤镜在光学字符识别(OCR)中的应用,详细探讨了其技术原理、实现步骤和在多种场景下的效果。通过增强文本图像的边缘和对比度,高光滤镜显著提升了OCR的识别率,尤其适用于扫描文档、手写笔记和低质量图像。实验结果表明,该方法在不同类型的文本图像中均表现出色,并提出了未来优化方向,如深度学习集成和多模态融合,为OCR技术的发展提供了新的可能性。

ooo22的博客 97

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

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 406

【第2章】ComfyUI安装(配置要求/一键安装/快速上手/生成第一张图)ComfyUI基础入门教程

ComfyUI安装教程,内容涵盖:电脑配置要求、安装方式、软件&插件升级方式、打开ComfyUI、生成第一张AI图片...

聚梦小课堂 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 296

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

RMI-IIOP:RMI 和CORBA的集成解决方案

RMI-IIOP:RMI 和CORBA的集成解决方案    最近要研究EJB了,RMI-IIOP这个概念一定要研究学习下,最为分布式设计的基础,掌握RMI-IIOP对EJB运行的机制才会更深入。下面就来总结下学习心得吧!      RMI-IIOP 概览      RMI-IIOP 让您仅需极少修改就可以在 IIOP 上运行RMI调用。借助于RMI-IIOP,您可以编写简单易懂的 Java

liyangbing315的专栏 3193

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

CORBA与RMI的比较 及 实例

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

iteye_5095的博客 479

A Detailed Comparison of CORBA, DCOM and Java/RMI

A Detailed Comparison of CORBA, DCOM and Java/RMI(with specific code examples)Gopalan Suresh RajIntroductionDistributed object computing extends an object-oriented programming system by allowi

学习笔记 1811

软考:CORBA架构

个人小结:IPC,进程间通信,Socket应用在不同机器之间的通信RPC是一种技术思想而非一种规范RPC,远程过程调用中间件。所以后面出现了CORBA架构,但是随着Java的出现,EJB框架,自身就支持了RPC调用。RPC可以解决后台的瓶颈问题,就是说传统的RPC,需要特定的框架来支持。说白了,就是如何传递对象,后面使用XML传递,再后来,使用Web Service SOAP协议来描述,通过HTTP、TCF或者传输协议进行传递。

LeonNo11的博客 1649

基于CORBA的分布式程序设计(十一)

第八章  附录8.1  CORBA 版本软件市场中能够见到的CORBA中间件产品很多,但基于不同公司的产品战略以及研发方向,各个产品在服务性能、对高级语言的支持和所依赖的系统平台方面有很大区别。以下是对主要产品在几方面进行了分析(参见表1),可供参考。主要中间件产品 8.2目前最新的CORBA产品:MICO、ORBacus、ORBacus 3、The ACE ORB (

helloworlder的专栏 2460

Atitit.分布式远程调用  rpc  rmi  CORBA的关系

Atitit.分布式远程调用  rpc  rmi  CORBA的关系     1. 远程调用(包括rpc,rmi,rest)1 2. 分布式调用大体上就分为两类,RPC式的,REST式的1 3. RPC(远程过程调用)是什么 1 4. 传输的数据2 5. 序列化与反序列化3 6. ref  谁能用通俗的语言解释一下什么是 RPC 框架? - Java - 知乎

attilax的专栏 791
上一篇: 体验流调试的威力
下一篇: 用RMI和CORBA开发JAVA分布式程序
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值