版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西安电子科技大学软件学院西安电子科技大学软件学院 CORBA应用程序开发过程 西安电子科技大学软件学院西安电子科技大学软件学院 Agenda 设计CORBA应用程序 CORBA应用程序开发过程 一个例子银行账户管理 西安电子科技大学软件学院西安电子科技大学软件学院 Agenda 设计设计CORBA应用程序应用程序 CORBA应用程序开发过程 一个例子银行账户管理 西安电子科技大学软件学院西安电子科技大学软件学院 CORBA与OO技术 虽然CORBA支持非面向对象的程序设计 语言,但建议使用OO语言实现: IDL是OO风格的。 非OO语言的实现不能直接在CORBA系统中 使用,需要进行OO形式的
2、包装。 在分析设计阶段可以利用OO的方法和工具。 西安电子科技大学软件学院西安电子科技大学软件学院 设计CORBA应用程序 设计基于CORBA的分布式系统时,一般 应考虑如下几个问题: 网络传输 消息传递 运行平台 资源优化 其它 西安电子科技大学软件学院西安电子科技大学软件学院 设计CORBA应用程序 网络传输 多样化的网络传输选择 不同的编程模式 AppleTalk、DCE RPC、RMI、GIOP/IIOP 不同的底层通信协议 TCP/IP、DCEnet、Novell IPX/SPX、SNA、X.25 不同的通信介质 以太网、串口线 连接持续性因素 固定网络计算、可移动计算。 设计COR
3、BA应用时,应确保ORB能使用必要的网 络传输。 西安电子科技大学软件学院西安电子科技大学软件学院 设计CORBA应用程序 消息传递 CORBA提供了三种消息传递方式: 同步方式 异步方式(延迟同步方式) 单向方式 应根据不同的应用场合选择使用: 所申请的服务只需很短的时间即可完成,应选用同步方式 所申请的服务需要较长时间才可完成 ,应选用异步方式 如果客户程序无需获知请求已完成的确认信息,应选用单 向方式。 西安电子科技大学软件学院西安电子科技大学软件学院 设计CORBA应用程序 运行平台 由于不同平台(硬件/OS )之间的差异,为 一个平台创建的软件系统通常不能运行在另 一个平台之上。 运
4、行于不同平台(硬件/OS)之上的CORBA对象 之间(或者客户端与CORBA对象之间)可以跨 这些平台通信。 设计者必须在软件系统的性能与通用性之间 作出折衷选择。 西安电子科技大学软件学院西安电子科技大学软件学院 设计CORBA应用程序 资源优化 分布式环境下,跨网络的通信开销是相当可观的, 占用相当多的系统资源: 网络资源、接口、通信信道、逻辑链路等。 设计系统时应考虑尽量提高这些资源的利用率,避 免频繁的跨网络(尤其是广域网)通信。 其它决策 安全性、可靠性、事务处理、并发控制等。 考虑更多的错误处理: 例如客户程序发出请求但服务程序未就绪,甚至找不到服 务程序或无权限访问服务程序。 西
5、安电子科技大学软件学院西安电子科技大学软件学院 Agenda 设计CORBA应用程序 CORBA应用程序开发过程应用程序开发过程 一个例子银行账户管理 西安电子科技大学软件学院西安电子科技大学软件学院 典型的CORBA应用 表示层表示层 中间层中间层 数据层数据层数据库数据库 CORBA对象对象 CORBA客户端客户端 典型的CORBA应用 西安电子科技大学软件学院西安电子科技大学软件学院 CORBA应用开发过程 CORBA规范并没有限制ORB的具体实现 方法,所以不同厂商对ORB的具体实现 方法可能差别很大,这就导致不同厂商 提供的ORB上操作可能有很大的差异。 但基本过程都是类似的。 利用
6、利用OO方法进行分析设计方法进行分析设计 标识应用程序所需的对象标识应用程序所需的对象 实现每个对象,部署,运行实现每个对象,部署,运行 西安电子科技大学软件学院西安电子科技大学软件学院 典型的CORBA应用实现过程 用用IDL编写对象规格说明编写对象规格说明 编译编译IDL生成桩和框架生成桩和框架 编写客户程序代码编写客户程序代码编写对象实现和服务程序代码编写对象实现和服务程序代码 编译客户程序编译客户程序编译服务程序编译服务程序 运行客户程序运行客户程序运行服务程序运行服务程序 启动对象请求代理(启动对象请求代理(ORB)内核)内核 一个典型CORBA应用的实现过程 西安电子科技大学软件学
7、院西安电子科技大学软件学院 编写对象接口 对象接口是关于服务对象语法的规格说 明。接口定义中包括: 提供或使用的服务的名字 参数 返回值 异常 上下文环境等 对象接口由OMG IDL定义 西安电子科技大学软件学院西安电子科技大学软件学院 编译IDL文件 IDL编译器编译器 IDL文件文件 Stub Skeleton 输入输入 输出输出 输出输出 厂商实现IDL编译器时应参照OMG制订的语言 的规范,编程人员只要选择使用合适的编译器 就可以了。 VisiBroker for Java 4.0提供的idl2java编译器将 IDL映射到Java语言,生成Java语言的客户端桩 代码以及服务端框架代
8、码。 西安电子科技大学软件学院西安电子科技大学软件学院 编写客户程序 初始化初始化ORB 绑定到服务对象绑定到服务对象 调用服务对象提供的服务调用服务对象提供的服务 客户程序操作流程 西安电子科技大学软件学院西安电子科技大学软件学院 初始化ORB 无论是客户程序还是服务程序,都必须在利用 ORB进行通信之前初始化ORB。 初始化ORB的作用 让ORB了解有新的成员加入。 获取ORB伪对象的引用,以备将来调用ORB内核提 供的操作。 所谓伪对象专指在CORBA基础设施中的一个对象 伪对象是本地的。 利用伪对象调用CORBA基础设施提供的服务。 用一种统一的观点看待所有对象。 伪对象也使用IDL定
9、义。 西安电子科技大学软件学院西安电子科技大学软件学院 ORB服务 ORB内核提供了一些不依赖于任何对象 适配器的操作: 初始化ORB 获取初始引用的操作 动态调用相关的操作 生成类型码的操作 线程和策略相关的操作 西安电子科技大学软件学院西安电子科技大学软件学院 编写对象实现和服务程序代码 编写对象实现: IDL文件只定义了服务对象的规格说明,程序员必 须另外编写服务对象的具体实现。 对象实现则有很多选择的余地: Java、C+、C、Smalltalk 对象实现所用的语言与客户程序所选用的语言无关,只要 ORB产品供应商支持IDL到这些语言的映射即可。 程序员应该熟悉IDL到所选择的语言的映
10、射规则, 因为: IDL编译器除了生成Stub和Skeleton外,还会自动生成一 些对象实现需要用到的辅助代码。 VisiBroker的idl2java会生成一些对象适配器的Java类和各 种辅助性的Java类,编写对象实现的代码时必须继承其中的 一些类或使用某些类提供的方法。 西安电子科技大学软件学院西安电子科技大学软件学院 编写对象实现和服务程序代码 编写对象实现后,还必须实现服务程序 的main例程。 服务程序利用可移植对象适配器(POA)激 活伺服对象供客户程序使用。 服务程序通常是一个循环执行的进程,不断 监听客户程序请求并为之服务。 西安电子科技大学软件学院西安电子科技大学软件学
11、院 创建并部署应用程序 一些ORB产品提供了专门的编译器以简化这一 过程: VisiBroker for Java提供的编译器vbjc会自动调用JDK 中的Java编译器javac,指示javac在编译客户程序的 同时编译相关的客户程序桩文件,在编译服务程序 的同时编译相关的服务程序框架文件。 客户程客户程 序代码序代码 IDL生成生成 的的Stub 客户端客户端 应用程序应用程序 编译编译 服务端服务端 代码代码 IDL生成的生成的 Skeleton 服务端服务端 应用程序应用程序 编译编译 创建客户端应用程序创建服务端应用程序 西安电子科技大学软件学院西安电子科技大学软件学院 创建并部署应
12、用程序 部署应用程序 在部署阶段由系统管理员规划如何在终端用 户的桌面系统安装客户程序,或在服务器一 类的机器上安装服务程序。 部署工作由单独的角色来承担 EJB中部署人员还有更多的工作要做。 西安电子科技大学软件学院西安电子科技大学软件学院 运行应用程序 运行CORBA应用程序时,必须首先启动首先启动 服务程序服务程序,然后才可运行客户程序。 VisiBroker for Java要求其ORB内核(osagent) 必须在客户程序启动之前启动完成。 西安电子科技大学软件学院西安电子科技大学软件学院 Agenda 设计CORBA应用程序 CORBA应用程序开发过程 一个例子一个例子银行账户管理
13、银行账户管理 西安电子科技大学软件学院西安电子科技大学软件学院 例子背景 银行账户管理 服务端管理大量银行顾客的账户,提供基本 的开户、存款、取款、查询余额的功能。 西安电子科技大学软件学院西安电子科技大学软件学院 对象认定 一个银行帐户的实体模型。 balance:表示当前的余额。 deposit:存款 withdraw:取款 getBalance:查询余额 manage 银行中的储蓄员的实体模型。 accountList :记录当前已开设的 所有帐户。 open:根据帐户标识查找某一帐 户,如果该标识的帐户不存在则 创建一个新帐户。 西安电子科技大学软件学院西安电子科技大学软件学院 定义对
14、象接口 / 银行帐户管理系统的对象接口定义银行帐户管理系统的对象接口定义 module Bank / 帐户帐户 interface Account / 存款存款 void deposit(in float amount); / 取款取款 boolean withdraw(in float amount); / 查询余额查询余额 float getBalance(); ; / 帐户管理员帐户管理员 interface AccountManager / 查询指定名字的帐户,查无则新开帐户查询指定名字的帐户,查无则新开帐户 Account open(in string name); ; ; Bank
15、.idl 西安电子科技大学软件学院西安电子科技大学软件学院 生成Stub与Skeleton prompt idl2java Bank.idl idl2java Bank.idl Stub Skeleton 输入输入 输出输出 其它辅助其它辅助 文件文件 西安电子科技大学软件学院西安电子科技大学软件学院 生成Stub与Skeleton VisiBroker for Java的IDL编译器idl2java为 每个接口自动生成7个文件: AccountOperations.java Account.java _AccountStub.java AccountPOA.java AccountPOATi
16、e.java AccountHelper.java AccountHolder.java 西安电子科技大学软件学院西安电子科技大学软件学院 生成的接口定义 Account.java和AccountOperations.java定 义了IDL接口Account的完整基调。 AccountOperations.java定义了Account接口中 定义的所有常量和方法。 package Bank; public interface AccountOperations public void deposit(float amount); public boolean withdraw(float am
17、ount); public float getBalance(); 西安电子科技大学软件学院西安电子科技大学软件学院 生成的接口定义 Account.java是真正使用接口定义,因为 VisiBroker规定所有的接口必须从两个预定 义的接口派生而来(类似COM中的 IUnknown接口)。 package Bank; public interface Account extends com.inprise.vbroker.CORBA.Object, Bank.AccountOperations, org.omg.CORBA.portable.IDLEntity 西安电子科技大学软件学院西安电
18、子科技大学软件学院 生成的接口定义 package Bank; public interface Account extends com.inprise.vbroker.CORBA.Object, org.omg.CORBA.portable.IDLEntity public void deposit(float amount); public boolean withdraw(float amount); public float getBalance(); 用一个文件来代替AccountOperations.java和 Account.java 西安电子科技大学软件学院西安电子科技大学软件
19、学院 生成的Stub _AccountStub.java是Account对象在客户 端的桩代码,它实现了Account接口。 程序员编写的客户程序代码通常不直接调用 这个类中类中的方法。 VisiBroker for Java生成了另外的辅助类 AccountHelper。 该类提供了一个narrow方法,用于返回一个 Account接口的指针。实际上该方法实例化了一 个_AccountStub对象,所以客户端通过返回的接 口指针实际调用了桩对象的代码,由桩对象完成 具体的和服务端的通信。 西安电子科技大学软件学院西安电子科技大学软件学院 生成的Stub package Bank; publi
20、c class _AccountStub extends com.inprise.vbroker.CORBA.portable.ObjectImpl implements Account final public static java.lang.Class _opsClass = Bank.AccountOperations.class; private static java.lang.String _ids = IDL:Bank/Account:1.0; public java.lang.String _ids() return _ids; public void deposit(flo
21、at amount) /与ORB交互,完成真正的deposit方法调用 public boolean withdraw(float amount) /与ORB交互,完成真正的withdraw方法调用 public float getBalance() /与ORB交互,完成真正的getBalance方法调用 _AccountStub.java 西安电子科技大学软件学院西安电子科技大学软件学院 生成的Skeleton AccountPOA.java是Account对象的服务端框架 代码,该类的功能: 解包in类型的参数并将参数传递给对象实现。 打包返回值与所有out类型的参数。 打包(marsha
22、l):指将特定程序设计语言描述的数据类型 转换为CORBA的IIOP流格式。 解包(unmarshal):从IIOP流格式转换为依赖于具体程序 设计语言的数据结构。 同COM中的编组/解组操作。 编写对象实现的最简单途径是继承这些POA类, 即把它们作为对象实现的基类。 西安电子科技大学软件学院西安电子科技大学软件学院 生成的Skeleton package Bank; public abstract class AccountPOA extends org.omg.PortableServer.Servant implements org.omg.CORBA.portable.InvokeH
23、andler, Bank.AccountOperations public static org.omg.CORBA.portable.OutputStream _invoke( .) org.omg.CORBA.portable.OutputStream _output = null; switch (_method_id) case 0: float amount; amount = _input.read_float(); _self.deposit(amount); _output = _handler.createReply(); return _output; case 1: /.
24、 case 2: /. AccountPOA.java 西安电子科技大学软件学院西安电子科技大学软件学院 生成的纽带机制 AccountPOATie.java用于采用纽带机制实现服 务端的Account对象 AccountPOATie是Account接口的委托方的实现。 每一个AccountPOATie对象必须关联一个真正的实 现类。 真正的实现类必须实现AccountOperations接口, AccountPOATie对象将每一个操作委托给初始化它 的对象实例。 因为Java语言的单重继承限制,所以引入了纽带机 制。 西安电子科技大学软件学院西安电子科技大学软件学院 生成的Skeleton
25、 package Bank; public class AccountPOATie extends AccountPOA private Bank.AccountOperations _delegate; private org.omg.PortableServer.POA _poa; public AccountPOATie(final Bank.AccountOperations _delegate) this._delegate = _delegate; public AccountPOATie(final Bank.AccountOperations _delegate, final
26、org.omg.PortableServer.POA _poa) this._delegate = _delegate; this._poa = _poa; public void deposit(float amount) this._delegate.deposit(amount); public boolean withdraw(float amount) return this._delegate.withdraw(amount); public float getBalance() return this._delegate.getBalance(); AccountPOATie.j
27、ava 西安电子科技大学软件学院西安电子科技大学软件学院 生成的辅助工具类 IDL编译器为每一个用户自定义类型还生成一 个辅助工具类。AccountHelper.java声明了 AccountHelper类,该类为Account接口定义了 许多实用功能和支持功能的静态方法(又称类 方法)。 从Any对象提取或向Any对象插入对象(extract和 insert方法); 从输入输出流读写对象(read和write方法); 获取对象的库标识和类型码(id和type方法); 绑定对象与类型转换操作(bind和和narrow方法方法)等 等。 编程时回用到该类中提供的方法。 西安电子科技大学软件学院西
28、安电子科技大学软件学院 生成的辅助工具类 package Bank; public final class AccountHelper public static Bank.Account narrow (final org.omg.CORBA.Object obj) /. public static Bank.Account bind(org.omg.CORBA.ORB orb, java.lang.String name) /. /. AccountHelper.java 西安电子科技大学软件学院西安电子科技大学软件学院 生成的对象传递支撑类 AccountHolder.java声明的Ac
29、countHolder 类为传递对象提供支持。 IDL有三种参数传递方式:in、out和inout。 in类型的参数以及返回结果与Java的参数传 递方式与结果返回方式完全相同。 out和inout两种类型的参数允许参数具有返 回结果的能力,无法直接映射到Java语言的 参数传递机制,这时AccountHolder类为传递 out和inout参数提供了一个托架(holder)。 西安电子科技大学软件学院西安电子科技大学软件学院 生成的对象传递支撑类 package Bank; public final class AccountHolder implements org.omg.CORBA.p
30、ortable.Streamable public Bank.Account value; public AccountHolder() public AccountHolder(final Bank.Account _vis_value) this.value = _vis_value; public void _read( final org.omg.CORBA.portable.InputStream input) value = Bank.AccountHelper.read(input); public void _write(final org.omg.CORBA.portable
31、.OutputStream output) Bank.AccountHelper.write(output, value); public org.omg.CORBA.TypeCode _type() return Bank.AccountHelper.type(); AccountHolder.java 西安电子科技大学软件学院西安电子科技大学软件学院 编写对象实现 对象实现代码所在的类名字可由程序员自由掌 握,只要不与IDL编译器自动产生的Java类产 生名字冲突即可。客户程序也无须了解对象实 现是由哪一个Java类完成的。 CORBA应用程序的对象实现最常用、最简单 的实现方式是使用继承,即直接继承由IDL编 译器生成的xxxPOA类。 当对象实现需要利用继承机制达到其他目的时,就 必须改用CORBA对象实现的另一种实现方式 纽 带机制(tie mechanism)。 我们的例子程序采用简单的继承方式编写对象 实现。 西安电子科技大学软件学院西安电子科技大学软件学院 账户的对象实现 public class AccountImpl extends Bank.Accoun
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游泳培训中心规章制度
- 煤矿承包商安全培训制度
- 培训机构值班责任制度
- 内部员工日常培训制度
- 煤矿三级教育培训管理制度
- 罗城乡计生培训制度
- 煤矿内部培训管理制度
- 儿童培训门店管理制度
- 新岗位培训制度及流程
- 英语培训内部管理制度
- 初中语文新课程标准与解读课件
- 无人机装调检修工培训计划及大纲
- 中建通风与空调施工方案
- 高考语言运用题型之长短句变换 学案(含答案)
- 春よ、来い(春天来了)高木绫子演奏长笛曲谱钢琴伴奏
- ARJ21机型理论知识考试题库(汇总版)
- 2023年娄底市建设系统事业单位招聘考试笔试模拟试题及答案解析
- GB/T 4623-2014环形混凝土电杆
- GB/T 32065.4-2015海洋仪器环境试验方法第4部分:高温试验
- GB/T 16823.3-2010紧固件扭矩-夹紧力试验
- 中介服务费承诺书
评论
0/150
提交评论