CORBA版HelloWorld
更新时间:2023-12-31 21:05:01 阅读量: 教育文库 文档下载
- OMG的CORBA推荐度:
- 相关推荐
CORBA学习报告
CORBA,是一个很古老的技术,甚至诞生于Java之前,不过随着WebService、SOA、RMI等等技术的出现,CORBA由于过于复杂而渐渐淡出了人们的视线,不过在一些交互性很强的系统异构应用领域,CORBA似乎很重要,比如中国联通、移动、美国的数字电视系统应用领域,是CORBA把整个系统核心部分集成起来的。如果没有异构的、需要预留标准接口的、交互性很强的应用,你不应该考虑使用COBRA。
下面是经过我的学习之后对CORBA所做的简单总结:
通用对象代理体系结构CORBA(Common Object Request Broker Architecture)是对象管理组织所定义的用来实现现今大量硬件、软件之间互操作的解决方案,CORBA也是迈向面向对象标准化和互操作的重要一步。
CORBA技术简介
简单地说,CORBA允许应用之间相互通信,而不管它们存在于哪里以及是谁设计的。CORBA1.1于1991年由OMG发布,其中定义了接口定义语言(IDL)以及在对象请求代理(ORB)中实现客户对象与服务器对象之间交互的应用编程接口(API)。CORBA2.0于1994年发布,规定了各个供应商之间的ORB的通信规则。
CORBA标准主要分为三个部分:接口定义语言(IDL)、对象请求代理(ORB)以及ORB之间的互操作协议IIOP。
ORB是对象之间建立Client/Server关系的中间件。使用ORB,客户可以透明地调用一个服务对象上的方法,这个服务对象可以在本地,也可以在通过网络连接的其他机器上。ORB截获这一调用同时负责查找实现服务的对象并向其传递参数、调用方法返回最终结果。客户并不知道服务对象位于什么地方,它的编程语言和操作系统是什么,也不知道不属于对象接口的其他系统部分。这样,ORB在异构分布环境下为不同机器上的应用提供了互操作性,并无缝地集成了多种对象系统。
在开发传统的Client/Server应用时,开发者使用他们自己设计的或一个公认的标准来定义用于设备之间通信的协议。协议的定义依赖于实现语言、网络传输和许多其他因素,而ORB的出现简化了这一过程。使用ORB时,协议是使用接口定义语言(IDL)定义的,而IDL是独立于语言的。并且ORB提供很强的灵活性,它使程序员选择最适合的操作系统、执行环境,甚至系统各个组件也可以采用不同的编程语言实现。更重要的是,它允许现有组件的集成。在一个基于ORB的解决方案中,开发者可以使用与创建新对象一样的IDL对遗留系统进行建模,他们创建“包装”代码以在标准化的软件总线与遗留系统接口之间传递信息。
使用CORBA,用户可以透明地访问信息,并不需要知道信息存在于什么软件中、使用什么硬件平台,以及位于企业网络的什么地方。作为面向对象系统的通信核心,CORBA为今天的计算环境带来了真正的互操作性。
CORBA与JAVA的相互关系
CORBA不只意味着对象请求代理(ORB),它还是非常全面的分布式对象平台。CORBA使JAVA应用可以跨越网络、语言以及操作系统,并为JAVA提供了一组分布服务,如分布式自我观察、动态发现、事务、关系、安全和命名等。
JAVA不仅是一种语言,它还是一个动态代码系统,它对运行对象来说是一个可移植的虚拟机(JVM)。JAVA为开发、管理、发布Client/Server应用提供了更简单的方式。人们可以通过将应用放在一个Web服务器上将这一应用发布给成千上万个用户,而不必关心它的安装和升级。JAVA还非常适合服务器的开发,它可以动态地将服务代码移向最需要它们的地方。
JAVA将会使CORBA对象能够运行在从主机、网络计算机到蜂窝电话等可编程的各种机器上,并简化了大型CORBA系统的代码发布。对客户和服务对象来说JAVA是很理想的编程语言,JAVA内置的多线程、垃圾收集和错误处理使编写健壮的网络对象变得很容易。
这两种对象模型可以很好地相互补充,CORBA处理网络的透明性,JAVA处理实现的透明性,CORBA为JAVA可移植应用环境提供了一个分布式的结构。
下面是我经过阅读SUN的CORBA文档,所做的一个完整的HelloWorld实例: 一、定义IDL
moduleHelloApp{ interface Hello{
string sayHello();
oneway void shutdown(); }; };
没有IDL的专门的开发工具,写起来容易出错,而且不美观,IDEA勉强支持语法高亮,但不支持格式化和语法校验! 二、从IDL生成存根 进入IDL文件存放目录,然后执行:idlj -fall Hello.idl 会生成一批Java文件: helloCorba\\src\\HelloApp HelloPOA.java _HelloStub.java HelloHolder.java HelloHelper.java Hello.java HelloOperations.java 三、实现IDL接口,开发服务端程序 import HelloApp.Hello; import HelloApp.HelloHelper; import HelloApp.HelloPOA; import org.omg.CORBA.ORB; import org.omg.CosNaming.NameComponent; import org.omg.CosNaming.NamingContextExt; import org.omg.CosNaming.NamingContextExtHelper; import org.omg.PortableServer.POA; import org.omg.PortableServer.POAHelper; class HelloImpl extends HelloPOA { private ORB orb; public void setORB(ORB orb_val) { orb = orb_val; } // implement sayHello() method public String sayHello() { return \world !!\\n\ } // implement shutdown() method public void shutdown() { orb.shutdown(false); } } public class HelloServer { public static void main(String args[]) { try { //创建一个ORB实例 ORB orb = ORB.init(args, null); //得到一个RootPOA的引用,并激活POAManager POA rootpoa = POAHelper.narrow(orb.resolve_initial_references(\OA\ rootpoa.the_POAManager().activate(); // create servant and register it with the ORB //创建一个HelloImpl实例(servant),并注册到ORB上 HelloImplhelloImpl = new HelloImpl(); helloImpl.setORB(orb); //从服务中得到对象的引用 org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl); Hello href = HelloHelper.narrow(ref); //得到一个根名称的上下文 org.omg.CORBA.ObjectobjRef = orb.resolve_initial_references(\rvice\ // Use NamingContextExt which is part of the Interoperable // Naming Service (INS) specification. NamingContextExtncRef = NamingContextExtHelper.narrow(objRef); //在命名上下文中绑定这个对象 String name = \ NameComponent path[] = ncRef.to_name(name); ncRef.rebind(path, href); System.out.println(\ready and waiting ...\ //启动线程服务,等待客户端的调用 orb.run(); }catch (Exception e) { System.err.println(\\e); e.printStackTrace(System.out); } System.out.println(\Exiting ...\ } } 四、实现CORBA的客户端 import HelloApp.Hello; import HelloApp.HelloHelper; import org.omg.CORBA.ORB; import org.omg.CosNaming.NamingContextExt; import org.omg.CosNaming.NamingContextExtHelper; public class HelloClient { static Hello helloImpl; public static void main(String args[]) { try { //创建一个ORB实例 ORB orb = ORB.init(args, null); //获取根名称上下文 org.omg.CORBA.ObjectobjRef = orb.resolve_initial_references(\rvice\ // Use NamingContextExt instead of NamingContext. This is // part of the Interoperable naming Service. NamingContextExtncRef = NamingContextExtHelper.narrow(objRef); //从命名上下文中获取接口实现对象 String name = \ helloImpl = HelloHelper.narrow(ncRef.resolve_str(name)); //调用接口对象的方法 System.out.println(\a handle on server object: \helloImpl); System.out.println(helloImpl.sayHello()); helloImpl.shutdown(); } catch (Exception e) { System.out.println(\: \e); e.printStackTrace(System.out); } } } 五、运行 1)运行CORBA服务 orbd -ORBInitialPort 1050 -ORBInitialHost 192.168.14.117 2)运行CORBA应用的服务端 javaHelloServer -ORBInitialPort 1050 输出: HelloServer ready and waiting ... HelloServerExiting ... 3)运行CORBA应用的客户端 javaHelloClient-ORBInitialHost 192.168.14.117 -ORBInitialPort 1050 Obtained a handle on server object: IOR:000000000000001749444c3a48656c6c6f4170702f48656c6c6f3a312e30000000000001000000000000008a000102000000000f3139322e3136382e31342e313137000006db000000000031afabcb00000000206d3bb80000000001000000000000000100000008526f6f74504f410000000008000000010000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002 Hello world !!
String name = \ helloImpl = HelloHelper.narrow(ncRef.resolve_str(name)); //调用接口对象的方法 System.out.println(\a handle on server object: \helloImpl); System.out.println(helloImpl.sayHello()); helloImpl.shutdown(); } catch (Exception e) { System.out.println(\: \e); e.printStackTrace(System.out); } } } 五、运行 1)运行CORBA服务 orbd -ORBInitialPort 1050 -ORBInitialHost 192.168.14.117 2)运行CORBA应用的服务端 javaHelloServer -ORBInitialPort 1050 输出: HelloServer ready and waiting ... HelloServerExiting ... 3)运行CORBA应用的客户端 javaHelloClient-ORBInitialHost 192.168.14.117 -ORBInitialPort 1050 Obtained a handle on server object: IOR:000000000000001749444c3a48656c6c6f4170702f48656c6c6f3a312e30000000000001000000000000008a000102000000000f3139322e3136382e31342e313137000006db000000000031afabcb00000000206d3bb80000000001000000000000000100000008526f6f74504f410000000008000000010000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002 Hello world !!
正在阅读:
CORBA版HelloWorld12-31
2010年全国职业院校技能大赛中职组电工电子技术技能比赛规程04-28
2020高考数学大一轮复习第六章不等式推理与证明第一节不等式的性质及一元二次不等式检测理新人教A版09-03
地理时事热点微专题:透过脱贫攻坚战看乡村的振兴(附:时事背景及思维导图)05-04
励志演讲稿:青年时期树立人生目标05-09
14级能动学院2015-2016学年奖学金汇总表(确定版)05-27
医务科2017年工作思路Word编辑07-25
安徽省合肥市长丰县2019-2020学年八年级上学期期末语文试题03-19
一件挂饰作文1000字07-07
乌镇、拈花湾考察心得05-20
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- HelloWorld
- CORBA
- Memcached使用点滴
- 2011年09级学生暑期社会实践(调查)活动实施方案
- Suse Linux11升级Openssh6.7笔记
- 环境保护行政执法的现状及对策
- 电磁场与电磁波复习题
- 编译原理教程课西安电子科大出版社第三版后习题答案 - 第二章
- 离职人员工作交接表
- 救护队考核试题
- 软件工程课后参考答案 - 图文
- 《货币银行学》复习题及参考答案 2
- 启示的作文
- 喹禾糠酯
- 通信工程专业人才培养方案
- (出题)与圆有关的切线习题 - 经典
- 腈的合成-060303讲解
- PEP小学英语三年级上册各单元练习题
- 暴力革命还是和平改良更有利于中国近代社会的发展
- 数学知识点重庆市云阳盛堡初级中学-八年级数学下学期第一次月考试题(精选资料) 新人教版
- 高一实验分组一览表
- 全省第十一届教师自制多媒体教育软件评比活动获奖作品 - 图文