第二章 基于CORBA的分布式平台 苗启广 qgmiao@mail.xidian.edu.cn 计算机学院.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

Java 大学实用教程 ( 第 3 版 ) 主讲:程继洪 第 1 章 Java 语言概述  本章导读 Java 语言的诞生Java 语言的诞生 学习 Java 的必要性 学习 Java 的必要性 Java 的特点及与 C/C++ 之关系Java 的特点及与 C/C++ 之关系.
第 2 章 Java 运行环境搭建 2.1 Java 的运行系统 2.1 Java 的运行系统 2.2 JDK 的安装与配置2.2 JDK 的安装与配置 2.3 Java 开发工具包 2.4 Java 源文件编辑环境的选择 2.5 Application 和 Applet 程序的编写与运行.
1 Java 语言程序设计 计算机系 鲍金玲. 2 引子 甲骨文 甲骨文是全球最大的信息管理软件及服务供应商,成立于 1977 年,公司总部 设在美国加利福尼亚州的红木城( Redwood Shores ),全球员工达 名, 包括 名开发人员、 7500 多名技术支持人员和.
Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
第一章 Java 程序设计技术 概述  什么是 Java 语言  一个简单的 Java 程序  程序的编译和运行  常见错误  使用 Java 核心 API 文档.
程序设计语言基础 软件工程系 秦晓燕. 课程目标 了解面向对象程序设计的思想,以及软件 开发流程。 学习 Java 语言的基本概念和编程方法,基 本掌握 Java 类库的使用。 能够利用所学的方法开发简单的小型应用 程序.
Java 程序设计 案例教程 北京大学出版社 第 01 章. Java 程序设计案例教程 第 01 章 Java 语言与面向对象程序设计 Java 语言的历史 Java 语言的特点 Java 程序的分类 Java 环境配置 Eclipse 的安装 Java 程序的调试 教学目标.
Java 程序设计(第二版) 普通高等教育 “ 十一五 ” 国家级规划教材 辛运帷等 编著 徐小平 主讲.
多元評量與 Greenfoot 簡介 南港高中高慧君. 演講大綱 多元評量 高中階段程式設計教學目標與困境 Greenfoot 快速入門 – 袋熊吃樹葉 – 沙灘螃蟹 Greenfoot 臺灣社群介紹 2.
单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
项目6 通用堆栈.
第1章 Java语言概述.
《 Java开发环境配置》 主讲人:耿力.
Java 2实用教程(第3版)教学课件 主讲教师:张国平
Java程序设计教程 第一讲 Java概述.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
四資二甲 第三週作業 物件導向程式設計.
Hello小程序的运行和编译 Java AppletJava小程序的构成 1、关键字
面向对象的程序设计(一).
《Java程序设计之网络编程》 教学课件 重庆大学计算机学院
面向对象程序设计(Java) 徐志红
第二章 JAVA语言基础.
第1章 java简介及环境搭建 第1章 Java简介及开发环境搭建.
Ch07 介面與多重繼承 物件導向程式設計(II).
JAVA程序设计 (03) JAVA Programming
CORBA 簡介 郭 俊 博 中華大學資訊工程研究所 平行與分散實驗室
作業系統 第二十章 分散式系統實例.
9.6 一个RMI的分布式应用的实例 用RMI编写一个分布式应用,核心有以下三方面: 定位远程对象 与远程对象通信:
程式設計實作.
Java的发展历史 1 Java的起源 Java是Sun公司1995年正式推出的新一代面向对象程序设计语言, 特别适合于Internet应用程序开发, 具有平台无关性。 Java来自于1991年Sun公司的一个叫Green的项目, 其原先的目的是为家用消费电子产品开发一个分布式代码系统, 可以把 发给电冰箱、
第五章 编写服务端程序.
2018/11/20 第一章 Java概述 武汉大学计算机学院计算机应用系 2018/11/20 14:33.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
CH09 套件 物件導向程式設計(II).
Java语言程序设计 第五部分 Java异常处理.
第六章 编写客户端程序.
Java程序设计 第9章 继承和多态.
2018/12/7 Java语言程序设计 教师:段鹏飞.
Java基础入门 第1章 Java开发入门 · Java语言的特点 · Java开发环境的搭建 · 环境变量的配置 · Java的运行机制.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
第4章 商务逻辑层及其技术.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
第二章 基于CORBA的分布式平台 苗启广 计算机学院.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
C/C++/Java 哪些值不是头等程序对象
第1章 Java语言概述 学习目标 本章要点 上机练习 习 题.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
第二章Java基本程序设计.
開發Java程式語言的工具 JDK.
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
主编:钟元生 赵圣鲁.
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
第二章 Java基本语法 讲师:复凡.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

第二章 基于CORBA的分布式平台 苗启广 qgmiao@mail.xidian.edu.cn 计算机学院

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)在http://java.sun.com/products/jdk/idl/中单独提供。在JDK 1.3版中则提供了新的IDL编辑器idlj

编辑IDL文件则用任何文本编辑器即可,具体的编写过程如下: 1、 编写 IDL 接口包括: l 如何编写简单的 IDL 接口定义; 内容 编辑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 接口 1、编写 Hello.idl 启动自己熟悉的文本编辑器,创建名为 Hello.idl 的文件,编写如下代码: 服务器将代表调用他们的客户机执行的行为,每条操作语句都在所生成的JAVA接口中生成相应的方法语句 1、编写 Hello.idl 启动自己熟悉的文本编辑器,创建名为 Hello.idl 的文件,编写如下代码: module HelloApp { interface Hello string sayHello(); }; };  可以看出用于 Hello World 的 IDL 非常简单,它的单一接口执 行单一操作。仅需执行三步: l     声明 CORBA IDL 模块 l    声明接口 l    声明操作 是一个名字空间,是相关接口和声明的容器,每条模块语句都被映射到一条Java Package语句 声明一个对象与其它对象的API约定,映射后,IDL中的每条interface语句都映射到一条Java Interface语句

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 */ Hello.idl   package HelloApp; public interface Hello extends org.omg.CORBA.Object { String sayHello(); } Hello.idl module HelloApp { interface Hello string sayHello(); }; 映射 IDL不分大小写

CORBA客户机需要本地ORB对象来执行其所有编组和IIOP操作 2.6.2 编写客户机应用程序 CORBA客户机需要本地ORB对象来执行其所有编组和IIOP操作 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); } 导入所需的包 声明客户机类 定义 main() 方法 获得初始命名上下文,是对命名服务的对象引用 创建 ORB 对象 限定对象引用,NcRef可用来访问命名服务和查找其它服务 在命名中查找服务 处理 CORBA 系统异常

4.7.3 编写 Hello World 服务器程序 创建 ORB 对象 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); 服务器是一种实例化一个或多个 servant 对象的进程。servant 实现 idltojava 生成的接口,并实际执行该接口上的操作。 创建 ORB 对象 实例化 servant 对象 将 servant 对象连接到 ORB 获得初始命名上下文 限定对象引用 在名字服务器中注册 servant 对象 等待调用

class HelloServant extends _HelloImplBase { // sayHello() 方法。   class HelloServant extends _HelloImplBase { // sayHello() 方法。 public String sayHello() //加入方法实现。 return "\nHello world!!\n"; } 定义 servant 类 声明sayHello() 方法 编写 sayHello() 实现

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

tnameserv -ORBInitialPort 1050 & l 启动 Hello 服务器: 4.7.4 编译和运行 5.运行 l         启动 Java IDL 名字服务器: tnameserv -ORBInitialPort 1050 & l         启动 Hello 服务器: java HelloServer -ORBInitialPort 1050 & l      在另一个窗口中运行 Hello 客户机应用程序: java HelloClient -ORBInitialPort 1050 打印到命令行的字符串如下所示: Hello world!!

启动JavaIDL名字服务器后的结果

启动Hello服务器后的结果

启动Hello客户机后的结果