已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CORBA学习报告 CORBA,是一个很古老的技术,甚至诞生于Java之前,不过随着WebService、SOA、RMI等等技术的出现,CORBA由于过于复杂而渐渐淡出了人们的视线,不过在一些交互性很强的系统异构应用领域,CORBA似乎很重要,比如中国联通、移动、美国的数字电视系统应用领域,是CORBA把整个系统核心部分集成起来的。如果没有异构的、需要预留标准接口的、交互性很强的应用,你不应该考虑使用COBRA。下面是经过我的学习之后对CORBA所做的简单总结:通用对象代理体系结构CORBA(CommonObjectRequestBrokerArchitecture)是对象管理组织所定义的用来实现现今大量硬件、软件之间互操作的解决方案,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实例:一、定义IDLmodule HelloAppinterfaceHellostring sayHello();onewayvoidshutdown();没有IDL的专门的开发工具,写起来容易出错,而且不美观,IDEA勉强支持语法高亮,但不支持格式化和语法校验!二、从IDL生成存根进入IDL文件存放目录,然后执行:idlj -fall Hello.idl会生成一批Java文件:helloCorbasrcHelloAppHelloPOA.java_HelloStub.javaHelloHolder.javaHelloHelper.javaHello.javaHelloOperations.java三、实现IDL接口,开发服务端程序importHelloApp.Hello;importHelloApp.HelloHelper;importHelloApp.HelloPOA;importorg.omg.CORBA.ORB;importorg.omg.CosNaming.NameComponent;importorg.omg.CosNaming.NamingContextExt;importorg.omg.CosNaming.NamingContextExtHelper;importorg.omg.PortableServer.POA;importorg.omg.PortableServer.POAHelper;classHelloImplextendsHelloPOA privateORB orb;publicvoidsetORB(ORB orb_val) orb = orb_val;/ implement sayHello() methodpublicString sayHello() returnnHello world !n;/ implement shutdown() methodpublicvoidshutdown() orb.shutdown(false);publicclassHelloServer publicstaticvoidmain(String args) try/创建一个ORB实例ORB orb = ORB.init(args,null);/得到一个RootPOA的引用,并激活POAManagerPOA rootpoa = POAHelper.narrow(orb.resolve_initial_references(RootPOA);rootpoa.the_POAManager().activate();/ create servant and register it with the ORB/创建一个HelloImpl实例(servant),并注册到ORB上HelloImpl helloImpl =newHelloImpl();helloImpl.setORB(orb);/从服务中得到对象的引用org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);Hello href = HelloHelper.narrow(ref);/得到一个根名称的上下文org.omg.CORBA.Object objRef = orb.resolve_initial_references(NameService);/ Use NamingContextExt which is part of the Interoperable/ Naming Service (INS) specification.NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);/在命名上下文中绑定这个对象String name =Hello;NameComponent path = ncRef.to_name(name);ncRef.rebind(path, href);System.out.println(HelloServer ready and waiting .);/启动线程服务,等待客户端的调用orb.run();catch(Exception e) System.err.println(ERROR: + e);e.printStackTrace(System.out);System.out.println(HelloServer Exiting .);四、实现CORBA的客户端importHelloApp.Hello;importHelloApp.HelloHelper;importorg.omg.CORBA.ORB;importorg.omg.CosNaming.NamingContextExt;importorg.omg.CosNaming.NamingContextExtHelper;publicclassHelloClient staticHello helloImpl;publicstaticvoidmain(String args) try/创建一个ORB实例ORB orb = ORB.init(args,null);/获取根名称上下文org.omg.CORBA.Object objRef = orb.resolve_initial_references(NameService);/ Use NamingContextExt instead of NamingContext. This is/ part of the Interoperable naming Service.NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);/从命名上下文中获取接口实现对象String name =Hello;helloImpl = HelloHelper.narrow(ncRef.resolve_str(name);/调用接口对象的方法System.out.println(Obtained a handle on server object: + helloImpl);System.out.println(helloImpl.sayHello();helloImpl.shutdown();catch(Exception e) System.out.println(ERROR : + e);e.printStackTrace(System.out);五、运行1)运行CORBA服务orbd -ORBInitialPort 1050 -ORBInitialHost 172)运行CORBA应用的服务端java HelloServer -ORBInitialPort 1050输出:HelloServer ready and waiting .HelloServer Exiting .3)运行CORBA应用的客户端java HelloClient -ORBInitialHost 17 -ORBInitialPort 1050Obtained a handle on server object: IOR:000000000000001749444c3a48656c6c6f4170702f48656c6c6f3a312e30000000000001000000000000008a000102000000000f3139322e3136382e31
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 惠州工贸安全员安全生产知识测试及答案
- 建筑设计理念知识自测题及解答
- 机械制造工艺规范操作指南与习题集
- 健康生活营养知识趣味测试及答案手册
- 家居装修设计技巧测试题及答案全攻略
- 机械工程实践应用能力测试题集及详细答案解析
- 建筑设计理念与技巧测试试题及答案集
- 健康饮食计划执行测试与答案指南
- 淮北护士考试题库及答案
- 会计算力考试题及答案
- 生产现场5S管理实施方案详解
- 瑞幸咖啡财务舞弊案例分析
- 《人工智能语言与伦理》章节测试题及答案
- 无人机生产设备选型与维护方案
- 北京某机场交通中心内装修施工组织设计方案
- 储能电池产品售后服务与维保方案
- 培训机构销售培训
- 2025年传媒市场调研师资格认证考试试题及答案解析
- 入团课件模板
- 2024年餐饮外卖绿色包装解决方案商家行动指南(第一阶段)-美团青山计划
- 2025年公文写作考试题库与答案
评论
0/150
提交评论