第二章 基于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 程序的编写与运行.
Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
第一章 Java 程序设计技术 概述  什么是 Java 语言  一个简单的 Java 程序  程序的编译和运行  常见错误  使用 Java 核心 API 文档.
Java 程序设计 案例教程 北京大学出版社 第 01 章. Java 程序设计案例教程 第 01 章 Java 语言与面向对象程序设计 Java 语言的历史 Java 语言的特点 Java 程序的分类 Java 环境配置 Eclipse 的安装 Java 程序的调试 教学目标.
面向侧面的程序设计 方林博士 本文下载地址:
Java 程序设计(第二版) 普通高等教育 “ 十一五 ” 国家级规划教材 辛运帷等 编著 徐小平 主讲.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
第1章 Java语言概述.
《 Java开发环境配置》 主讲人:耿力.
Java 2实用教程(第3版)教学课件 主讲教师:张国平
Java程序设计教程 第一讲 Java概述.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
四資二甲 第三週作業 物件導向程式設計.
Hello小程序的运行和编译 Java AppletJava小程序的构成 1、关键字
面向对象的程序设计(一).
《Java程序设计之网络编程》 教学课件 重庆大学计算机学院
面向对象程序设计(Java) 徐志红
第二章 JAVA语言基础.
第1章 java简介及环境搭建 第1章 Java简介及开发环境搭建.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
CORBA 簡介 郭 俊 博 中華大學資訊工程研究所 平行與分散實驗室
作業系統 第二十章 分散式系統實例.
9.6 一个RMI的分布式应用的实例 用RMI编写一个分布式应用,核心有以下三方面: 定位远程对象 与远程对象通信:
程式設計實作.
Java的发展历史 1 Java的起源 Java是Sun公司1995年正式推出的新一代面向对象程序设计语言, 特别适合于Internet应用程序开发, 具有平台无关性。 Java来自于1991年Sun公司的一个叫Green的项目, 其原先的目的是为家用消费电子产品开发一个分布式代码系统, 可以把 发给电冰箱、
第五章 编写服务端程序.
Java Applet 介绍.
2018/11/20 第一章 Java概述 武汉大学计算机学院计算机应用系 2018/11/20 14:33.
第二讲 搭建Java Web开发环境 主讲人:孙娜
程式設計實作.
CH09 套件 物件導向程式設計(II).
Java语言程序设计 第五部分 Java异常处理.
第六章 编写客户端程序.
SVN服务器的搭建(Windows) 柳峰
走进编程 程序的顺序结构(二).
辅导课程六.
Java基础入门 第1章 Java开发入门 · Java语言的特点 · Java开发环境的搭建 · 环境变量的配置 · Java的运行机制.
PostgreSQL 8.3 安装要点 四川大学计算机学院 段 磊
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第4章 商务逻辑层及其技术.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
C/C++/Java 哪些值不是头等程序对象
YMSM D-PACK 安装手册 作成者:D-PACK维护组(YMSLx) 作成日:
任务1-3 使用Dreamweaver创建ASP网页
SOA – Experiment 2: Query Classification Web Service
第1章 Java语言概述 学习目标 本章要点 上机练习 习 题.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章Java基本程序设计.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
第二章 基于CORBA的分布式平台 苗启广 计算机学院.
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
第二章 Java基本语法 讲师:复凡.
Chapter 18 使用GRASP的对象设计示例.
辅导课程十五.
VRP教程 2011.
第二章 Java基本语法 讲师:复凡.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
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客户机后的结果