一种用于集成环境的多层软件总线结构的制作方法

文档序号:6526961阅读:159来源:国知局
一种用于集成环境的多层软件总线结构的制作方法
【专利摘要】一种用于集成环境的多层软件总线结构,所述结构包括多层总线和插件;多层总线由若干处于不同层次的总线组成,这些总线按照树的拓扑结构组织在一起:最底层有且只有一条总线,称为全局总线,其他各层次的总线都称为局部总线,以全局总线为树根,形成多层的树状结构;插件是集成环境中被集成的软件的封装,以服务的形式将被集成软件的功能加入集成环境中。本发明所提出的多层总线结构实现了总线协议的可扩展性,能够通过增加新的局部总线,对总线协议进行扩展,以针对新类型工具进行更加高效、紧密的集成。
【专利说明】一种用于集成环境的多层软件总线结构
【技术领域】
[0001]本发明涉及一种软件体系结构,该体系结构采用了多层总线的设计,底层的总线为插件集成提供基本的动态加载、数据访问支持,上层的总线则针对特定类型的插件提供相应的数据类型支持和运行控制支持。这一体系结构,既能够保证工具集成系统的可扩展性,又简化了系统实现的难度,有效地解决了各类软件工具的集成问题。
【背景技术】
[0002]计算机软件工具已被广泛应用于各种产品研制流程中,一个产品研制流程中往往可能使用若干不同的软件工具,这些工具之间的数据和控制交互需要人工完成,这引入了较大的工作量和潜在的质量问题,因此有必要将这些工具进行集成,实现自动化的工具间数据和控制交互。软件总线技术是一种被广泛使用的工具集成技术,不同的工具按照统一的规范连接到同一软件总线上,实现数据的统一管理和工具的自动调用,提高产品研制的效率。
[0003]然而,在产品研制流程中使用的软件可能来源不同、功能不同、操作方式不同、所使用的数据抽象层次和描述方式不同,定义统一的总线规范来对这些不同的工具进行统一的操作,并对工具的输入输出数据进行统一的描述,是非常困难的。为解决这一问题,本发明提出了一种多层总线的结构,底层总线提供基本的工具集成支持,上层总线则针对不同类型的工具提供专门的支持,通过这种方式解决上述问题。
[0004]目前工业界已发布并实现了若干用于软件工具集成的软件总线,例如IBM的Websphere、Oracle的Oracle Service Bus,其目的主要是将各自企业提供的软件以Web服务的形式开放,以便企业自身开发人员以及第三方开发人员能够方便的使用企业提供的软件功能,构建、定制客户所需的系统。这些软件总线具有一定的可扩展性,通过统一的协议将不同工具集成在一起。但这些软件总线都是基于Web服务的,工具间的通信效率较低,适用于分布式的工具集成,而不适用于软件开发平台、建模平台、图形处理平台这类对响应速度和数据传输速度要求较高的情境;这些总线只支持工具的扩展,而不支持协议的扩展,而为了能够支持不同种类工具的扩展,制定了复杂的通信协议(或互操作规范),也使得开发人员的学习成本较高。
[0005]另一类广泛应用的工具集成技术是插件技术。插件是实现原系统平台不具备的功能的程序,其只能运行在程序规定的系统平台下,而不能脱离指定的平台单独运行,因为插件需要调用原系统提供的函数库或者数据。在各种开源或商业软件中,如开源的Eclipse项目、微软的Visual Studio、IBM的Rational DOORS等系统中,都应用了插件技术,以便用户能够根据需要对原系统进行扩展和定制。本质上,插件所依赖的系统平台即作为软件总线,插件要按照系统平台的要求进行开发,调用系统平台提供的接口访问相关资源,对功能进行扩展。插件技术多用于单机运行的软件,工具调用效率和数据传输速度比较高。但这种方式不便于被集成工具间的通信,同时,也无法实现总线协议的扩展,因而所支持的工具种类受到了限制。[0006]本发明提出的多层总线结构以全局总线作为基础,支持工具的扩展和总线的扩展,利用不同层次的局部总线实现对不同类型工具的高效集成。

【发明内容】

[0007]本发明解决的问题是:克服现有技术的不足,提供一种可扩展的、适用于对功能不同、所使用数据不同的工具进行集成的多层总线结构,以全局总线作为基础,支持工具的扩展和总线的扩展,利用不同层次的局部总线实现对不同类型工具的高效集成。
[0008]本发明解决方案,该体系结构采用了多层总线的设计,底层的总线为插件提供基本的动态加载、数据访问支持,上层的总线则针对特定类型的插件提供相应的数据类型支持和运行控制支持。这一体系结构,既能够保证工具集成系统的可扩展性,又简化了系统实现的难度,有效地解决了各类软件工具的集成问题。
[0009]为达到上述目的,本发明的技术方案如下。
[0010]1.多层总线与插件的组织方式
[0011]多层总线是一种新型的软件总线,由若干处于不同层次的总线组成,这些总线按照树的拓扑结构组织在一起:最底层有且只有一条总线,称为全局总线,其他各层次的总线都称为局部总线,以全局总线为树根,形成多层的树状结构。每一条总线上都可以直接连接多条局部总线,称为该总线的子总线;每条局部总线有且只有一条与其直接连接的下层总线,称为该总线的父总线。全局总线为所有类型的插件的集成和互操作提供基本的支持。而每一条局部总线针对一类插件的集成和互操作提供有针对性的支持以提高插件集成和互操作的效率。上一层总线所支持的插件的集和为其父总线所支持插件的子集,因此,子总线是其父总线的具体化。
[0012]全局总线与其子总线直接连接;局部总线与其父总线和子总线直接连接。总线之间通过上述连接进行数据传递和功能调用。
[0013]全局总线提供基本数据类型和基本操作类型的定义,以这些基本数据类型和基本操作类型为参数,实现插件间的数据传递或功能调用;全局总线还规定插件所必须实现的基本接口,通过这些接口,全局总线能够按照基本操作的定义来调用插件的功能,或实现与插件的数据传递。
[0014]局部总线则根据一类插件的具体功能和输入输出数据,定义这类插件公用的扩展数据类型和扩展操作类型;并提供局部总线编程接口,以这些扩展数据类型和扩展操作类型为参数,实现该类插件间较高效的功能调用和数据传递;此外,局部总线还规定连接局部总线的插件应实现的扩展接口,通过这些扩展接口,局部总线能够按照扩展操作的定义来调用插件的功能,或实现与插件的数据传递。
[0015]全局总线定义的基本数据类型和基本操作类型适用于描述所有类型插件的输入输出数据和操作,而所有局部总线所定义的扩展数据类型和扩展操作类型是基本数据类型和基本操作类型的子类,是对基本数据类型和基本操作类型的具体化,描述了一类数据或操作更多的语法和语义信息;同样,局部总线中子总线所定义的扩展数据类型和扩展操作类型也是其父总线所定义类型的子类,比父总线定义的类型描述更具体的语法和语义信肩、O
[0016]插件是集成环境中被集成的软件的封装,以服务的形式将被集成软件的功能加入集成环境中。一个插件提供一个或多个功能,每个功能对应插件所封装的被集成软件的一个功能。各插件都连接在多层总线上,通过多层总线进行插件间的数据传递和功能调用,并获得集成环境提供的服务。
[0017]而插件与多层总线的连接具体是插件与多层总线中的某一条总线的连接实现的,该总线称为插件的“直连总线”;反之,称插件是其直连总线的“直连插件”。一般来说,插件应连接在与其类型匹配的最上层总线上,从而充分利用多层总线提供的针对该类型插件的支持。无任何局部总线支持的插件类型,可以直接连接在全局总线上。
[0018]插件与其直连总线间可以直接进行数据传递和功能调用,并通过其直连总线与其他总线、插件进行间接的数据传递和功能调用。
[0019]全局总线只能以基本数据类型和基本操作类型作为参数,实现两个插件间的功能调用或数据传递时,两个插件必须进行一对一的参数数据解析;局部总线根据工具的输入输出类型定义更丰富的数据类型和操作类型,并直接按照这些数据类型和操作类型进行参数的传递;此外,局部总线还能够定义更丰富的插件功能调用方式,便于实现插件间的紧密集成。
[0020]2.插件信息的收集
[0021]一个插件提供一个或多个服务,作为供其他总线或插件调用的基本单位。在一个总线上,所有插件都具有一个唯一标识;一个插件上,所有服务具有一个唯一标识。同时,每个总线也具有一个全局的唯一标识。通过这些标识,可以对插件、服务进行查找。
[0022]在系统初始化时,全局总线和各局部总线各自扫描系统中存在的插件,根据插件的接口信息,识别直连插件,形成各自的直连插件列表和服务列表。
[0023]之后,从顶层总线开始,各层次总线将获取子总线上连接的插件,形成总线上面直接或间接连接的所有总线的列表。
[0024]3.插件间的调用
[0025]当一个插件要调用其他插件的功能时,需要向其直连总线发送调用请求。发送调用请求是通过调用插件调用请求接口实现的,所有总线都提供格式相同的插件调用请求接口。直连总线首先从直连插件列表中查找对应的插件。若找到,则加载并调用该插件;若未找到,则向上一层总线发送操作请求,由上一层总线接手插件的查找和调用的任务;如此反复,直到找到插件并调用成功。
[0026]从另一角度,当总线接收到插件调用请求并确定该插件直接或间接连接在自身时,首先查看插件是否在自身的直连插件列表中:若在,则直接调用;若不在,则向对应的子总线发送插件调用请求,再由子总线处理,直到找到插件的直连总线,由其实现对插件的调用。
[0027]当一个插件调用请求从上层总线转发到下层总线时,上层总线要按照下层总线的数据格式对调用请求附带的参数进行封装,再进行发送。例如,全局总线上只定义了字符串和文件路径两种数据格式,如果全局总线上一层的局部总线要想全局总线转发调用请求,必须将请求附带的参数转换成字符串或者保存为文件,再将字符串或文件路径作为调用参数转发给全局总线。
[0028]而当一个插件调用连接到统一总线上的插件时,则无需上述转换。
[0029]反之,当一个通信请求从下层总线转发到其子总线时,子总线需要对通信请求附带的数据进行解包,通过文本解析、反射技术,将下层总线传来的基本数据类型的数据转换为子总线定义的更具体的扩展数据类型,从而便于进行后续处理。
[0030]图2描述了两个插件间调用的过程。图中插件A与插件B都连接在局部总线X上,而插件C连接在局部总线Y上。局部总线X、局部总线Y都连接在全局总线上。插件A要调用插件B的服务BI时,首先向局部总线X发送调用请求,局部总线X在直连插件列表中找到插件B,并直接调用插件B的服务BI。而插件B要调用插件C的服务Cl时,需要向局部总线X发送调用那个请求。插件C没有连接在局部总线X上,因此,局部总线X将调用请求的参数封装后,将调用请求转发给全局总线,全局总线再向局部总线Y转发该调用请求。最后,插件C的直连总线,即局部总线Y,直接调用插件C的服务Cl,从而实现整个调用过程。
[0031]本发明与现有相比的优点在于:本发明所提出的多层总线结构实现了总线协议的可扩展性,能够通过增加新的局部总线,对总线协议进行扩展,以针对新类型工具进行更加高效、紧密的集成。
【专利附图】

【附图说明】
[0032]图1是多层总线结构示意图;
[0033]图2是多层总线结构下插件间调用过程示意图;
[0034]图3是两层总线实例结构图。
【具体实施方式】
[0035]以下以一个高可信嵌入式软件集成开发环境编码部分的多层总线为例,对本发明做进一步说明。
[0036]实例对象为高可信嵌入式软件集成开发环境的多层总线,包括全局总线以及编码阶段局部总线和测试阶段局部总线。其中编码阶段局部总线上连接代码编辑器、编译器两个插件;测试阶段局部总线则连接着嵌入式系统仿真运行环境插件。
[0037]1.全局总线
[0038]全局总线定义“参数”、字符串和路径这三种基本数据类型,定义调用服务这一种基本操作。
[0039]“参数”为最基本的数据类型,所有参数数据类型继承自此数据类型,在编程实现中可采用Object (Java、C#)、CObject (MFC)来作为参数的数据结构实现。
[0040]字符串类型即一个字符串,继承自“参数”类型。路径类型则是一个特殊的字符串,继承自字符串类型。
[0041]服务调用的基本操作是插件或总线调用适配器功能的基本接口,需要三个输入参数:插件的标识、服务标识、输入参数列表。
[0042]2.编码阶段局部总线
[0043]编码阶段局部总线定义“源代码”、“目标码”这两种扩展数据类型(从数据结构上看,扩展数据类型为基本数据类型的子类);同时定义代码编辑、代码编译两种扩展操作(从数据结构上看,扩展操作对应数据结构为基本操作数据结构的子类)。
[0044]针对每类数据定义一个固定的描述方式,及所谓的公共数据模型,如下:
[0045](I)源代码数据结构定义:[0046]
【权利要求】
1.一种用于集成环境的多层软件总线结构,其特征在于:所述结构包括多层总线和插件; 多层总线由若干处于不同层次的总线组成,这些总线按照树的拓扑结构组织在一起:最底层有且只有一条总线,称为全局总线,其他各层次的总线都称为局部总线,以全局总线为树根,形成多层的树状结构;每一条总线上都能够直接连接多条局部总线,称为该总线的子总线;每条局部总线有且只有一条与其直接连接的下层总线,称为该总线的父总线;全局总线为所有类型的插件的集成和互操作提供基本的支持,而每一条局部总线针对一类插件的集成和互操作提供有针对性的支持以提高插件集成和互操作的效率;上一层总线所支持的插件的集和为其父总线所支持插件的子集,子总线是其父总线的具体化;全局总线与其子总线直接连接;局部总线与其父总线和子总线直接连接,总线之间通过上述连接进行数据传递和功能调用; 插件是集成环境中被集成的软件的封装,以服务的形式将被集成软件的功能加入集成环境中;一个插件提供一个或多个功能,每个功能对应插件所封装的被集成软件的一个功能;各插件都连接在多层总线上,通过多层总线进行插件间的数据传递和功能调用,并获得集成环境提供的服务;插件与多层总线的连接具体是插件与多层总线中的某一条总线的连接实现的,该总线称为插件的“直连总线”;反之,称插件是其直连总线的“直连插件”;插件应连接在与其类型匹配的最上层总线上,充分利用多层总线提供的针对该类型插件的支持,无任何局部总线支持的插件类型,可以直接连接在全局总线上; 插件与其直连总线间直接进行数据传递和功能调用,并通过其直连总线与其他总线、插件进行间接的数据传递和功能调用。
2.根据权利要求1所述的 一种用于集成环境的多层软件总线结构,其特征在于:所述全局总线,提供基本数据类型和基本操作类型的定义,以这些基本数据类型和基本操作类型为参数,实现插件间的数据传递或功能调用;全局总线还规定插件所必须实现的基本接口,通过这些接口,全局总线能够按照基本操作的定义来调用插件的功能,或实现与插件的数据传递; 所述局部总线则根据一类插件的具体功能和输入输出数据,定义这类插件公用的扩展数据类型和扩展操作类型;并提供局部总线编程接口,以这些扩展数据类型和扩展操作类型为参数,实现该类插件间较高效的功能调用和数据传递;此外,局部总线还规定连接局部总线的插件应实现的扩展接口,通过这些扩展接口,局部总线能够按照扩展操作的定义来调用插件的功能,或实现与插件的数据传递; 全局总线定义的基本数据类型和基本操作类型适用于描述所有类型插件的输入输出数据和操作,而所有局部总线所定义的扩展数据类型和扩展操作类型是基本数据类型和基本操作类型的子类,是对基本数据类型和基本操作类型的具体化,描述了一类数据或操作更多的语法和语义信息;同样,局部总线中子总线所定义的扩展数据类型和扩展操作类型也是其父总线所定义类型的子类,比父总线定义的类型描述更具体的语法和语义信息;全局总线只能以基本数据类型和基本操作类型作为参数,实现两个插件间的功能调用或数据传递时,两个插件必须进行一对一的参数数据解析;局部总线根据工具的输入输出类型定义更丰富的数据类型和操作类型,并直接按照这些数据类型和操作类型进行参数的传递;此外,局部总线还能够定义更丰富的插件功能调用方式,便于实现插件间的紧密集成。
3.根据权利要求1所述的一种用于集成环境的多层软件总线结构,其特征在于:所述各插件都连接在多层总线上,通过多层总线进行插件间的数据传递和功能调用,并获得集成环境提供的服务的实现如下: (1)在初始化时,多层总线中的各条总线各自扫描系统中存在的插件,根据插件的接口信息,识别直连插件,形成各自的直连插件列表和服务列表;之后,从最上层总线开始,各层总线将获取子总线上连接的插件和服务信息,形成总线上直接或间接连接的所有插件的列表; (2)当一个插件要与其他插件进行功能调用或数据传递时,需要向其直连总线发送通信请求,发送通信请求时通过通信接口实现的,所有总线都提供各式相同的通信接口 ;该插件的直连总线首先查找目标插件是否是其直连插件,若是,则加载并调用该插件进行通信,也即进行对应的功能调用或数据传递;若不是,则向上一层总线发送操作请求,由上一层总线接受进行通信请求的发送任务;如此反复,直到找到目标插件,并进行功能调用或数据传递; (3)当总线接收到通信请求时,首先检查目标插件是否直接或间接连接到自身;若否,则不做响应。若是,检查目标插件是否是自身的直连插件:若是,则直接进行功能调用或数据传递;若否,则向所有子总线转发该通信请求,再由子总线进行处理,直到找到目标插件的直连总线,尤其实现对插件的通信。
4.根据权利要求3所述的一种用于集成环境的多层软件总线结构,其特征在于:所述各插件通过多层总线发送调用数据时,需要依据数据传输过程中所经历的各层总线的数据类型定义对数据进行封装; 当一个通信请求从上层总线转发到其父总线时,上层总线需要按照父总线的数据类型定义对通信请求附带的数据进行封装,再进行发送;` 反之,当一个通信请求从下层总线转发到其子总线时,子总线需要对通信请求附带的数据进行解包,通过文本解析、反射技术,将下层总线传来的基本数据类型的转换为子总线定义的较具体的扩展数据类型,从而便于进行后续处理。
【文档编号】G06F13/40GK103714035SQ201310751618
【公开日】2014年4月9日 申请日期:2013年12月31日 优先权日:2013年12月31日
【发明者】杨孟飞, 郭向英, 顾斌, 赵雷, 陈睿, 郝伟, 盛庄, 黄晨, 沈沛 申请人:北京控制工程研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1