Corba在TMN中的研究和应用


(转载自中国互动出版网网站,http://www.china-pub.com)

1 分布式技术的基本原理

  1.1传统的面向对象分析与面向对象设计方法。
  常规的OOA和OOD方法可以直接应用于分布式系统的分析和设计,然而传统的OOP环境(例如C++或object pascal)在直接用于分布式应用系统的程序设计时遇到了问题。传统的对象与访问该对象的程序只能存在于同一进程中,并且只有相关程序设计语言的编译器才能创建这些对象并感知这些对象的存在,而外部进程无法了解和访问这些对象。这意味着在常规的分布式客户/服务器应用中,客户进程不可能直接访问异地服务进程中的常规对象。为了解决这个问题,人们提出了分布式对象的概念。

  1.2分布式对象技术
  分布式对象存在于网络的任何地方,可被远程客户应用以方法调用的形式访问。至于分布式对象是使用何种程序设计语言和编译器所创建,对客户对象来说是透明的。客户应用不必知道它所访问的分布式对象在网络中的具体位置以及运行在何种操作系统上,该分布对象与客户应用可能在同一台计算机上,也可能分布在由广域网(如Internet)相连的不同计算机上。分布对象具有动态性,它们可以在网络上到处移动。独立于特定的程序设计语言和应用系统、可重用和自包含的软件成分称为软构件。分布式对象是一种典型的软构件。基于分布对象技术的分布式应用开发就是分布式对象的开发和组装。
  分布对象技术采用面向对象的多层客户/服务器计算模型,该模型将分布在网络上的全部资源(无论是系统层还是应用层)都按照对象的概念来组织,每个对象都有定义明晰的访问接口。创建和维护分布对象实体的应用称为服务器,按照接口访问该对象的应用称为客户。服务器中的分布对象不仅能够被访问,而且自身也可能作为其他对象的客户。因此在分布对象技术中,客户与服务器的角色划分是相对的或多层次的。支持客户访问异地分布对象的核心机制称为对象请求代理(Object Request Broker,ORB)。ORB处于分布对象技术的核心位置。
  通过重用已有的软构件,使用构件对象模型的软件开发者可以像搭积木一样快速构造应用程序。这样不仅可以节省时间和经费,提高工作效率,而且可以产生更加规范、更加可靠的应用软件。

分布式软件构件具备以下几个特征
  · 自描述构件必须能够识别其属性、存取方法和事件,这些信息可以使开发环境将第三方软件构件无缝地结合起来;
  · 可定制--提供一个典型的图形方式环境,软件构件的属性只能通过控制面板来设置;
  · 可集成--构件必须可以被编程语言直接控制。构件也可以和脚本语言连接或者与从代码级访问构件的环境连接,这个特性使得软件构件可以在非可视化开发项目中使用;
  · 连接机制--构件必须能产生事件或者具有让程序员从语义上实现相互连接的其他机制。这意味着程序员可以很容易地向按钮添加代码,使点中按钮就可以影响其他构件的动作。
  构件模型是为开发者定义软件构件而建立的体系结构和API集,使开发者可通过软件构件的动态组合来建立应用系统。构件模型由构件与容器两种主要成份构成。构件是具有可重用特性的基本软件部件。容器用于存放和安排构件,实现构件间的交互。容器也可以作为另一个容器的构件使用。

  分布式对象的服务
  分布式对象服务包括支持分布式系统正常工作的各类基本的系统级服务,例如名字管理、事件通告、对象事务管理、对象生命期、时间同步、并发控制等。公共设施包括支持分布式系统高效开发和有效工作的各类面向领域的常规服务和工具,例如GUI服务、数据库服务、电子邮件服务、系统管理服务以及面向电信、仿真和金融等应用领域的领域构架等等。应用对象涉及各种应用软件,它在对象服务和公共设施的帮助下完成相应的应用逻辑;ORB如同一条总线(Bus)把分布式系统中的各类对象和应用连接成相互作用的整体。

2 CORBA

目前比较流行的分布式对象有DCOM、JAVABEAN、CORBA,限于篇幅,本文就不比较他们各自的优缺点,仅仅介绍CORBA的优点及其在TMN中的应用。
  公共对象请求代理体系结构CORBA(Common Object Request Broker Architecture)是OMG于1991年提出的一个工业标准,它将面向对象技术和网络通信技术有机结合起来,用于在分布式环境下实现应用的集成,使得基于对象的软件构件可以在分布式环境中可重用、可移植和可互操作性。随着人们对构件技术的关注,CORBA技术日趋成熟,并得到了世界范围那行业的支持和认可。许多计算机厂家都推出了符合CORBA规范的产品。目前,CORBA已经在电信、金融、制造等领域得到了广泛的应用。从本质上说,CORBA是一种专门用于规范ORB行为的标准。利用CORBA技术,可以屏蔽对象通信的细节,完成对象的注册、定位和激活;请求解释;差错处理;参数配置以及操作传送等工作。下图给出了CORBA的基本结构。
  
                 (图一 Corba体系结构)

  CORBA构件模型的底层结构为ORB。CORBA构件可以通过IDL进行描述。目前CORBA大多数厂商都已经提供了IDL到C、C++、Java、COBOL等语言的映射机制--IDL编译器。IDL编译器可以生成Server方的Skelton和Client方的Stub代码,通过分别与客户端和服务端程序的联编,即可得到相应的Server和Client程序。
  CORBA同时提供了一系列的公共服务规范--COSS,其中包括名字服务、永久对象服务、生命周期服务、事务处理服务、对象事件服务和安全服务等,它们相当于一类用于企业级计算的公共构件。此外,CORBA还针对电信、石油等典型的应用行业提供了一系列的公共设施。
  可以看出,CORBA是一种语言中性的软件构件模型,它可以跨越不同的网络、不同的机器和不同的操作系统,实现分布对象之间的互操作。

3 CORBA在TMN 中应用的优点.

  电信管理网(TMN)虽然采用了基于OSI系统管理的面向对象的建模技术,但对于如何构造管理系统以及管理系统之间如何实现互操作,TMN并未深入研究。而CORBA目前已经是一项比较成熟的分布式面向对象技术,以CORBA平台为基础的分布式处理环境的工作正在进行。可以预见,在不久的将来,CORBA将被广泛用于开放的电信市场环境下业务的快速构造及资源和业务的有效管理。下面从几个方面较深入地探讨CORBA在TMN中的应用。

  1.CORBA在TMN业务管理层的应用
  相对于网元和由网元组成的网络而言,电信业务的异质性更强,业务种类多种多样;每一项业务的实现通常要涉及不同类型的网络资源、业务组件;要和各种不同形式的数据发生关联;同时,业务经常处于动态变化之中;很多业务还需要不同管理域之间相互配合才能完成,因而对业务的管理更为复杂。传统OSI系统管理所支持的管理者/代理方式,通过命名树标识管理对象实例以及面向连接的CMIP协议和该协议支持的管理对象定界和过滤功能等,适用于TMN网络层以下的管理,却不适合于业务层的管理对象。
  相反,CORBA体系结构所支持的对象模型能够满足业务层的管理需要。相对于GDMO而言,IDL语言非常简洁、明了,适合于对业务对象的建模;对象之间可以通过ORB相互调用对方提供的服务;有分布透明的支持,业务对象和组件还可以在网络内动态迁移。因此,在TMN业务管理层采用CORBA技术将使得对电信业务的管理更具开放性、灵活性。

  2.采用CORBA技术的网元NE
  由于Q3接口涉及到OSI的七层协议栈,CMIP协议又相当复杂,实现起来代价较高,目前在网元内部直接支持Q3接口的设备并不多见。而CORBA同样具备很强的对象建模能力,CORBA的ORB之间可以通过基于TCP/IP的IIOP协议通信,实现起来代价较低。基于CMIP的OSI系统管理体系结构需要在管理者和代理之间协商共享管理知识SMK,相比之下,CORBA采用IDL描述对象的对外接口,对被管理对象的访问和管理系统内部对象之间的交互可以一致看待,CORBA的动态调用接口DII还可以在运行时刻访问被管理系统中新的对象类型。因此,在NE内部采用CORBA技术是可供选择的方案之一。

  3.基于CORBA的TMN OS开发平台
  目前的TMN网管平台主要提供对Q3接口协议栈的支持、GDMO文本的编译以及相应管理者和代理端应用框架的生成,较少支持在X.700系列建议中规定的系统管理功能,缺乏特定TMN管理组件和支持分布式应用的基础构件。而这些正是采用面向对象和软件重用技术构造大规模电信网络和业务管理应用的关键。从上文以及下一章对CORBA体系结构的分析可以看出,采用IDL定义对外接口的组件通过ORB可以很好地支持访问和位置透明。因此,以CORBA的ORB为核心,结合目前分布式对象体系结构和电信网络和业务管理方面的相关技术,可以构造一个更加分布化、重用性强、可靠性高、可伸缩性好并且适用于整个TMN分层体系结构的新一代分布式TMN管理平台。
  图1提出一种基于OMG CORBA的下一代分布式TMN管理平台。
  该平台中ORB核心以外的其它组件,如分布式处理服务、公共管理服务以及一些通用管理应用都以构件块的方式存在。所有的构件块都以一致的方式对外接口,采用OMG的IDL语言描述其提供的服务。
  分布式处理服务主要实现ODP参考模型[4]工程视点中提供给上层应用的诸多透明特性,包括接入透明、位置透明、迁移透明、持久性透明、复制透明、事务透明及故障透明等等。例如,由于分布式开放环境固有的灵活性和可扩展性,构件块的动态迁移、生存和消亡以及在这些构件块之间动态选择服务是非常频繁的。因此,提供一种机制,使得作为客户一方的构件块和作为服务者一方的构件块之间在运行时刻交互是非常关键的。Trader[5]提供的服务能够满足这些要求,因而成为分布式TMN平台中的一个重要组件。

4 解决TMN 的一个方案

  电信管理网要求电信资源的互连,在一个综合平台上实现电信管理 。由于WEB技术日趋成熟和广泛推广,以及它所拥有的以下好处:
  1. 维护简单,发布容易。我们只需在服务器端开发和修改应用程序,而不必在每个客户端进行修改,就可进行管理。
  2. 可以控制对多极用户的权限。我们只需在服务器端增加用户管理和管理注册,就可以针对不同的用户赋予不同的权限。例如可以对省局管理员赋予本省的所有权限。让一般客户拥有查看资源配置信息的权限等等。
结合上面介绍的CORBA分布式技术,我提出这样一个方案:在各分布在各地的子资源上,利用原有的数据库,抽象出一系列对象,然后用CORBA实现这些对象,再在服务器上用WEB来调用这些CORBA对象,构造主页,然后所有客户都可以通过浏览器来查看主页,并进行管理.

5 CORBA及其基于CORBA的TMN实现

 
  CORBA允许一个客户机组件以静态和动态两种方式调用服务器组件。如果使用静态调用,客户机要指定是哪个服务器组件、调用的是哪个函数。使用动态调用,预先不知道服务器组件的界面,客户机要在运行时通过CORBA提供的Naming Server或Trader Server找到服务对象,然后再动态地调用服务方法。本项目中,我使用了静态调用方法。

  1.静态调用方法实现过程
  1)对象抽取
  2)定义IDL接口
  3)编译IDL接口
  4)用DELPHI 实现接口
  5)用FrontPage98 制作模板(这一步与CORBA 无关,只与DELPHI制作主页有关,所以这里未做介绍)
  6)通过联编服务器接口,用DELPHI4.0调用服务器对象,并使用模板,制作主页。

2.对象抽取
  针对本项目,我详细分析了电信管理网中接入网AN,交换网PBX,光纤网SDH,抽象出下列对象:
  1)电话交换网
  交换网是整个本地网的核心,主要提供电话信息的交换和网路的连接。
  在交换网中主要的描述对象有:交换局(交换机)、中继
群、目的码信息等。
  ·交换机
  描述交换机所在的地理位置、交换机名称、各交换机之间的连接关系、与SDH设备的连接关系以及其他附加信息。
  ·中继群
  描述中继群的编号、中继群的方向、与交换机的连接关系以及中继群级别和名称等。

2)SDH传输网
  SDH 是骨干网上使用的传输技术,主要提供局端之间的传输。
  SDH网中主要的描述对象有:站点(机架)、网元(机框)、机盘、 业务等。
  ·站点sdh
  包括各站点的地理名称、地理分布、相互之间的连接关系以及与交换机的连接情况。
  ·网元netelement
  对站内各网元分配标识符、确定网元类型、端口类型、时钟、在管理网中的访问地址等。
  ·机盘(plate)
  机盘配置反映网元内机盘的类型、机盘的排列顺序号。
  ·业务

SDH的业务配置包括高、低阶通道的配置,路径配置,电路(2M时隙)配置,交叉连接等内容。

  3)接入网AN
  接入网(AN)是指交换局到用户终端之间的所有机线设备。AN的目的是综合考虑本地交换机、用户环路和终端设备,通过有限的标准接口,将各种用户接入到业务节点。AN一般不含交换功能。AN覆盖的范围可用业务节点接口(SNI)、用户网络接口(UNI)和Q3接口来标识。
  AN一般包括两个部分,一个是局端设备,一个是远端设备。
  在接入网中,主要的描述对象有:节点信息、业务接口信息、端口信息、机框信息以及插板信息等。
  ·节点信息
  描述节点标识、节点名称、物理位置、与远端(局端)模块的连接关系以及与交换机的连接关系。
  ·机框信息
  描述在一个节点内各机框的排列顺序以及所带插板的情况。
  ·插板信息
  描述插板的类型、名称以及所属的机框信息。
  ·业务接口
  描述节点内接口的类型、名称、位置以及接口内各类端口的数量信
息和当前接口的状态。
  ·端口信息
  AN中提供几类端口,主要是适应不同用户的接入方式以及接入控制手段。端口主要分为:POTS端口、E1端口、BRI"U"端口以及E1端口的时隙分配情况等。

  3.定义IDL接口并实现服务器部分
  下面就其中的一个对象实现来说明CORBA 的使用。
  在上述对象中,我选择了其中一个对象SDH,实现它的报警功能.
  首先我使用Delphi 中的TYPE LIBRARY 定义SDH 中各属性与方法,用CORBA IDL 导出(适用于Delphi 来实现客户机部分,如果要用Orbix实现客户机部分,则用MIDL导出IDL 接口)。
其IDL 接口如下所示:
module Csdh //一个大模块
{
interface Isdh //SDH 站点对象
{
string Get_Id();
string Set_Id();
string Get_Name();
string Set_Name();
string Get_Disname();
string Set_Disname();
string Get_Pbxid();
string Set_Pbxid();
Ipath Get_ppath();
Ipath Set_ppath();
Inetelement Get_pnetelement();
Inetelement Set_pnetelement();
Ialarm Get_palarm();
Ialarm Set_palarm();
void init(); //初始化站点
long queryalarm(in Ialarm palarm); //查询当时的告警信息
long queryalarmofanytime(in double anytime, in Ialarm palarm); //查询任何时刻的告警信息
};

interface sdhFactory
{
Isdh CreateInstance();
};
interface Ipath //有关链路信息类
{
string Get_Id();
string Set_Id();
string Get_sourceId();
string Set_sourceId();
long Get_DisId();
long Set_DisId();
long Get_PKGId();
long Set_PKGId();
string Get_pType();
string Set_pType();
string Get_Direction();
string Set_Direction();
string Get_PbxId();
string Set_PbxId();
string Get_DstpbxId();
string Set_DstpbxId();
};

interface Inetelement //SDH 中的网元类
{
long Get_Seriorl();
long Set_Seriorl();
string Get_Id();
string Set_Id();
long Get_ptype();
long Set_ptype();
long Get_softwareversion();
long Set_softwareversion();
long Get_platenum();
long Set_platenum();
Iplate Get_pplate();
Iplate Set_pplate();
};

interface pathFactory
{
Ipath CreateInstance();
};
interface netelementFactory
{
Inetelement CreateInstance();
};

interface Ialarm //有关告警信息的类接口
{
string Get_Id();
string Set_Id();
double Get_ptime();
double Set_ptime();
string Get_information();
string Set_information();
string Get_reason();
string Set_reason();
string Get_resolve();
string Set_resolve();
long Get_nettype();
long Set_nettype();
string Get_netelementId();
string Set_netelementId();
string Get_plateId();
string Set_plateId();
};

interface alarmFactory
{
Ialarm CreateInstance();
};

interface Iplate //网元中的一个机盘类信息
{
long Get_Aid();
long Set_Aid();
long Get_NO();
long Set_NO();
long Get_Type_();
long Set_Type_();
long Get_SSS();
long Set_SSS();
long Get_MSS();
long Set_MSS();
Ialarm Get_pAlarm();
Ialarm Set_pAlarm();
};

interface plateFactory
{
Iplate CreateInstance();
};
};

然后,在实现单元中,实现上述的各函数.(略),并进行编译.

4.实现客户机部分.
  首先用Frontpage 98 或Interdeve做好静态部分,动态部分先做好模板,利用这些模板,用Delphi实现ISAPI,(这一部分,可参看Delphi ISAPI编程)在其中调用服务器部分.

调用过程中,需要启动服务器部分,有两种启动方式:
  1)动态启动.必须使用OAD 对CORBA对象在Interface Repository中注册,让CORBA对象与服务器程序建立对应关系.
  注册命令:IREP 如Irep Isdh sdh.idl //sdh.idl 是接口定义文件.Irep Delphi 中已经提供.
  2)人工启动,在调用服务器前,先启动服务器程序.
  访问CORBA对象,也有两种方式:
  1)静态发式.使用类型库描述文件,如上述例子中,在客户机程序中加入CSDH_TLB.pas
  2)动态发式DII,也要求服务器程序在Interface Repository中注册.
  另外,不管是使用上述任何一种方法,都需要在局域网中运行SmartAgent 程序.SmartAgent是动态的分布式的目录服务,用于定位服务器对象.
这里我使用静态调用方法来说明:
uses CORBAinit;//另外添加
var m_sdh:Isdh;
m_alarm:Ialarm;
begin
CORBAInitialize;
m_sdh:=TsdhFactory.CreateInstance('');
m_alarm=TalarmFactory.CreateInstance('');
m_sdh.QueryAlarm(m_alarm);
……….

end;

对我国电信管理网的建设是一项长期艰巨的系统工程,并不是在短期内就可以完成的,它需要来自各方面的努力和关注,也需要在其中投入相当的人力、物力和财力。从本文的论述中可知,TMN是一直处于不断完善、不断改进和不断成熟中的一门新的电信技术,在中国,TMN的建设特别需要与中国国情和电信行业现状以及中国电信市场需求紧密相联。 在引入TMN的时候,必须时刻注意将先进技术中国化的方式和方法。由于本文篇幅有限,不可能覆盖TMN的各个领域,也不可能针对TMN中出现的所有问题进行研究。对于本文未涉及到的其它问题,还有待进一步的研究和探讨,例如面向对象在TMN建模中进一步的应用、TMN各管理功能相互协调与配合、TMN在网络层中的分布式处理的方法研究等等.
  本文主要介绍了目前发展最快的分布式对象技术,并且选择了其中的一种技术-CORBA来开发TMN电信管理网.开发过程中,我提出了一套解决TMN的方案,即分布式组件-WEB---浏览器,这套方案也适用所有具有分布式特征的各种应用。 编程语言我主要使用了Delphi4.0,CORBA产品使用Visibroker,选用Delphi 4.0是因为其编程环境可视化,开发速度较快,并且对CORBA的支持也不错.但是在开发过程中也发现了许多缺陷,如DELPHI与web的结合不是很强,做主页不够灵活,IDL的转化数据类型有限等等.这些缺点是Inprise 公司本身的开发缺陷造成的,并没有降低CORBA的魅力.由于该TMN系统采用分布式结构,CORBA只是它的实现的一种方案,我们可以任意选择各种分布式技术,采用各种语言,大大增加了该系统的开发灵活度。