基于CORBA的分布式平台.ppt_第1页
基于CORBA的分布式平台.ppt_第2页
基于CORBA的分布式平台.ppt_第3页
基于CORBA的分布式平台.ppt_第4页
基于CORBA的分布式平台.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,第二章 基于CORBA的分布式平台,苗启广,计算机学院,,4.7 CORBA编程Hello World例程,分布式HelloWord程序的操作,客户机调用HelloServer的sayhello()操作 ORB把调用传给为IDL接口注册的提供服务的对象 提供服务的sayhello()方法运行并返回Java String ORB将该String传回客户机 客户机打印string值,运行环境,运行环境由jdk1.3+idltojava 组成,具体的安装步骤如下: 安装JDK1.3: 从SUN公司下载jdk 1.3或者通过其他方式得到jdk 1.3进行安装,再设定相应的环境变量,在本文测试用的电脑上是如下所示: 下载idltojava: Java IDL编辑器(idltojava)在/products/jdk/idl/中单独提供。在JDK 1.3版中则提供了新的IDL编辑器idlj,内容,编辑IDL文件则用任何文本编辑器即可,具体的编写过程如下: 1、 编写 IDL 接口包括: l 如何编写简单的 IDL 接口定义; l 如何将 IDL 接口转换到 Java ; l idltojava 编译器生成的每个文件的用途 。 2、开发客户机应用程序,说明如何编写简单的客户机应用程序,包括: l 如何创建 ORB 对象 ; l 如何使用命名服务来取得初始的对象引用 ; l 如何调用 CORBA 对象上的操作 。,内容,3、开发客户机 Applet ,说明如何编写与客户机应用程序执行同样功能的客户机 applet 。 4、开发 Hello World 服务器,说明如何编写简单的服务器,包括: l 为服务器创建 ORB 对象 ; l 实例化服务程序并将它连接到 ORB ; l 通过命名服务来注册该服务程序 ; l 使服务器等待对服务程序的调用 。,编写 IDL 接口,IDL接口定义了应用程序中客户机部分和服务器部分之间的约定,同时指定可用的操作和属性 用来指定分布式应用程序的操作接口,与编程语言无关 编写实现代码前,必须将IDL接口映射到Java(自动完成) 实现映射后,IDL每条语句都转换为所选编程语言中的相应语句,4.7.1 编写 IDL 接口,启动自己熟悉的文本编辑器,创建名为 Hello.idl 的文件,编写如下代码: module HelloApp interface Hello string sayHello(); ; ; 可以看出用于 Hello World 的 IDL 非常简单,它的单一接口执 行单一操作。仅需执行三步: l 声明 CORBA IDL 模块 l 声明接口 l 声明操作,1、编写 Hello.idl,是一个名字空间,是相关接口和声明的容器,每条模块语句都被映射到一条Java Package语句,声明一个对象与其它对象的API约定,映射后,IDL中的每条interface语句都映射到一条Java Interface语句,服务器将代表调用他们的客户机执行的行为,每条操作语句都在所生成的JAVA接口中生成相应的方法语句,2、将 Hello.idl 从 IDL 映射到 Java,工具IDLtoJava读取IDL文件并创建所需的JAVA文件,执行: 进入命令行提示 将目录改为hello.idl文件所在的位置 输入编译器命令:idltojava hello.idl 或 idlj fall hello.idl 生成Helloapp目录,生成一些文件。,2、将 Hello.idl 从 IDL 映射到 Java,生成的五个主要文件分别是: _HelloImplBase.java:此抽象类是服务器 skeleton,为服务器提供基本 CORBA 功能。它实现 Hello.java 接口。服务器类 HelloServant 扩展 _HelloImplBase。 _HelloStub.java:该类是客户机 stub,为客户机提供 CORBA 功能。它实现 Hello.java 接口。 Hello.java :此接口包含 IDL 接口的 Java 版本。它包含方法 sayHello()。Hello.java 接口扩展 org.omg.CORBA.Object,也提供标准 CORBA 对象功能。 HelloHelper.java :此终态类提供辅助功能,其中特别有用的是narrow() 方法,可用于将 CORBA 对象引用强制转换为适当类型。 HelloHolder.java:此终态类保存类型 Hello 的公共实例成员,可提供对 out 和 inout 参数的操作。,Hello.java,代码如下所示: /* idltojava 生成的 Hello.java */ package HelloApp; public interface Hello extends org.omg.CORBA.Object String sayHello(); ,Hello.idl module HelloApp interface Hello string sayHello(); ;,2.6.2 编写客户机应用程序,HelloClient.java 程序源码: import HelloApp.*; import org.omg.CosNaming.*; import org.omg.CORBA.*; public class HelloClient public static void main(String args) try ORB orb = ORB.init(args, null); org.omg.CORBA.Object objRef = orb.resolve_initial_references(“NameService“); NamingContext ncRef = NamingContextHelper.narrow(objRef); NameComponent nc = new NameComponent(“Hello“, “); NameComponent path = nc; Hello helloRef = HelloHelper.narrow(ncRef.resolve(path); String Hello = helloRef.sayHello(); System.out.println(Hello); catch(Exception e) System.out.println(“ERROR : “ + e); e.printStackTrace(System.out); ,CORBA客户机需要本地ORB对象来执行其所有编组和IIOP操作,4.7.3 编写 Hello World 服务器程序,import HelloApp.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*; public class HelloServer public static void main(String args) try ORB orb = ORB.init(args, null); HelloServant helloRef = new HelloServant(); orb.connect(helloRef); org.omg.CORBA.Object objRef = orb.resolve_initial_references(“NameService“); NamingContext ncRef = NamingContextHelper.narrow(objRef); NameComponent nc = new NameComponent(“Hello“, “); NameComponent path = nc; ncRef.rebind(path, helloRef); java.lang.Object sync = new java.lang.Object(); synchronized(sync) sync.wait(); catch(Exception e) System.err.println(“ERROR: “ + e); e.printStackTrace(System.out); ,class HelloServant extends _HelloImplBase / sayHello() 方法。 public String sayHello() /加入方法实现。 return “nHello world!n“; ,4.7.4 编译和运行,1.客户机安装 创建Client新目录,将helloclient.java拷入 2.编译客户机应用程序 进入client目录, 运行Java编译器 javec helloclient.java 3.服务器安装 创建server目录,将helloserver.java和helloclent.class拷入 将helloapp目录内容拷入 4.编译服务器 进入server目录,运行java编译器 javac helloserve.java,4.7.4 编译和运行,5.运行 l 启动 Java IDL 名字服务器: tnameserv -ORBInitialPort

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论