一、OMG
1.成立于1989年的非盈利性联盟;
2. 以促进在分布式系统开发中面向对象技术的理论与实践的发展为目标;
3.为使该组织所采纳的技术具有开放性,OMG所采用的方法是,针对某一领域发出RFP(Request For Proposal),然后以各方提交的建议为基础,经过一系列的讨论和协商,产生最终的规范。
4.OMG负责制订并维护一套规范(not software):
支持分布式、异类(heterogeneous)环境的软件开发项目。
覆盖了从分析、设计到编码、部署、运行和管理的整个软件开发过程。
这些规范是一种工业或行业标准
5.OMG主要规范
UML:Unified Modeling Language
CORBA:Common Object Request Broker Architecture。
MDA: Model Driven Architecture
由OMG制定的最关键的规范——对象管理结构(Object Management Architecture, OMA)和它的核心(也就是CORBA规范),提供了一个完整的体系结构。这个结构以足够的灵活性、丰富的形式适用了各类分布式系统。
二、OMA
1.OMA描述了面向对象技术在分布式处理中的运用。它包括两部分:
对象模型(Object Model):定义如何描述分布式异质环境中的对象
参考模型(Reference Model):描述对象之间的交互(组件,接口,协议)
2.OMA对象模型
在OMA对象模型中,对象是一个被封装的实体,它具有一个不可改变的标识,并能给客户用户提供一个或多个服务。如:
interface printer
{
attribute model;
void print(in string buffer);
};
3.对象的访问方式是通过向对象发出请求来完成的。请求信息包括目标对象、所请求的操作、0个或多个实际参数和可选的请求上下文(描述环境信息)。每个对象的实现和位置,对客户都是透明的。
4.在OMA参考模型中,OMG定义了一条为对象所公用的通信总线,即ORB(Object Request Broker)。同时, OMG又定义了对象进出这一总线的接口。这包括:对象服务(Object Services) 、公共设施(common facilities)、应用接口(Application Interface)和域接口(Domain Interface)。
三、ORB:Object request broker 对象请求代理
1.概念:是OMA参考模型的核心,是基于分布式对象构建应用程序的基础设施,保证了在异构平台上对象的互操作性与可移植性。
2.作用:把客户发出的请求传递给目标对象,并把目标对象的执行结果返回给发出请求的客户。由ORB提供的通信机制负责完成查找请求的对象实现,让对象实现准备好接收请求,传递构成请求的数据。
3.ORB(Object Request Broker)是对象总线。
1)通过ORB,一个client可以透明的调用同一台机器上或网络上的一个server对象的方法。
2 )ORB解释该调用并负责查找一个实现该请求的对象,
3 )找到后,把参数传给该对象,调用它的方法,最后返回结果。
4) 客户方不需要了解服务对象的位置、通信方式、实现、激活或存储机制。
四、对象服务:
1.作用:提供所有应用程序都可能用到的通用服务的接口(基本服务,与具体的应用领域无关的接口)。
2.支持的服务有:名字服务、持久性服务、生命周期服务、事务处理服务、对象事件服务和安全服务等。
3.实质:通用的服务集合,将覆盖对象整个生存期的对象管理任务标准化,可保证各种应用程序均采用一致的风格管理对象
五、CORBA体系结构
1.C-ORB-A: “Common”+“ORB”+“Architecture” 通用“orb”体系结构
2.建立在OMG的对象模型基础之上,主要由三个关键部分组成
作为分布式对象通信基础设施的对象请求代理ORB的体系结构;
接口定义语言IDL的语法和语义以及到各种程序设计语言的映射;
保证可互操作性的标准ORB间的通信协议GIOP/IIOP。
六、IDL语言
说明性语言,定义组件接口,不定义实现。
语法上可以看成C++的一个子集,规定组件的属性、所继承的父类、产生的异常、事件和各类数据类型。
编译器作用:将IDL映射到具体程序设计语言,产生桩代码和框架代码
调用请求经客户端桩传递给ORB,然后转发到服务端框架,最后到达真正要执行请求的对象实现实例
Run---->External Tools----->IDL Compiler,
f5刷新,生成Stub与Skeleton
IDL编译器作用是将IDL映射到具体程序设计语言,产生桩代码和框架代码
Visibroker for java提供的编译器idl2java将IDL映射到java语言,生成java语言的桩和框架语言
每个对象实例都有一个用于唯一标识自身的对象引用。客户程序利用对象引用指明调用的方向
表面上看,客户程序调用的是远程对象实现上的操作,实际被调用的代码是作为其代理的IDL桩
七、RMI存根和框架的作用?
◎Stub(存根类):存在于客户端,为客户端编码远程命令并把他们发送到服务器,等待服务器
返回结果,stub再解码返回调用结果给客户端。
◎Skeleton(框架):存在于服务器,是把远程命令解码,调用服务端的远程对象的方法,把
结果再编码发给stub。
VisiBroker for Java的IDL编译器idl2java为每个接口自动生成7个文件:
(1)_IntefaceNameStub.java
Hello对象在客户端的桩代码,它实现了Hello接口。
程序员编写的客户程序代码通常不直接调用这个类中的方法。
VisiBroker for Java生成了另外的辅助类HelloHelper。
(2)IntefaceName.java
客户程序代码中,程序员通常使用的是操作接口的派生接口Hello(位于Hello.java)
(3)IntefaceNameHelper.java
IDL编译器为每一个用户自定义类型还生成一个辅助工具类。HelloHelper.java声明了HelloHelper类,
该类为Hello接口定义了许多实用功能和支持功能的静态方法(又称类方法)。
--从Any对象提取或向Any对象插入对象(extract和insert方法);
--从输入/输出流读写对象(read和write方法);
--获取对象的库标识和类型码(id和type方法);
--绑定对象与类型转换操作(bind和narrow方法)等等。
编程时会用到该类中提供的方法。
(4)IntefaceNameHolder.java
AccountHolder.java声明的AccountHolder类为传递对象提供支持。
--IDL有三种参数传递方式:in、out和inout。
--in类型的参数以及返回结果与Java的参数传递方式与结果返回方式完全相同。
--out和inout两种类型的参数允许参数具有返回结果的能力,无法直接映射到
Java语言的参数传递机制,这时AccountHolder类为传递out和inout参数提供了一个托架(holder)。
*In表明实际参数从客户程序传向对象实现
*Out表明数据从实现对象传递给客户程序,并且对象实现无需从客户程序获取参数的初始值
*Inout表明数据从客户程序传给对象实现,然后经对象实现加工后再返回给客户程序
(5)IntefaceNameOperations.java
(操作基调)定义了Hello接口中定义的所有常量和方法。
(6)IntefaceNamePOA.java
Hello对象的服务端框架代码,该类的功能:
-解包in类型的参数并将参数传递给对象实现。
-打包返回值与所有out类型的参数。
--打包(marshal):指将特定程序设计语言描述的数据类型转换为CORBA的IIOP流格式。
--解包(unmarshal):从IIOP流格式转换为依赖于具体程序设计语言的数据结构。
*编写对象实现的最简单途径是继承这些POA类,即把它们作为对象实现的基类。
(7)IntefaceNmaePOATie.java
创建并部署应用程序
客户端:客户程序代码与IDL编译器自动生成的IDL桩代码一起编译
服务端:对象实现代码与服务程序代码与IDL框架代码一起编译
八、Server端
1.编写对象实现和服务程序
IDL文件只定义了对象的语法规格说明,必须编写这些对象的具体实现代码
对象实现可用各种语言实现,且与客户程序的语言无关
IDL到编程语言的映射规则
生成IDL框架代码和各种辅助性的java接口或类
编写对象实现代码时必须继承或使用其中的某些接口或类
服务程序
利用POA激活伺服对象供客户对象使用
通常是一个循环执行的进程,不断监听客户程序请求并为之服务
2.编写服务程序
通常程序员都会编写一个名为Server.java的服务程序,服务程序创建伺服对象供客户端使用。
对象适配器:对象适配器是联系对象实现与ORB本身的纽带。它的引入还大大减轻了ORB
的任务,从而简化了ORB的设计。
作用:管理服务器端伺服对象,对象标识,CORBA对象以及它们之间关联。决定在收到一个
客户请求时应调用哪一个伺服对象,然后调用该伺服对象上的合适操作。对象适配器主要完
成以下工作:对象登记、对象引用(OR, Object Reference)的产生、服务器进程的激活、对
象的激活、对象的撤消、对象向上调用。
什么是POA?简述创建并激活POA的过程?
◎POA:POA是对象实现与ORB其他组件之间的中介,它将客户请求传送到伺服对象,按需创建子POA,提供管理伺服对象的策略。
◎创建:利用create_POA()方法可以创建一个新的POA作为该POA的子POA, 可以根据实际需要以这种方式创建多个子POA,从而形成一个POA层次
◎激活:对象引用通过对象标识与伺服对象建立关联。如果POA采用RETAIN策略,可有三种激活方式:显示激活,隐式激活,按需激活;若采用NON_RETAIN策略,对象只能按需激活。
CORBA对象和伺服对象的关系。
①CORBA对象与具体的伺服对象是两个不同抽象层次的概念:它们之间的彻底分离使得CORBA独立于任何特定程序设计语言,并为服务端程序的可移植性打下基础。对象适配器是一个重要的ORB组件,它负责将抽象的CORBA对象映射到具体的伺服对象。
②CORBA对象可看作是一个具有对象标识、对象接口及对象实现的抽象实体。
③伺服对象(servant)是指具体程序设计语言的对象或实体,通常存在于一个服务程序进程之中。客户程序通过对象引用发出的请求经过ORB担当中介角色,转换为对特定的伺服对象的调用。
④伺服对象通过对象标识关联到CORBA对象。
三、编写客户程序
初始化ORB
是应用程序进入CORBA的起点
作用
让ORB了解有新的成员加入
获取ORB伪对象的引用,以备调用ORB内核提供的操作时使用
伪对象(pseudo object):在CORBA基础设施中的一个对象
获取分布式对象引用,利用其调用对象实现提供的服务