分布式软件开发环境的制作方法

文档序号:6491656阅读:304来源:国知局
专利名称:分布式软件开发环境的制作方法
本申请要求申请号为60/131,506的临时申请的优先权,该临时申请题为“分布式软件开发环境”,其整体内容在此通过引用而加入到本申请中。
在面向对象的程序设计中,对象一般被定义为数据和对这些数据进行操作的组合。一个应用网络通常是由对象(程序)构成的结合体,它们通过通用的接口结合在一起以完成一个指定的任务。面向对象的软件系统一般提供一个结构规范,归结为一种对象模式,使开发的对象能在一个应用程序中协调工作。
称做对象管理组织(“OMG”)的产业联盟在公共对象请求代理体系结构(Common Object Reguest Broker Architecture)(“CORBA”)规范下制定了一个面向对象的系统的标准。CORBA规范定义了针对处于一种分布式客户一服务器环境下的对象所构成的分布式计算环境。遵循CORBA规范的对象代理(broker)提供了一种机制,通过它,对象或其他应用可以向系统管理下的其他对象发出请求并得到应答。CORBA方法根据需要在分布式系统的不同部分利用了多种对象代理,以适应系统资源的增长或重新配置。这些对象代理的任何一个都能访问相应的运行和接口库的信息。对象的申请对用户是透明的,这种透明性在于一个对象的操作可以在一组计算设备上执行,调用对象操作的实体不必知道对象操作在哪里驻留和执行。从而,通过使用CORBA方法,单独的用户不必再考虑特定程序是在哪里驻留和执行的,因为这些细节由基于CORBA的系统来管理。进一步说,通过定义一个固定的操作集,CORBA方法使来自不同经销商的对象代理能够相互通讯,使系统具有更普遍的兼容性。
通过改变各自的属性库的信息,新对象可以简单地加入基于CORBA的系统中,因为与对象交流和执行对象的所有信息都包含在接口和执行库中。这样,基于CORBA的系统可以很容易地升级以适应新的或修改过的对象。因为面向对象的方法允许一个对象操作的实际执行对用户透明,现存的应用只需修改它们的接口以在一个基于CORBA的系统中工作。这样,现有的应用程序就不需要完全重写了。
专利号为5,838,970的美国专利介绍CORBA有几个限制。第一,CORBA不提供在一个对象被创建后移动这个对象的机制。第二,CORBA不构造为能够通过网络访问的个人用户信息,或许可系统资源在用户级或对象级被管理起来。CORBA不支持一个给定对象类型的多个版本的使用。CORBA也不能对用户高频使用的资源的复制提供有效的方法。970号专利描述了一个面向对象的计算机环境,其中处理或传送信息的方式可以在操作过程中被改变。环境是通过一些属性库来管理的,它们在对象的生命周期内可以被访问,还有启动对象操作所需的信息。属性库可以被赋予不同的优先级以控制存储信息的分布。通过利用检索自可改变的属性库的信息去影响目标的操作,基于信息处理的计算机可以按照需要扩展。通过改变应用属性库的内容也可以实现软件升级。CORBA还有一些缺点,就是不能提供选择和决定共享变量,不能选择兼容的应用系统和对可用的CORBA组件做动态重配置,并且CORBA只支持单一接口。
CORBA工具还处在它的幼年阶段,因为它象以前讨论过的那样不能从事系统管理(对于大型的面向网络的应用)。另外,众所周知,CORBA在设计过程中没有考虑到实施系统(管理网络和支持网络提供者的操作和服务)对于对象和交互型的影响。例如,CORBA阻止信息的发送者直到接收方接收并予以确认。这使分布式应用的并发操作更加繁忙。另外在发送者与接收者之间会发生锁死。还有,CORBA不支持多循环事务而不支持对象和接口的版本变化。此外,XORBA不解决与异步通信相关的缓冲损耗。这样,程序员不得不处理作为与共享接口相关的结构和协议的一部分的缓冲区的可能损耗,从而增加了接口的复杂性。而且,这使使用CORBA IDL的异步的CORBA组件的接口描述非常复杂。
在一个软件应用中安装新版本的对象或接口的常规方式是关闭这个应用再安装新的版本。当这个应用拒绝这个软件的用户时,这种模式可能导致一个难以可接受的延迟。人工管理者可以检查版本以确定他们是否兼容。对象间的不兼容可能由至少一个对象接口的修正引起,从而使对象不兼容。人工管理者可以手工找出兼容的系统并选择运行那一个。这种手工技术已经被Rakesh Agraway,和H.V.Jagadish在1989年关于超大型数据库的国际会议第十五届会议会刊中的文章“On Correctly Configuring Versioned Objects(关于正确地配置版本化的对象)”中作了描述。可是,如果一个对象有很多版本,人工管理者是很难确定兼容的对象的。
常规的自动技术用一种基于规则的方法来管理兼容的应用系统,例如,参看R.H.Katz,和E.Chang在1987年关于超大型数据库的国际会议第十3届会议会刊中的文章“Managing Change in a Comp-AidedDesign Database(在计算机辅助设计数据库中的管理变化)”中作了介绍。然而,在大的网络应用中,不同接口的结构和协议用规则来表达是复杂和困难的。从而,就需要提供一种面向对象的软件开发环境,在应用执行过程中,能支持动态地更新应用程序的版本,动态地维护兼容的系统和进行动态重配置,从而避免关机,方便接口的改进。
对象的每个接口有一个唯一的全局标识值。兼容接口的确认是通过在一个管理结构内登记接口的全局标识和接口的版本实现的。更适宜的是,该管理结构用一种增量方式赋予对象和接口版本号。该管理结构可以用一种分布式的选择方式为所有唯一的兼容接口应用系统生成一个局部顺序。
修改的CORBA IDL结构通过实现语义的精确性和与对象协调问题无关的重要的对象接口根本性来从根本上改变设计过程。这个环境简化了复杂的非独立/独立的面向网络应用的事物处理过程的描述。其支持人工管理的能力,如读/写对象的状态的能力、取得/设置对象状态的能力、从外部取得/设置时钟的状态而不需要其组件参与的能力、利用从修改过的CORBA IDL说明中获得类型资料将原始数据转换为有用数据,然后利用修改过的CORBA IDL结构将有意义的说明放入事物处理中的能力,使得对应用程序的外部观察与控制容易了。
本环境可以被用来建立一个应用网络和对应用网络做一致性的和透明的动态修改。管理结构可以包括与应用对象相关的管理对象。管理对象将其信息传送给人工管理者对象。
因此,人工管理者对象可以在建立和重配置应用网络时控制对象的运转而不需要对象的参与。在设计阶段时,管理结构也可以被软件开发者用来进行无范围的协商。
本发明将参考下列附图得到全面说明。
附图的说明

图1是一个根据本发明构思的分布式软件开发环境的结构图。
图2A是一个多对象的分布式网络的示意图。
图2B是一个处于二相位事物处理的多对象的分布式网络的示意图。
图3A是一个交互网络和相位的示意图。
图3B是在一个交互时钟不同相位的步骤示意图。
图4是一个分布的管理网络的示意图。
图5是一个生命周期各阶段的示意图。
图6是一个网络应用的示意图。
图7是一个无范围协商的方法的示意图。
图8是一个协商网络的示意图。
图9是一个执行一个网络应用的步骤的方框图。
图10是一个确定兼容性应用软件的方法的流程图。
图11A是一个发展的网络应用的示意图。
图11B是一个由于图11A的发展导致的更多兼容应用的示意图。
图12A是一个由人工管理者设立的一致和透明的网络应用的示意图。
图12B是一个使达到静止的所用的中断最小化的示意图。
图13是一个设立一致和透明的应用网络的方法的流程图。
图14是一个如图11所示的网络应用为更换对象而重配置时的示意图。
图15是一个如图11所示的网络应用为实现新版本的接口而重配置时的示意图。
详细说明现在将更详细地对本发明的一个优选的实施例进行参照说明,它的一个例子示于附图中。无论如何,在可能的情况下,同样的参照数据在相同或部分相同的情况下将贯穿始终的用于图形和说明中。
图1是一个按照本发明的教导构造的分布式软件开发环境10的简化的体系结构图。环境10包括多个结构。每个结构可以独立运行或与一个或多个其他结构相互作用来设计、实现、管理和维护面向网络的应用程序12的各个方面。分布式网络结构14动态地建立了对象和对象间的连接。事物处理结构15提供了对象间事物处理的控制。交互结构16提供了对象间交互的控制。修改后的CORBA IDL结构18提供了面向对象的操作和定义对象接口的接口描述语言(IDL)。人工管理结构19提供了对象信息和对象接口的集中化的管理。生命周期结构20定义了软件开发的不同阶段。人员维数结构21定义了人员与生命周期结构20的交互作用。
分布式网络14结构包含了由兼容接口连接的对象组成的交互式网络。对象是异步处理的实体,它可以启动对其他对象的事物处理请求,接收来自其他连接的对象的事物请求和为其提供服务。对象可以是数据结构的集合,以及对这些数据结构进行操作的方法的集合。对象与其它对象通过对象端口共享其接口。在一个兼容的接口中,数据结构是相同的,其协议可以被所有连接到这个接口的对象端口很好地理解。对象端口可以被对象动态创建。每个对象有一个状态。它的状态是由一系列完整地描述对象及其运行时行为的状态变量的值构成的。由对象启动的事物处理影响相应的接收对象的状态。每个对象可以和很多对象的端口发生关联。一个分布式网络的状态包括其组件对象的内部状态和对象间接口的状态。
图2A展示了分布式网络结构14的组件,其中对象30a包括对象端口32a。接口34a连接到对象端口32a,接口34也连接到对象30c的对象端口32a。对象30c的对象端口32d连接到接口34b。接口34b也连接到对象30b的对象端口32b。从而,对象30a通过对象30c连接到对象30b。例如,对象30a可以是一个客户或启动一个事物处理的启动者对象。对象30c可以是一个接收者或接收来自对象30a的事物处理的处理和内容的服务器。
事物处理结构15利用事物处理相位提供了动态的外部观察和控制。一个事物处理是在两个或多个对象间交换的消息流,它由其中的一个对象启动。因此,在本发明中,一个事物处理过程包含一个启动者对象,它和一个或多个数量动态变化的接收对象交换信息。这个事物处理在启动者对象中完成。假定事物处理在有限的时间内完成而且事物处理的启动者对象知道事物处理的完成。每个对象端口有一个结构和协议为其接口执行这个事物处理。一个非独立的事物处理是指这种一种事物处理,其完成需要依靠其他的事物处理。一个独立的事物处理是指这样一种事物处理,其完成由自己决定而不需要依靠其他任何事物处理。每个对象端口可同时初始化和服务于多个独立或非独立事物处理。
一个事物处理可包含一个或多个事物处理周期。事物处理的相位被分配到事物处理周期中。每个事物处理相位被分配一个值。事物处理相位的数量对面向网络的应用程序是特定的。动态变化的对象端口数可以和事物处理相位相关联。被调谐到紧接着的较高阶事物处理相位的对象端口可以观察和控制调谐到紧接着的较低阶事物处理的对象端口而不需要调谐到较低阶的对象端口的参与。事物处理的内容可以作为一个数据包利用一个分布式邮件系统用邮包方式传送。低阶事物处理相位的数据包和控制被传送到一个紧接着的较高阶。一旦当前最高阶相位得到一个最高阶相位数据包,事物处理和控制就会返回紧接着的较最低阶的对象端口。
参看图2B,作为一个事物处理结构15的例子,对象30a、对象30b和对象30c被连接到一个循环的通讯路径36。对象30a和30b是在以相位0代表的较低相位。对象30c是在以相位1代表的较高相位。对象30c从对象30a和对象30b接受数据包35和控制。对象30c可以修改数据包35和将其返回给对象30a和对象30b。例如,对象30c可能是一个需要知道较低相位事物处理内容的测试器或管理对象代理。在测试阶段,测试器可以修改对象的输入。管理对象代理可以利用低阶事物对象处理的内容支持事物处理的故障和恢复。
交互结构16是一组交互机制,交互工作按步骤处理,以为两个或更多的对象端口提供连接或通讯路径。一个交互框架16的例子在S.Das等人的"Foundations for Concurrency Among Objects(对象并行操作的基础)",COMPCON,(1991年2月)和P.Bhattacharya等人的"Microkernel for Wireless Information Networks(无线信息网络的微核)",Kluwer Academic,(1993年春)中得到了说明,其教导结合于本申请中作为参考。交互结构16支持一个事物处理中所有对象的共享信息的选择和决定。一个对象的每个接口都和交互端口的时钟相关,互联的对象端口之间所有的事物处理都是通过对象端口和交互端口时钟实现的。交互框架16可以用具有循环通讯路径的交互网络来描述,如上述那样,称为一个环。对象可以通过对象端口连成环。上述数据包在连接对象组之间围绕着该环在一个方向上运动。每个对象端口可以调谐到与该环相关的时钟相位上。连到一个特定时钟相定的对象端口数目是可以动态变化的。时钟相位也叫时钟端口。
从每个对象端口,一个时钟端口接收数据和两个(异步)控制信号一个释放(指示用于这一相位的步骤结束)和一个触发器(指出其他连接的对象端口的对该相位的直接意图)。一旦所有的端口都释放并且至少一个被触发了,则时钟端口将升级的信号和收集到的数据返回到环上存在的下一个时钟端口。接收到这个信号的下一个时钟端口把它发送到调谐到这个时钟端口的所有对象端口。如果没有更高的相位,时钟端口将升级发送回连接到同一相位的对象端口。
按步骤进行每个对象端口的设定交互操作。每个步骤随着时交互时钟升级的接收开始,在来自前相位的对象端口的释放和/或触发信号之后,随当前相位的释放和/或触发信号结束。应用交互的状态在连接在一起的组成对象和时钟端口中分布。可以根据应用的需要创建和取消任何数目的时钟端口。在取消前,所有的对象端口被解调谐。当一个对象端口在一个应用中被使用时,它被连接到一个特定的相位,并被称作调谐到该时钟端口的那个相位。只有在成功地调谐到一个特定的相位后,对象端口才能从时钟端口接收一个升级信号和数据包。对象端口只能在相位停止活动后调谐入一个相位,因为调谐到有效相位的对象端口目前已经接到级信息并且这个相位中的步骤还没有完成。如果一个对象端口从环中断开,它就被认为已从一个时钟端口的特定相位中解调谐。一旦解调谐,一个对象端口将不再接收到数据包或对象端口的升级信号。
图3A和图3B展示了一个由交互结构16的执行构成的交互网络39的一个例子。交互网络39包括了沿环36放置的对象30a-30d。对象30a-d的每个对象都由对象ID标识值来标识。每个对象端口32a-d都由唯一的端口ID标识值来标识。时钟环36的缓冲区大小为1。每个对象端口32a-b被调谐到时钟环36的时钟端口38a(相位0或基相位)。同样,对象端口32c-d被调到时钟环36的时钟端口38b(相位1)。所有这些对象30a-d共享同样的接口34。在这个例子里,对象30a有对象ID 1,端口ID 500,接口ID 9,并被调到相位0。对象30b有对象ID 1,端口ID 600,接口ID 9,并被调到相位0。对象30c有对象ID 3,端口ID 700,接口ID 9,并被调到相位1。对象30d有对象ID 4,端口ID 800,接口ID 9,并被调到相位1。
当时钟环36被创建后,基相位0被自动建立。就象图3B所示,相位0有步骤1、步骤2、步骤3直到步骤n。当调到相位0的端口32a和32b释放,并且对象端口32a或32b至少有一个触发相位1升级到步骤1。处于相位0的时钟环36收集数据包35并发送采集到的数据包35和升级信息给调到相位1的对象端口32c和32d。调到相位1的对象端口32c和32d可以读取和修改接收到的数据包35。当对象端口32c和32d结束读/写操作,对象端口32c和32d释放和触发到相位1,相位1上的时钟环36再收集数据包35并发送采集到的数据包35和升级信息给调到相位2的所有端口。在图3A中,因为没有调到相位2或更高相位的端口,时钟环36沿着其自身发送采集到的数据包35和升级信息,所有调到基相位的对象端口32a-32b为基相位的下一步获取升级信息和数据包35。同样,如果有对象端口调到此处,随着相位0的步骤1的结束,相位1的步骤1的开始。同样地,当相位1步骤1结束时相位2的步骤1开始。如果没有调到相位2的,那么基相位的步骤2开始。这些过程本身重复进行直到整个事物处理完成。
一般来说,升级信息的到达指示对每个对象端口确认在以前步骤中被所有的对象端口写的所有内容都发送到事物处理的所有接收方了。时钟环提供了数据的持续性,因为数据将被保持直到其他部分访问它。如果作为一个特定的对象端口,一个升级信息不被发送到下一步,然后它会指出以前步骤的数据还没有被发送。可以用其他方式通知该对象失败。由时钟环为任何相位步骤间的每个对象端口提供的大小为1的缓冲区以简化理解的复杂性,这对于处理如对象故障、时钟故障、外部事物恢复、和内部事物恢复之类的故障是需要的。
每个对象端口发出释放信息为那个相位指出当前步骤的完成。这个释放必须在限定时间内产生以保证事物处理的连续运行。在这个步骤中,对象端口可能已读取了来自前一个步骤的数据、写入其希望已经采集和发送的数据(这可能包括多次写入),或者它什么也没做,立即发送一个释放信号。在任何情况下,一旦对象发送一个释放,它就不再读写数据包。调谐到特定交互网络的对象端口的释放是这样一个事件,它由异步对象生成,并指示对象的状态不被运行在高段相位上的通信所影响,直到收到来自时钟相位的下一个升级信息。释放通知对象的动态重配置、静止、健全和对象的点,对象状态对直到相位的下一个升级信息的接收为止的交互作用是稳定的。
对象端口触发器指示其对其他在下一个较高相位调谐至时钟环的对象端口的直接意图。为了对时间连模,至少一个触发器必须被时钟环接收,从一个对象端口走向下一步以表示其意图。这个单一的意图信号被传送到所有的对象端口作为下一步的直接升级,在当前步骤的结尾。时钟环记录下有多少对象端口调谐到每个相位而非对象端口。一旦它接收到来自这些对象端口所有的释放信息和至少一个触发器,它采集这些单个的元素以构造一个数据包,然后发送这些数据包和升级信息给所有调谐到下一个较高相位的对象端口。从而,时钟从外部提供了同步。它跟踪大量调谐到不同相位的对象端口而后最终发送一个升级信息和数据包给下一个高相位。这减少了调至较高相位的对象端口的复杂性,因为每个对象端口只查询一个事件、升级信息的到达,而不是所有来自每个调至低相位对象端口的所有事件,并提供了无限的协作。
表1说明了一个原代码的执行,它创建适当尺寸和数量的对象端口,并用人工管理结构19作了登记,就象下面描述的一样。
表1<pre listing-type="program-listing"><![CDATA[//一个对象的原代码展示了它怎样创建端口,和它在收到升级时//做了什么,所用术语是Port Advance Handler(端口升级句柄)。端口创建ret=OMF_CreatePort(PortID,PortSize);//用唯一的端口id(PortID)创建端口,PortID是一个整数,PortSize以字节为单位。ret=OMF_Register(PortID);//端口由对象创建并和管理对象一起登录。//对象中没有与建立连接相关的代码。//面向连接的连接是由来自外部的第三方建立的,仅在那时之//后的第一次的升级信息由端口接收。//被各个调谐到一个特定的时钟相位的端口执行的操作称为//端口升级句柄。//以下是端口升级句柄的模板。//在接收到升级信号前,对象状态相对于该接口是稳定的,//因为没有输入。对象必须根据这个接口维持以前的稳定状态//端口升级句柄开始。If ret=OMF_Advanced(PortID)//如果以上是真,则端口已经升级了,对象端口收到了升级信息,//并收到了管理对象中的时钟发送的收集的数据包。//对象状态会受到从连接到这个接口的相临对象发出的应用信//息的影响。相应地改变对象的状态//Do//如果有更多要素从采集来的时钟包中读取,以下ReadData函数返回真If(OMF_ReadData(PortID)==false)then //在包中没有更多的要素要读取,退出Do循环 Exit DoEnd if//然后将元素读入变量RecvData。其根据接口类型可以是一结构或一//串。如果知道类型就可以进行规定,否则就规定一个字节阵列并将//原数据读入该阵列。ret=OMF_LoadData(PortID,SizeOf(RecvData),RecvData)//这里读取接收到的所有不同的消息然后相应地处理它们。//如果对象根据不同的消息需要执行一些动作,则调用这类//合适的方法并产生输出。Loop//DO READ LOOP循环结束。//构成要发送至不同的接收消息的输出响应,或发送对其它对象的请求//以得到服务。然后将数据按需要次数写入端口。该应用针对特定的协//议的。可以不写任何内容。Ret=OMF_WriteData(PortID,SizeOf(SendData),SendData);//此时,对象状态相对于该接口是稳定的。这必须在有限的时间实现。//该状态可以任何情况。但稳定的状态必须被对象维持,直到在该端//口接收到下一升级。同时,同一稳定的对象状态可以根据其它端口//的升级的到来而改变。应用对象可以给出能指出动态重配置所需的//健全点的释放信号。ret=OMF_Release(PortID);//释放发给端口的信号//以下是指示对连接至该时钟的其他对象端口的直接意图的触发信号//连接到时钟。这也是对应用程序所特定的。ret=OMF_Trigger(PortID);//发给端口的触发信号 }//端口升级句柄结束]]></pre>修改的CORBAIDL结构18是由环境10支持的软件开发中的面向对象的技术。修改的CORBA IDL框架18包括了CORBA标准,它由对象管理组在1992年出版的标题为“The Common Object RequestBrokerArchitecture and Specification(公用对象请求代理结构和规范)”的文件中作了说明。以下称为CORBA规范,其被作为参考结合到本申请中。可以理解,无论如何,本发明的内容可以被应用到面向对象系统的不同应用中去。CORBA规范定义了一个对象请求代理(ORB)使对象可以在一个分布式环境中透明地建造,并接收请求和回应。对象服务是执行接口和对象的服务的集合,它支持通过使用和执行对象支持基本的功能,就象在《CORBA服务公共对象服务规范》中描述的那样。公共工具是应用程序可以共享的服务的集合,对象服务比它要更基础一些,就象在《CORBA工具公共对象工具规范》中描述的那样。
客户通过发出请求来请求服务。请求是一个事件,就象发生在特定时候的一些事。与请求相关的信息由操作、目标对象,零个以上(实际)的参数、或者再加上申请内容构成。对象的引用是对象名,它可靠地表示一个特定的对象。特定情况下,对象引用每次在用于一个请求时标识同一对象。对象可以被多个不同的对象引用所表示。一个请求可以拥有把数据传到目的对象的参数;它也可以有一个提供关于该请求的其它信息的请求内容。可以将结果和例外(如果有的话)返回给客户。
对象可以创建和破坏。对象创建的结果是以表示新对象的对象引用的形式展现给客户的。类型是一种具有由数值确定的相关判定(具有布尔型结果的单变量数学函数)的可确认的实体。如果对于一个数值判定为真,则这个数值满足一种类型。满足的数值称作该类型的成员。在CORBA标准中定义了两种基本数据类型基本类型,包括整数、浮点数、字符、布尔量、枚举和字符串;构造类型,包括记录、区分联合、序列、数组和接口。
接口是一组客户可能请求对象进行的操作的描述。如果在每个由接口描述的可能的请求中对象都能指定为目标对象,则该对象满足该接口。接口类型是由满足特定接口的对象所满足的类型。在修订版CORBA IDL中定义了接口和操作。可以用两种方式定义对象的接口。在修订版CORBA IDL中可以静态地定义接口。这种语言根据可能在对象上进行的操作和这些操作的参数来定义对象的类型。另外也可以在(CORBA Interface Repository Service)(CORBA接口库服务)中添加接口。
如CORBA规范所定义的,客户通过ORB向对象传送请求。客户是希望对对象进行操作的实体,对象实现是实际实现对象的代码和数据。ORB负责所有的为请求查找对象实现、准备对象实现以接收请求、和传送构成请求的数据所需的机制。在客户看来,接口与对象的位置、实现的编程语言、或对象接口不反映的其它因素是完全无关的。
为提出请求,客户可以使用CORBA动态调用接口或CORBA IDL占位程序(Stub)。对于一些函数,客户也可以直接与ORB交互操作。对象实现通过CORBA IDL生成的程序框架或通过动态程序框架接受调用请求。在处理请求时,或其它的时候,对象实现可以调用对象适配器和ORB。客户通过对对象的对象引用进行操作,并知道对象的类型和所希望进行的操作,来进行请求。
在CORBA结构中,ORB不需要作为单个部件实现,而是由它的接口定义。任何提供适当接口的ORB实现都是可以接受的。接口分组为三类对所有ORB实现都相同的操作;随特定类型的对象而不同的操作;以及随特定形式的对象实现而不同的操作。ORB接口是直接与ORB联系的接口,对所有ORB都是相同的,并不取决于对象接口或对象适配器。
修订版CORBA IDL的结构18还包括以下描述本发明中使用的实现的方面。修订版CORBA IDL的结构18为异步部件而设计,即其中调用程序和被调用程序是异步的。每个函数的说明都连着关键字“async”,以说明异步的状态。据此,在收到接收方的确认之前,发送端不需要被锁住。而且因为对象使用交互结构16进行相互作用,因此设计者无须考虑缓冲区的损失。
修订版CORBA IDL的结构18定义了事物处理的多循环步骤。以下是修订版CORBA IDL的结构18中使用处理框架16的多循环处理的结构描述。
<pre listing-type="program-listing"><![CDATA[Interface MYLocalTypeName{Attribute INT Message Type;………………OMSOFT_TransactionName-"AddSum";OMSOFT_DependentIndependent-"Independent";OMSOFT_InitiatorReceiver-"Initiator";ADVANCED_STEP 1//这里说明步骤1所有相关的方法。//进行读操作//通过适当的行为处理所有的输入信息。//向端口写必要的信息。async OMF Release(PortID),async OMF Trigger(PortID);ADVANCED_STEP 2 ………………async OMF Release(PortID),async OMF Trigger(Portm);//此处添加其它的步骤ADVANCED_STEP nasync OMF Release(PortID),async OMF-Trigger(PortID);]]></pre>可以使用修订版CORBA IDL的结构18实现接口34。在对象30中提供了系统范围内的唯一的全局句柄,包括索引、ObjectID、PortID、InterfaceID、时钟环36、以及时钟相位38-b。全局句柄与它们的位置和它们所实现的语言无关。
图4显示的是作为管理网络40发布的人工管理结构19的具体实现。对象30和接口34(未示出)由管理对象42管理。对象30的对象版本分配给管理对象42。管理对象42对连接的对象30的信息进行集中管理。管理对象42通过网络发展接口(INE)45向人工管理者对象44发送信息。人工管理者对象44根据从管理对象42接收到的信息作出接口发展的决策。人工管理者对象44结合管理对象42所提供的信息。每个管理对象42的复杂度是O(TNLog(N))。如果没有管理对象42,则应用程序中对象30的总数目是M×T。兼容系统分布的选择的复杂度是O((T+M)NLog(N))。这样,如果T和N是常量,则兼容系统分布选择的复杂度是NLogG(N)。人工管理者对象44支持图形用户接口(GUI),以让人工管理者47通过管理对象42交互地管理对象,从而配置和控制应用程序的发展。对象30的设计随应用程序而异。
图5显示的是生命周期进程的结构20的具体实现。要求阶段50决定了诸如费用、绝限、可靠性或对象代码大小等的约束条件。工程管理规划阶段51决定了诸如可交付性、时间表和预算等软件开发的主要部件,以提供工程管理规划。规范和面向对象的分析阶段52将要求阶段50的要求分成一套具有接口34的对象30,从而生成规范。要求的划分可以取决于在项目管理规划阶段51中生成的项目管理规划和对象的适当水平的可重复使用性。对象的可重复使用性可以通过检查全部或部分匹配的对象的接口34和对象30而确定。完全匹配的对象30可以全部重复使用。部分匹配的对象30可以指定给开发者,从而扩展现有的功能性以满足新的要求。
设计阶段53在规范和面向对象的分析阶段52形成的规范的基础上确定对象30和接口34。多个开发者可以通过协商从而开发能够交互作用的对象30。开发者协商接口34的结构和协议。
实施阶段54确定对象30和接口34的具体实现。可以在自动单个单元测试阶段55由第三方进行单个单元测试。在测试成功之后,可以如下所述地在管理结构19注册。在兼容系统检测阶段56确定兼容系统。
在面向网络的源代码预排阶段57,对对象30和接口34的具体实现进行测试。测试结果传递给管理结构19,管理结构19将结果传递给有关的开发者和管理人员。
面向网络的集成测试阶段58对对象30的集成进行测试,检查对象30是否被正确地接入,以提供满足规范和面向对象的分析阶段52确定的规范的产品。可以测试对象30的接口输入和输出。测试结果传递给管理结构19,管理结构19将结果传递给有关的开发者和管理者。
维护阶段59在验收之后提供对阶段50-58开发的软件的修改支持。在维护中,对象30的测试版可以动态地更新。维护阶段59可以返回到要求阶段50、工程管理规划阶段51、规范和面向对象的分析阶段52、设计阶段53、实施阶段54、面向网络的源代码预排阶段57或面向网络的分配语义测试阶段58。
在生命周期结构20中描述的生命周期阶段,人员数组结构21给软件开发组成员指定相关的活动。表2显示了人员尺度结构21指定的具体实现。
表2
在规范和面向对象的分析阶段52,开发者获得每个对象30的全部说明,这说明了初始的对象30和接口34。此后,开发者可能需要增强已经可用的对象30的一个具体版本,以满足新的要求,或只给了对象30的InterfaceID,而没有给予每个接口的任何结构或协议。在第二种情况下,开发者需要完全地设计一个新的对象30。
在设计阶段53,开发者可以与其他开发者进行协商。例如,在协商的每一步,开发者可以为每个接口34用修订版CORBA IDL写协商脚本。协商脚本在人工管理结构19进行注册。开发者从其他连接的开发者处接收用修订版CORBA IDL写成的协商脚本。开发者可以用接收到的说明其他开发者对某个接口的结构和协议的观点的信息来修改协商脚本。所有的接口协商完毕之后,开发者用修订版CORBA IDL写成对象接口描述,并在管理结构19注册该对象接口描述。管理结构19将由修订版CORBA IDL的描述生成的代码返回给开发者。以下详细地说明一个优选的协商过程的具体实施。
在实施阶段54,开发者完成实施,并进行单个单元的测试。开发者在管理结构19注册实施的对象30,比如测试之后作为修订的结果可以增加对象的版本。兼容应用系统的检测56建立兼容应用系统。在面向网络的源代码预排阶段57和发布语言测试阶段的结果的基础上,开发者采取必要的行动。
在面向网络的集成测试阶段58,进行分配语义测试,检查对象30是否正确地接入,以得到满足规范的产品。在面向网络的集成测试阶段58,对接口34进行仔细的测试。可以由测试人员对接口、状态,以及对象的输入/输出进行测试。测试人员确定错误,将它们排序,将结果输入管理结构19,但不改正它们。
在维护阶段59,维护管理者通过递送错误报告或规范说明,来通知维护程序员,以增强已有的对象30。维护程序员提供改正的和适合的维护修改,并作为测试者和开发者的结合,以寻找和修正用上述的阶段50-59开发出来的软件。
以下是运用生命周期结构20在软件开发环境10中分布的网络应用程序的开发示例。在请求阶段50,从最终用户或客户处收集关于网络应用程序的信息。图6显示的是由请求阶段50生成的网络应用程序。网络应用程序60包括对象30a,其具有ObjectID 01,在下文中称为Object 01;对象30b,其具有ObjectID 02,在下文中称为Object 02;对象30c,其具有ObjectID 03,在下文中称为Object 03。每个对象30a-c具有各自的状态对象端口61a-c,通过这些状态对象端口可以设置或接收每个对象30的状态。每个对象30a-30c具有各自的状态接口63a-63c,分别指定为状态InterfaceID 1,2,3,状态InterfaceID 1,2,3分别分配给Object 01,Object 02,Object 03。每个对象30a-c具有各自的基本服务对象端口62a-c,通过基本服务对象端口,每个对象30发出请求或接收请求、处理请求、以及送回响应。如上所述,基本服务对象端口62可以是对象端口32。基本服务接口64连接Object 01、Object02、Object 03的基本服务对象端口62。接口64被分配以InterfaceID 4。最好状态对象端口61a-c和基本服务操作端口62a-c能包含对象端口32和状态接口63,并且基本服务接口64包含接口34。
在网络应用程序60中,Object 01通过基本服务接口64发送请求消息到Object 02,以进行平方运算。Object 01通过基本服务接口64从Object 02接收平方值。Object 01通过基本服务接口64发送请求消息到Object 03,以进行加法运算。通过把n,n-1,...,1相加得到n(n+1)/2,进行加和(n)。Object 01通过基本服务接口64从Object 03接收和值。假定在Object 01、Object 02、Object 03之间传递的是整数。相应地,Object 02和Object 03只提供服务,不提出请求。
在规范和面向对象的分析阶段52,接口ID1-4可以设为空。可以确定以下的规范。Object 01有两个具有InterfaceID 1,4的接口。InterfaceID 1是对状态端口61a的接口,其支持获取和设定状态,并支持通过设定状态的操作来释放Object 01。基本服务对象端口62a能发送平方或求和的请求,并接收适当的响应。Object 02有两个具有InterfaceID 2,4的接口。InterfaceID 2是对状态端口61b的接口,其支持获取和设定状态,并支持通过设定状态的操作来破坏Object 02。基本服务对象端口62b接收平方请求,计算并输出响应。Object 03有两个具有InterfaceID 3,4的接口。InterfaceID 3是对状态端口61c的接口,其支持获取和设定状态,并支持通过设定状态的操作来破坏Object03。Object 03的基本服务对象端口62c接收加和请求,计算并输出响应。在设计阶段63,管理者给标识为D1、D2、D3的三个开发者分别分配设计Object 01、Object 02、Object 03的任务。
在设计阶段53,在应用程序的软件开发过程中,环境10可以用于在开发者之间进行协商。图7是根据本发明教导的无范围协商方法的实施流程图。无范围协商按步骤进行以提供协商。在过程块72中,人工管理者对象44给开发者分配设计和实现对象的任务。在过程块73中,在开发者和管理对象42之间建立协商网络。图8是能用于图6所示的类似的应用网络60的协商网络80的实现。协商网络80包括开发者D1、D2、D3。开发者D1、D2、D3分别由人工管理者对象44指定开发称为Object 01、Object 02、Object 03的对象30。在过程块73中,人工管理者对象44可以在协商网络80的建立中指定参数。例如在协商网络80的建立中,人工管理者对象44可以指定每个开发者D1、D2、D3的登录名和密码,以及对象01、02、03的ObjectID和InterfaceID。每个开发者D1、D2、D3为对象30a、对象30b、对象30c创建各自的开发者协商对象端口82a、82b、83c。每个开发者D1、D2、D3创建各自的对象端口32a、32b、32c,作为开发者状态端口。在管理对象42注册开发者协商和状态端口。开发者使用他们的状态对象端口获取设计规范、ObjectID、InterfaceID、以及开发者所需的作为生命周期结构20一部分的其他服务。在实施和单个单元测试阶段54的最后,开发者使对象与管理对象42和它们的实现相一致。管理对象42使用相同的接口向开发者返回对象版本信息。在协商过程的每一步骤最后,每个开发者使用这个接口登记到IDL修订版之中。人工管理者对象44在管理对象42和INE管理对象端口83中创建相应的管理侧状态端口对象84a-84c。在人工管理者对象44中创建人工管理者协商对象端口85b和人工管理者INE端口85a。
在管理对象42中注册人工管理者INE端口85a、人工管理者协商端口85b、管理INE端口83、管理协商端口84a-c。人工管理者对象44创建时钟,并将人工管理者INE端口85a和管理INE端口83联结在管理侧。使用INE接口45,人工管理者47(未示出)用人工管理者对象44控制整个协商过程。人工管理者对象44向管理对象42发送协商关系数据。管理对象42使开发者状态对象端口32a-c和管理对象上的管理协商端口84a-c之间的联结生效。在这个方案中,网络80、人工管理者47决定直接观察协商过程。在管理对象42中创建协商时钟86。人工管理者对象44的人工管理者协商对象端口85b调到协商时钟86的基本相位。当端口85b升级时,其被保持。所有的三个开发者协商对象端口82a-c调到协商时钟86的高相位。然后端口85b释放端口,开发者协商对象端口82a-c得到升级信号。
在过程块77中,开发者互相进行协商,直到开发者协商取得一致。例如,开发者D1、D2、D3可以反复地通过开发者协商对象端口82a-c传送用修订版CORBA IDL结构18和英语写成的协商脚本,从而达成一致,释放和触发上述的机制。开发环境支持的后端(backend)IDL编译器对开发者在协商的每一步骤最后写成的修订版CORBA IDL进行检查,以改正语法错误。
在这个例子中,开发者D1、D2、D3进行协商而对接口版本1.0的接口的结构和协议取得一致,该接口是公共全局接口InterfaceID 4。无论哪个开发者D1、D2、D3都能对与他们的个人设计相容的InterfaceID=4的结构和协议的完整描述进行协商。例如,在步骤1中,开发者D2和D3可能不想作任何提议。相应地,D2和D3释放,并且可能会也可能不会触发步骤1。在步骤1中,开发者D1作了一个提议。表3是开发者D1的协商脚本的例子。
表3开发者D1为步骤1写的协商脚本,InterfaceID=4
开发者D1将协商脚本传送至开发者协商对象端口82a,然后释放并触发开发者协商对象端口82a。触发被发送,以尽早地将开发者D1的协商脚本与开发者D2和开发者D3交换。这个时候,开发者D1、D2、D3已经释放并触发,并且只有开发者D1写入了开发者协商对象端口82a。协商时钟86收集协商脚本并形成数据包35(未示出)。这种情况下,在数据包35中只有一个协商结构元件,因为在当前步骤中只有开发者D1发送了协商脚本。协商时钟86将数据包35和升级传送给调到不同相位0的人工管理者协商端口85b。接收到升级后,人工管理者对象44可以查看数据和接收到的协商脚本,并理解团体协商步骤1的进程。人工管理者对象44得知开发者D1提出了一个改动。检查完成之后,人员管理者对象44向人工管理者协商对象端口85b回写数据,这样人工管理者协商对象端口85b收到的元件不被破坏或修改,并可以发送给联结到不同相位1的开发者D2、D3。人工管理者对象44对基本相位释放并触发人工管理者协商对象端口85b。协商时钟86收集这个新的相位数据并形成数据包35。协商时钟86发送数据包35和升级给调到相位1的开发者协商对象端口82a-c。接收到升级后,开发者D1可以在步骤2中什么也不做。开发者D1释放,并且可能触发也可能不触发。开发者D2、D3阅读并理解开发者D1提议的修改,可以不同意或完全同意结构和协议的个人部分。如果开发者D2和开发者D3都同意,协商就完成了。或者反复进行协商,直到所有的开发者D1、D2、D3都取得一致。表4是开发者为步骤2的协商脚本的例子。
表4开发者D2的协商脚本
表5是开发者D3由步骤2而来的协商脚本的例子。
表5开发者D3的协商脚本
开发者D2和开发者D3都可以用修订版CORBA IDL和英语向他们各自的开发者协商对象端口82b和82c写他们的个人接受声明,以及释放和触发各自的开发者协商对象端口82b和82c。协商时钟86再次向人工管理者对象44发送收集到的数据包35和升级。人工管理者对象44注意到开发者D2和开发者D3已经同意。相应地,人工管理者对象44不干预解决这个步骤中的冲突。人工管理者对象44将接收到的单元不作任何改动地写回到人工管理者协商对象端口85b,并向人工管理者协商对象端口85b发送释放和触发命令。协商时钟86将这个新的数据包35和升级发送给开发者对象端口32a-32c。开发者D2和开发者D3可以什么也不做。开发者D1得知开发者D2和开发者D3已经同意,这就是接口版本=1.0,InterfaceID=4的结构和协议。
在过程块78中,开发者D1、D2、D3完成实施阶段54中他们的各自对象版本(包括InterfaceID=4、InterfaceID=1.0)的实施。每个开发者D1、D2、D3写实施完成消息,并释放/触发他们的协商端口。人工管理者协商对象端口85b得到升级并检查其内容时,人工管理者对象44得知开发者已经完成了实施。人工管理者对象44写、释放/触发人工管理者协商对象端口85b。对象端口32a-32c在第四步骤升级。所有的开发者D1、D2、D3得知实施已经完成,这时,接口版本=1.0,InterfaceID=4的协商事务已经完成。此时,在新的配置中,任何开发者可以向这个协商过程中加进新的开发者端口30、开始新的事务。
如上所述,在应用中,人工管理者对象44调到每一个协商进程,并透明地观察和控制协商过程。在大的网络应用程序中,可能会有好几百个不同的活动的协商组。人工管理者对象44可能需要几百个端口来从外面进行观察和控制。人工管理者对象44除了直接调到所有的协商进程(通过在管理者对象中创建端口),也可以使用具有管理协商对象端口的管理对象42,其中管理协商对象端口已经调到应用中的所有时钟,以得到所有的信息(协商进程)。这个方法涉及到向管理对象发送多个指令,但减少了人工管理者对象44的端口数目的人工管理者对象44,其中原始的方法减少了人工管理者对象44和管理对象42之间的请求消息的数目。可以根据网络应用来选择使用的方法。
一般而言,因为是由协商时钟86,而不是由开发者自己发送升级,所以只在每个新步骤(有升级到来)的开始开发者的注意力会从设计的主要任务上分开,和前面所述的因素无关,因此是无范围协商(协作)。在上述的协商中,人工管理者对象42在不同相位涉及的对于开发者是完全透明的。当人工管理者对象在基本相位得到升级时,这时所有的高相位开发者协商端口已经主动释放,开发者不知道数据去哪儿了。在每一个步骤,人工管理者的对象端口得到一个升级和整个开发者组的收集数据包,从而提高人工管理者的生产效率,降低复杂性。而且,人员开发者不知道有多少个开发者联接到协商进程、他们的位置、他们何时工作。这可以提高开发者的生产效率。每个开发者等待从协商端口来的下一个步骤的升级,这和前面所述的因素无关。与升级一起接收到的数据包中元件的数目显示涉及到多少个开发者,它是动态的,并由时钟设定。时钟控制升级到达调到不同相位的端口,这也取决于有多少个开发者调到了时钟,并且是动态变化的。
表6是在修订版CORBA IDL中被冻结的协商最后的设计。
表6步骤1对象端口向步骤1前进时,D1的Object 01向基本服务对象端口写适当的消息,从而启动事务。根据用户的选择,这可以是进行平方的请求或进行加法的请求。用户输入的数据以适当的消息类型复制到结构中。然后Object 01为步骤1释放并触发这个基本服务对象端口。当Object 02和Object 03接收到步骤1升级时,它们释放并触发。
步骤2对象端口向步骤2前进时,除了释放和触发外,Object 01什么也不做。Object 02和Object 03读数据并解释它。如果是平方请求,Object 02计算平方,以适当的消息类型将响应复制到输出结构中。Object 02将输出结构写到基本服务对象端口中,释放并触发该端口。除了释放和触发外,Object 03什么也不做。如果是求和请求,Object 03计算响应,并将其写到基本服务对象端口中。Object 02和Object 03释放并触发它们的基本服务对象端口。
步骤3当对象端口向步骤3前进时,Object 01读输入的数据并进行解释,得知它已经接收到了最终的输出。这说明启动者(Object01)中的事务结束。Object 02和Object 03释放并触发它们的基本服务对象端口,但不写任何东西。Object 01可以立即开始另一个事务或者仅仅是释放并触发,不向端口写任何东西。
在实施阶段54,开发者可以按照图9所示的步骤来实施图6所示的网络应用60。在功能块90中,对象30a-c的状态被确定,并且实现各自的状态接口63a-c,以支持对象30a-c获取和设定状态以及破坏对象30a-c。例如,状态可以选择为反映网络应用60中事务的相应整数。在网络应用60中,每个状态端口61a-61c被定义为具有两个字段第一个字段是消息类型字段,表示获取或设定操作;第二个字段是状态值字段,容纳对象30a-c的状态。开发者D1将Object 01的初始状态选为0。相应的,无论何时Object 01发出服务请求,它的状态变为1。接收到响应后,Object 01的状态变为0。同样地,开发者D2和开发者D3将它们相应的对象状态初始化设为0。当Object 02和Object 03从Object 01接收到请求时,状态变为1。在同一个步骤中,一旦发出响应,状态变回为0。例如,状态消息类型可以如下定义1表示设定,2表示获取,3表示设定确认(ack),4表示获取确认(get_ack),5表示被请求释放,6表示接收到并正在释放。根据本发明,这些消息数和状态类型可以随对象而不同,由开发者决定,但相应的开发者必须在每个对象中提供总体支持。
在功能块92中,对象的每个对象接口都有一个对象端口与之相联系。相应地,各状态接口63a-63c有状态端口61a-61c与之相联系,基本服务接口64有基本服务对象端口62a-62c与之相联系。在功能块94中,为处理请求和输入的消息确定事务。在功能块96中,可以用接口。每个对象接口有单独的修订版CORBA IDL的描述。修订版CORBAIDL描述对对象接口的结构和事务进行描述,举例来说,包括InterfaceID,接口版本,以及启动器/接收器信息。在网络应用60中,在Object01中开发者D1为具有接口ID为1和4的两个接口写两个单独的修订版CORBA IDL。表7显示了Object 01接口ID 1的修订版CORBA IDL描述的实现。
表7由D1为Object 01的InterfaceID=1写的修订版CORBA IDL描述。
<pre listing-type="program-listing"><![CDATA[//Object 01的修订版CORBA IDL描述;由开发者D1所写////InterfaceID=1,InterfaceVersion 1.0 STATE PORT 01//interface StateObjectl//包括另外一些设定和获取操作的方法。文件01 Interfacel.idl//StateObjectl是01中为状态接口而设的LocalTypeName。//MyLocalState是在对象中保持当前状态的局部状态变量。//MessageType=1为SET操作。可以从外部设定对象状态。//MyLocalState=InputStructReceived.StateValue;//MessageType=2为GET操作。外部需要对象的内部状态。OutputStructToBeSent.StateValue=MyLocalState;//MessageType=3为给设定操作的SET_ACK。接收到SET请求时,对象向外部对象发送SET_ACK。//MessageType=4为给获取操作的GET_ACK。接收到GET请求时,对象向外部对象发送GET_ACK。//MessageType=5为REQ_TO_DIE操作。对象必需释放。//MessageType=6为RECEIVED_REQ_TO_DIE,是对象响应消息5而发送的ACK。在下一个步骤中,当对象确认另一方已经接收到消息6时,对象退出。struct x{Attribute int MessageType; Attribute int StateValue;struct x in,out; if OMF_Advanced(PortID) { if(In.MessageType==1)mylocal state=in.stateValue;out.MessageType=3;end ifif(In.MessageType==2) out.StateValue=mylocal state; out.MessageType=4;end ifif(In.MessageType==5) out.MessageType=6; cleanup(); end ifOMF_WRITE(PortID,OUT)size of(struct out))OMF_Release(PortID);OMF_Trigger(PortID);};}]]></pre>表8显示了Object 01,InterfaceID 4的修订版CORBA IDL描述的实现。
表8由D1为Object 01的InterfaceID=4而写的修订版CORBA IDL描述。
<pre listing-type="program-listing"><![CDATA[//Object 01的修订版CORBA IDL描述;由开发者D1所写////InterfaceID=4,01的InterfaceVersion 1.0 BasicServicePort////包括另外一些方法。文件01_Interface4.idl//MyLocalState是在对象中保持当前状态的局部状态变量interfaceBasicServicePortObjectlattribute int MessageType;attribute int Data;//PortID是在整个应用系统中对象端口的唯一服务ID。//BasicServicePortObjectl是01中InterfaceID=4的LocalTypeName//独立事务为TRANSAC_NAME_SQUARESUM//事务的启动器,必需在01中结束]]></pre>步骤1向端口写消息类型OM_SQUARE(1)或OM_SUMMATION(3)//向端口写数据用户输入数据MyLocalState=1;
//进入稳定对象状态;现在释放端口//OMF_Release(PortID);OMF_Trigger(PortID);步骤2//对象状态稳定(因为没有有效的输入,所以状态没有变化)OMF_Release(PortID);OMF_Trigger(PortID);步骤3//从端口读消息类型OM_SQUARE_OUTPUT(2)或OM_SUMMATION_OUTPUT(4)//从端口读数据,显示,步骤3中启动器的事务结束MyLocalState=0;//如果没有从用户来的有效数据,通过开始下一个事务来重新写//01可能已经保持了控制。但这个步骤中什么也不写OMF_Release(PortID);OMFTrigger(PortID);};表9显示了Object 02,InterfaceID 4的修订版CORBA IDL描述的实现。可以类似地确定开发者D2的InterfaceID=2的修订版CORBAIDL描述,以及开发者D3的修订版CORBA IDL描述。
表9由D2为Object 02的InterfaceID=4写的修订版CORBA IDL描述。
<pre listing-type="program-listing"><![CDATA[//Object 02的修订版CORBA IDL描述;由开发者D2所写////InterfaceID=4,02的InterfaceVersion 1.0 BasicServicePort////包括另外一些方法。文件02_Interface4.idl//MyLocalState是在对象中保持当前状态的局部状态变量interface BasicServicePortObject2{attribute int MessageType;attribute int Data;//PortID是在整个应用系统中对象端口的唯一服务ID。//BasicServicePortObject2是02中InterfaceID=4的LocalTypeName//独立事务为TRANSAC_NAME_SQUARESUM//事务的接收者]]></pre>步骤1OMF_Release(PortID);OMF_Trigger(PortID);步骤2//从端口读消息类型OM_SQUARE(1)MyLocalState=1;//从端口读数据类型Response=ComputeSquare(InputStructRecd.Data)//向端口写消息类型OM_SQUARE_INPUT(2)//向端口写数据把响应写到数据区MyLocalState=0;//对象状态稳定OMF_Release(PortID);OMF_Trigger(PortID);步骤3//启动器中步骤3的事务结束OMF_Release(PortID0OMF_Trigger(PortID);};在功能块97中,每个确定的对象接口是作为单独的源文件而实施。单独的源文件确定了网络应用60的全部对象的代码。例如,Object01的源代码包括两个端口具有StatePortID的状态对象端口61,以及适当大小的具有ServicePortID的基本服务端口62a。PortID说明两个端口服务是不相同的,在应用系统中是独一无二地区分的。为了得到这些端口提供的服务,人工管理者必需知道相应的PortID。PortID或ServiceID类似于对象的能力,人工管理者必需从对象中获取它们以使用其服务。
以下是用于创建源代码的函数例子和它们的描述。
OMF_CreatePort(PortID,PortSize)这个方法使对象30创建大小为PortSize的端口。对象30通过这个端口接收和/或发送数据。PortID是一个整数,在整个应用系统中独一无二地确定了对象服务。例如,对象端口可以是对象端口32、状态对象端口61或服务对象端口62。
OMF_Registration(PortID)这个方法使对象30在管理处以PortID注册它的端口,使管理者能够访问对象的服务。
OMF_Advanced(PortID)这个方法使对象30检查具有PortID的对象端口是否已经升级。如果升级则返回真,否则返回假。
OMF_ReadData(PortID)这个方法使具有PortID的对象端口检查数据包中是否有另一个元件要读。如果为真则返回非零。
OMF_LoadData(PortID,PortSize,InputStructure)这个方法允许从具有PortID的对象端口向结构InputStructure装载PortSize个字节。
OMF_WriteData(PortID,PortSize,OutputStructure)这个方法允许从结构OutputStructure向具有PortID的对象端口写PortSize个字节。
OMF_Release(PortID)这个方法允许释放具有PortID的端口。当被人工管理者请求时(通过管理对象),对象端口句柄使用它来发送对象的稳定状态。
OMF_Trigger(PortID)这个方法允许触发具有PortID的端口。
表10显示的是作为Object 01的实施而开发的源代码例子。
表10由开发者D1实现的Object 01的源代码。
<pre listing-type="program-listing"><![CDATA[//开发者D1开发的Object 01源代码开始//(InterfaceID=1,InterfaceVersion=1.0),(InterfaceID=4,InterfaceVersion=1.0)#define OM+SQUARE1#define OM_SQUAEW_OUTPUT 2#define OM_SUMMATION 3#define OM_SUMMATION_OUTPUT 4struct StateObjectl int MessageType; int StateValue;}StateInputStruct,StateOutputStruct;struct BasicServicePortObjectl{ int Messagetype; int Date;}ServiceInputStruct,ServiceOutputStruct;main(int argc,char**argv){ int MyLocalState,ServicePortID,MyStateWrite,MyServiceWrite; int StatePortID=atoi(argv[1]); OMF_CrreatePort(StatePortID,(size of)struct StateObjectl); OMF_Registration(StatePortID); MyStateWrite=0; MyServiceWrite=0 ServicePortID=StatePortID+1; OMF_CreatePort(ServicePortID,(size of) structBasicServicePortObjectl); OMF_Registration(ServicePortID);//对象创建两个与不同的服务相关的端口//对象在管理处注册端口,从而他人可以访问对象的服务或能//力,如果知道这个数的话。While(1){ if(OMF_advanced(StatePortID))Do{ OMF_LoadData(StatePortID,(size of)struct StateInputStruct, StateInputStruct);if(StateInputStruct.MessageTyPe==1){/*设定状态*/ MyLocalState=StateInputStruct.StateValue; MyStateWrite=3;}if(StateInputStruct.MessageTyPe==2)/*设定状态*/ MyStateWrite=4;if(StateInputStruct.MessageTyPe==5)/*接收到释放*/ MyStateWrite=6; /*发送释放ACK*/if(StateInputStruct.Messagetype==6/*确认他人收到释放ACK*/exit();}while OMF_ReadData(StatePortID);if(M7StateWrite==3){/*设定ack*/StateOutputStruct.MessageTyPe=3;MyStateWrite=0;OMF_WriteData(StatePortID,(sjze of)struct StateOutputStruct, StateOutputStruct;}if(MyStateWrite==4){/*获取ack*/StateOutputStruct.MesageType=4;StateOutputStruct.StateValue=MyLocalState;MyStateWrite=0;OMF_WriteData(StatePortID,(size of)struct StateOutputStruct, StateOutputStruct);}if(MyStateWrite=6){/*消除ack*/StateOutputStruct.Messagetype=6;MyStateWrite=0;OMF_WriteData(StatePortID,(size of)struct StateOutputStruct, StateOutputStruct);}OMF_Release(StatePortID);OMF_Trigger(StatePortID);}/*StatePortID的IF ADVANCED结束*/if(OMF_Advanced(ServicePortID)){do{OMF_LoadData(ServicePortID,(size of)struct ServiceInputStruct, ServiceInputStruct);If((ServiceInputStruct.MessageType==OM_SQUARE_OUTPUT)‖ (ServiceInputStruct.Messagetype=={OM_SUMMATION_OUTPUT)){ //启动器的独立事务结束MyLocalState=0;DisplayMessage(ServiceInputStruct.Data);/*显示响应*/}}while OMF_ReadData(ServicePortID);if(Userinput)OMF_WriteData(ServicePortID,(size of)struct ServiceOutputStruct,ServiceOutputStruct);//开始事务UserInput=0;}OMF_Release(ServicePortID);OMF_Trigger(ServicePortID);}/*ServicePortID的IF ADVANCED结束*///*显示响应和数据值后,操作类型的PrompUser*////*然后用适当值设定ServiceOutputStruct Datastructure*// if(USER_WANTS_TOSEND_SQUARE){ServiceOutputStruct.MessageType=OM_SQUAREServiceOutputStruct.Data=InputData from the user;//*将Userinput标志设为1*//Userinput=1;}else{ServiceOutputStruct.Messagetype=OM_SUMMATIONServiceOutputStruct.Data=InputData from the user;//*将Userinput标志设为1*// UserInput=1}}/*无穷循环*/}/*主程序结束*///Object 01的源代码结束//]]></pre>在程序块98中,各个实现的对象30利用返回一个对象版本号的管理结构19进行注册。对象的测试可在由预排阶段57的源代码所指明的网络和由集成测试阶段58所指明的网络中得到执行。然后,开发者利用管理结构19注册对象。例如,开发者D1可以输入表11中所示的信息。
表11ObjectID=01
管理结构19返回正确的对象版本号。在这种情况下,它给开发者D1返回版本1.0。管理者D2和D3也类似地注册他们各自的对象信息。对他们来说,管理结构19都返回1.0作为版本号。
对象和接口可在网络应用程序的开发中发展。在开发期间,对象的版本可能会变得不兼容,其原因如下接口版本可能不匹配;可能出现不同次数的利用管理结构19进行的对象30的注册;或者旧版本的对象30被删除。图10是一种用于确定在环境10中的可兼容应用的方法的流程框图。在程序块101中,确定一个对象列表以用于对象版本和接口版本的合并。其中各列的名称分别是ObjectID;ObjectVersion(对象版本)和Interface Id(接口Id)(例如1,2,3,4)。与各列相关的数值是和特定接口有关的各接口版本。对象版本列代表了对象的版本。在一个优选实施例中,对象30按照这样一种方式被插入到对象列表中,即,将m个应用程序保留在一起作为一个单块,而只增加对象的版本号,这样就可为接口版本&lt;I1…Im&gt;的每个唯一组合找出全部第m个应用程序。
在一个优选实施例中,对象列表被建立并增大。因此,对每个接口的唯一版本来说,对象版本也保持增大。所以,随着接口的任何固定和较新版本的建立,它们将被插入到对象列表中以使列表增大。
所有对象列表都按照由T表示的对象列表序号得到排序。应用程序接口的序号由I表示。对象30可拥有由Oimax表示的对象所具有最大接口数的多个接口。可以假设,网络应用60中所有接口34,1-4,64和63a-c都在发展。随着应用程序开始发展,没有接口在一段较长的时间周期内不发生变化(当与应用程序中的其它接口相比较时)。应用这种假设的目的是为了限制在以下所述的数据列表选择方法的联接操作的中间阶段中的记录数目,其中N是对象版本在对象列表中的可变数目。分布式选择方法的复杂性是N log N。
表12显示了一个在图6所示应用网络60中使用的对象列表的具体应用。例如,对象01的版本1.0使用了接口1和4,而且各接口的接口版本都是1.0。
表12为应用程序发展而获得的关系表1 ObjectID ObjectVer Interface Ver ID1 Interface Ver ID401 1.0 1.0 1.001 1.1 1.0 1.0表2 ObjectID ObjectVer Interface Ver ID2 Interface Ver ID402 1.0 1.0 1.002 1.1 1.0 1.002 1.2 1.0 1.1表3 ObjectID ObjectVer Interface Ver ID3 Interface Ver ID403 1.0 1.0 1.003 1.1 1.0 1.1例如,如表12所示,对象1含有两个对象版本1.0和1.1。如果为Interface ID4建立一个较新的版本,则Interface Ver 1.0和InterfaceID1以及接口版本1.0被插入到Object Ver 1.0与Object Ver 1.1之间。新的对象版本将被分配给Object Ver 1.0与Object Ver 1.1之间的一个对象版本,例如,ObjectVer 1.01。
在程序块102中,整个列表根据版本号得到排序。如果各接口版本的唯一组合有新的实现,则已排序列表中将使用组合的最新版本。例如,对象2包含与接口版本2和4具有相同组合的对象版本1.0和1.1,如表10所示。对象版本1.1是该组合的第m个接口版本中的最新版本。对象版本1.1在不改变接口版本的缺陷修复之后被确定。较新的对象版本1.1被插入到已排序的列表中,以使多个应用保持作为联合的程序块。
表13对象版本排序之后的对象02
在程序块103中,前两个对象列表利用公共接口id得到排序。例如,对象01和对象02含有一个公共的接口ID4。
表14显示了根据接口ID4对对象01和对象02进行排序表14根据接口ID4对对象01和对象02进行的排序
在程序块104中,前两个对象列表根据应用程序60的所有公共基本服务接口64被合并起来,从而形成了一个中间合并结果,如表15所示。如果对象列表之间有多个公共接口,若所有公共接口的相应接口版本号相互匹配,则多个通过“AND”条件而确定出来的对象版本将被输出。
表15将排序的表1和表2合并之后的中间输出
在程序块104中,在紧接最终结果之前,下一个对象的对象列表根据一个公共接口ID得到排序。对象03与对象01和对象02共享一个公共接口ID4。表16显示了根据接口ID4对对象03进行排序之后的输出。可重复执行程序块103-105以处理所有对象列表。
表16根据接口ID=4对对象03进行的排序
在程序块106中,通过将中间结果与已排序的由前面步骤所确定的下一个对象合并起来,就可确定最终的组合。表17显示了对象01、02和03的最终合并结果。
表17最终合并输出(所有部分命令兼容系统)
上述例子的复杂性是NLOG(N)+2N图11A-11B显示了上述例子的发展。方框状的行代表了相应的对象因缺陷修复或改变接口版本而进行的发展。右侧的圆圈行则代表了相应的接口正在发展以满足变化的应用需求。连接沿表示对象版本所使用的接口版本。图11B中可兼容系统由CS-I、CS-II和CS-III表示。其相应的接口版本显示在右侧。第一个兼容系统是CS-I。对对象02版本1.0的缺陷修复将导致产生一个新的对象02版本1.1以及第二个兼容系统CS-II。改变接口ID4的需求将导致接口ID 4版本1.0变成接口版本1.1以及第三个兼容系统CS-III。
图12显示了人工管理结构19对程序块103的一个应用,其目的是为了从对象01、对象02和对象03获得共享的接口信息。对象01、对象02和对象03中每一个都可分布在多个管理对象42上,它们分别被称为M1、M2和M3。对对象01、对象02和对象03中的每个对象来说,人工管理者对象42将给其分配增加的对象版本号。例如,表15中所示的各个对象列表都可在一个单独的管理对象下得到管理。对象列表中的列表数目取决于已得到管理对象42检查的对象版本的数目。管理对象42能够执行程序块103-105,因为管理对象42拥有与已保存的分布在各个管理对象42当中的接口有关的信息。人工管理者对象44审验来自管理对象42的程序块103-105的结果,并执行程序块106和107。
人工管理结构19可与生命周期结构20交互。在规范化阶段52中,对象30的接口id由人工管理者对象44指定,并被管理对象42传送给开发者。开发者完成实现阶段54,然后执行单个单元的测试。应用的对象利用管理对象42得到注册。接口id、相关的接口版本号以及与被注册的对象30有关的源和IDL文件都被传送给管理对象42。例如,含有两个接口id(1和4)的对象01将以下信息传送给管理对象42,如表18所示。
表18对象ID-01信息
管理对象42返回正确的对象版本号。管理对象对(例如)如下情况一直保持跟踪,即,要注册的对象30的当前版本是否已得到注册,而且此当前注册是一个对接口版本组合的较新实现。在管理对象42返回下一个中间对象版本号的情况下,它从接口版本组合的基本对象版本开始。如果对象30的当前版本尚未得到注册,如果人工管理者对象44没有指定任何增大的接口版本组合号,则对于新的接口版本组合,管理对象42将为该组合返回一个全新的对象版本。否则,管理对象42将返回一个由人工管理者对象44指定的号。注册过程中的故障将导致开发者重新进行注册。
在规范和面向对象分析阶段52开始时,各个对象30的全局接口id被指定入管理对象42。相应的开发者开始从管理对象42中获取该信息。对各个对象30来说,人工管理者对象44可以在管理对象42中建立一个最新版本(MRV)的Object ID列表,该表的列名称是与相应的对象ID有关的接口id号。与列相关的值范围是与接口相关的接口版本号。MRV Object ID列表在每次成功注册之后都得到更新。对每个接口版本的唯一组合来说,管理对象42只保留该表中的最新应用。人工管理者对象42利用该表来控制程序块106以在全部共享接口上执行一个合并操作。对由对象30的人工管理者对象44所建立的每个列表来说,管理对象42将创建另一个与Object ID有关的被称为所有版本Object ID表的列表,并且使所有的对象版本都与该表中的对象相关联。人工管理者对象44并不知道这个列表。当使用增大对象版本号的策略时,人工管理者对象44将为接口版本的各个唯一组合指定递增的对象版本号。管理对象42可以更新MRV Object ID表中的这个信息。因此,所有的接口版本以及人工管理者对象44对起始对象版本号的选择都被输入到MRV Object ID列表之中。
对每个接口版本的新组合的注册来说,管理对象最好按照1,2,3,4,5,…n的顺序返回下一个号以作为对象版本。将被提出的下一个版本号将被管理对象42从MRV对象ID列表中找到。例如,管理对象42为输入的接口版本的第一个唯一组合返回1.0。对其后具有相同接口版本组合的多个应用来说,管理对象将顺序返回1.1,1.2,1.3,…1.n。当接口版本的第二个唯一组合被输入时,管理对象42将返回2.0。
如果没有MRV的记录,这就意味着它是一个全新的接口版本组合,并且人工管理者对象44尚未指定任何开始的对象版本号。对这种组合来说,管理对象42通过(从MRV Object ID列表中)找出从1.0开始已使用到哪个版本号而按1,2,…的顺序返回下一个版本号。管理对象42更新MRV对象ID列表和ALL VERSIONS对象ID列表。
如果存在一个最新的版本,并且MRV对象ID列表中的MRV对象版本等于-1,则说明它是一个全新的接口版本组合,但是人工管理者对象44已经为该组合指定了一个起始对象版本号(MRV对象版本为-1表明到目前为止还没有版本存在)。在这种情况下,管理对象42将向开发者返回一个由人工管理者对象44指定的版本号。管理对象42将MRV对象ID列表元组MRV对象版本(旧版本为-1)修改成人工管理者对象44所指定的版本号(代表第一个最新的版本号)。之后,ALLVERSIONS Object ID列表利用一个含有对象版本信息的新元组来更新。
如果存在一个最新的版本,并且MRV Object ID列表中的MRVObject版本不等于-1,则说明它是一个接口版本的重复组合。对该组合来说,一个搜索操作将被执行以找出MRV对象ID列表中的对象版本。该搜索操作将返回对象版本的最新版本号。例如,它可以是1.0、1.1或1.2,等等,即,版本号加上0.1。MRV对象ID列表中的MRV对象版本项被修改以反映出所获得的较新版本。ALLVERSIONS对象ID列表也被更新成较新的版本号。该版本号被管理对象42返回给开发者。
如果一套对象版本具有相同的与相应接口有关的接口版本号,则它们就是“接口兼容的”。如果一套对象版本共享了一个接口,则它们形成了一个“兼容应用”。相互联系的这套对象版本都是接口兼容的。当全部具有系统接口id的列相等,并且应将相关的对象版本和接口版本提出(输出中的列数等于对象数加上应用中的接口数)时,为了获取所有的唯一兼容系统(局部次序),就应将所有的MRV ObjectID列表合并起来。因此,内部合并是根据多个共享接口的“与”条件而执行的。人工管理者对象44可以做出一个相同的SQL询问并将其发送给管理对象42。管理对象42执行此询问并将所有的元组返回给人工管理者对象44。从所有兼容系统的部分命令中,人工管理者对象可决定为应用选择一兼容系统。
在分布式管理网络的应用中,人工管理者对象44为每个管理对象域写入单独的SQL串。各个SQL串只含有局部对象,但人工管理者对象44既获取局部对象也获取共享接口。各管理对象42不能对其出口接口做出完整的决定。各管理对象42都执行SQL串并将结果返回给人工管理者对象44。当获得来自全部管理对象42的响应之后,人工管理者对象44将根据所有共享接口对所有中间结果执行一个较高水平的合并,从而获得相应的对象和接口版本。这种分布式选择算法的复杂性为NLog(N),其中N是对象版本数目(对一特定接口版本值的选择性由一常数限制)。
以下说明了人工管理者对象44所支持的多个命令的例子。
1.CreateObject/DestroyObject人工管理者对象44将此命令与ObjectID、ObjectVersion和StartPortID一起发送给管理对象42。ObjectID和ObjectVersion唯一地识别了待运行的对象30程序。管理对象42在其自身的数据库内进行探查,该数据库内保存着与ObjectID和ObjectVersion有关的信息。当开发者成功地通过检查时,管理对象42应已对该数据库信息进行了更新。管理对象42将提取可执行信息和变量,并将所有的DLL文件(如果有)拷贝到正确的目录之中。利用这种OS级系统命令,对象30与命令行变量一起得到执行。前两个变量是其中有时钟服务器运行的主机名,以及其中父时钟受到轮询以用于子连接的套接字id。第三个变量是StartPortID,它代表了对象30在整个应用网络中的端口名空间。不会有对象30拥有相同的端口名空间。当接收到来自低级系统的对象30的成功建立时,管理对象42将向管理程序44返回一个成功信息。否则,它将返回一个故障信息。破坏对象可利用一杀/灭协议通过状态端口(利用一种适当的设定操作)得到执行。
2.CreatePort/DestroyPort该命令(被管理对象)用于在管理对象中创建对象端口32,以将它们动态地调整应用的不同交互。管理对象端口32被用于获取对象30和时钟的状态。管理对象42的端口32可被用于禁止/使能与外界的透明交互。禁止/使能交互的操作是利用以下将说明的HoldClock/Release命令而实现的。人工管理者对象44可将待被创建的PortID、InterfaceID以及InterfaceVersion发送出去。最后两个值被用于根据与该接口版本相关的IDL说明以及产生了不同单元在结构中的长度和偏移的IDLBackend来提取对象端口32的长度。CreatePort方法含有两个参数代表ServiceID的PortID、以及对象端口32的长度。对象端口32的长度取决于InterfaceID、Interface Version以及结构。创建的对象端口长度32利用管理对象42得到注册,从而使人工管理者对象44能够通过保持PortID来访问其服务。当网络应用不再需要它们的服务时,在同一条线上的对象端口32可被破坏。
3.CreateClock/DestroyClock该命令被用于在管理对象42中创建一个时钟。它只有一个参数ClockID,它在环境10中必须是唯一的。一旦带有ClockID的时钟被建立,它将被管理系统注册以访问其服务。当时钟被建立时,它带有基本相位。任何与调谐至该相位的对象端口32会立刻得到首先升级。当获得首先升级之后,就可以建立其它的相位并调谐更多的对象端口32(它是特定应用)。如果应用程序不再需要其服务,也可将时钟破坏。
4.AddPhase/Destroy Clock Phase该命令用于相对于时钟的基本相位建立一个动态提取的相位。然后对象端口32被与该提取的相位调谐。通过增加较新的相位以进行观察和控制,就可改变应用程序的行为。类似地,时钟相位也可被破坏。增加相位的方法含有两个参数BaseClockID和RefinedClockID。时钟的各个相位是由时钟提供的一个单独服务,而且人工管理者对象44可根据需求单独访问它们。
5.Tune/Detune Port该命令用于将不同的对象端口32与应用程序中不同时钟的不同相位调谐(连接)。这是一个与特定的应用相关的,它需要三个参数PortID、ClockID和PhaseHandle(基本相位的意思是ClockID,而其它相位则使用如上指定的RefinedClockID)。当它们的角色是完全作为不同交互的一部分时,对象端口32也可被解调谐。
6.Set/Get tate of objects为了设定/获取对象30的状态,人工管理者对象44必须首先识别出状态InterfaceID及其接口版本。当为一个对象的状态接口获取IDL说明之后,人工管理者对象44将其送给IDL Backend。Backend IDL编译程序为所有接口结构的各个单元产生FieldNumber、FieldType、FieldOffset以及FieldSize。它还能产生对象端口32的实际长度。人工管理者47需要理解数据包35的各个单元和状态。这种特征对交互的透明访问来说是必需的。例如,对InterfaceID=1,2,3来说,IDL Backend将输出FieldNumber FieldType FieldName FieldSize FieldOffset Data1 INT MessageType 2 0 12 INT StateValue 2 2 0为了设定状态,人工管理者对象44可以对MessageTypel的数据段进行写入。人工管理者对象44然后写入StateValue。从状态的IDL中可以获取与1.0等有关的信息。因此,人工管理者对象44做出上述原始字节(上述例子中信息为4字节)。然后,设定命令与PortID原始字节数据及原始字节的长度一起被发送给与该对象的状态接口相连的管理对象42。管理对象32还可通过接收对象的状态InterfaceID和InterfaceVersion以获取原始字节的长度。一旦管理对象端口32接收到设定命令,它会通过其对象端口32在升级时将此命令写入对象30。当接收到来自对象30的确认信息时,管理对象42向人工管理者对象44送回一个确认信息。
为了获取状态,人工管理者对象44可以对MessageTypel的数据段进行写入。从状态的IDL获取与2有关的信息。与状态设定相同的步骤被执行。另外,人工管理者对象44利用以前的技术将来自管理对象42的原始的4字节分割成适当的具有意义的数据。已经有方法可以使人工管理者47能够看到具有意义的数据。例如,人工管理者47可以看到以下内容FieldNumber FieldType FieldName FieldSize FieldOffset Data1 INT MessageType 2 0 42 INT StateValue 2 2 1MessageType=4代表Get ack的状态值,1则表示对象的状态7.SetState/GetState of Clocks(链接)(CollectBag,WriteBag)除了与对象30的状态接口有关的结构以外,也可使用与不同交互有关的IDL结构。例如,可以使用InterfaceID=4,InterfaceVersion=1.0。IDLBackend产生如下内容FieldNumber FieldType FieldName FieldSize FieldOffset Data1 INT MessageType 2 0 12 INT Data2 2 22
MessageType=1代表是一个OM_SQUARE操作。在交互的情况下,数据包可以拥有超过一个的单元,因此时钟(接口)的读写也具有多个周期。
8.Hold/Release ClockHoldClock命令告诉管理对象42保持在规定对象端口32上的下一个升级,直到获得人工管理者对象44的通知为止。除非获得人工管理者对象44的通知,否则管理对象42不会释放对象端口32。与同一时钟中的其它不同相位相连的对象端口32不会获得升级,因此它们将保持静止稳定状态。人工管理者对象44可以根据需要保持升级信号,以分析应用程序的状态。保持操作由人工管理者对象44发出的一个特定的释放时钟命令释放。只有当管理对象42向端口对象32发出释放命令之后,对象端口32才会使调谐至下一个较高或较低的相位能够进行相互通信。
9.GetIDLs of Interfaces人工管理者对象44利用该命令来获取与不同接口相关的对象30的IDL说明。当人工管理者对象44接收到来自管理对象42的IDL说明时,它会将这些说明拷贝入一个本地数据库中。这种特征使得人工管理者47能够查看他们所需的IDL。
10.Regist/Deregister ports这些命令使对象30中所建立的对象端口32能够利用管理对象42得到注册。只有注册之后,人工管理者对象44才能访问它所提供的服务。人工管理者对象44在应用系统中为各个对象30定义了端口名称空间。当应用程序不再需要端口服务时,可对其取消注册。
人工管理结构19可被用于对一个应用进行稳定和透明的设定。图12显示了由人工管理者对象44设定的网络应用的一个例子。人工管理者对象44设定网络应用109,指定初始条件,初始化及分析变化并控制版本的发展。人工管理者对象44根据对象01,02和03确定对象01,02和03的状态对象,以及端口61a-c和基本服务对象端口62a-c的相关状态。人工管理者对象44为对象01,02和03的接口接收全部IDL说明。backend IDL编译器能够为接收到的经修改的CORBA IDL提供一个有意义的解释。图13显示了用于设定交互网络110的方法的流程图。在开始对网络应用进行设定之前,INE先被激活,如图111的程序块所示。参考图12,INE接口45被激活。人工管理者对象44和管理对象42能够执行以下方法来创建和注册一个INE端口。
OMF-CreatePort(ManagementINEPortID,Sizeof(Struct INE))//管理中的端口1OMF_Register(ManagementINEPortID)OMF_CreatePort(ManagerINEPortID,SizeOf(StructINE))OMF_Register(ManagerINEPortID)参考图13,在程序块112中,一个时钟被建立并且被人工管理者对象44和管理对象42注册。时钟86m被人工管理者对象44建立并被人工管理者对象44和管理对象42注册,如图12所示。例如,一个具有ClockID=50的时钟在命令OMF_CreateClock(ClockID)下被建立INE端口85a利用以下命令被调谐至时钟86m的基本相位。
OMFTunePort2CIock(ManagementINEPortID(Port 1),ClockID,ClockID);OMF TunePort2Clock(ManagerINEPortID,ClockID,ClockID)在程序块113中,人工管理者对象44指示管理对象42为各个接口建立端口。例如,在网络应用109中,有四个端口被建立,各端口分别对应于接口ID 1,2,3和4。人工管理者对象44将接口ID和接口版本发送出去。管理对象端口被分配以端口2,端口3,端口4和端口5。管理对象端口2-5的长度由人工管理者对象44建立。例如,管理对象端口2-5每个可以具有4字节的长度,该长度由应用程序指定。
在程序块114中,人工管理者对象44指示管理对象42创建对象。例如,人工管理者对象44向管理对象42发送一个信息以创建3个对象ObjectID为1,ObjectVer为1.0;ObjectID为2,ObjectVer为1.0;ObjectID为3,ObjectVer为1.0。这三个对象中的每个对象都建立并注册其相应的状态对象端口61a-c及基本服务对象端口62a-c。
在程序块115中,管理对象42建立多个时钟以用于将各对象状态端口61a-c与管理对象状态端口62a-c分别连接起来。例如,ClockID=5被建立以将对象01的状态端口与为对象01建立的管理状态端口Port 2连接起来。ClockID=2被建立以将对象02的状态端口与为对象02建立的管理状态端口Port 3连接起来。ClockID=3被建立以将对象03的状态端口与为对象03建立的管理状态端口Port 4连接起来。ClockID=4被建立以将用于InterfaceID=4的管理状态端口Port 5与基本相位连接起来。
在程序块116中,人工管理者对象44对对象状态端口和管理状态端口2-4进行调谐。例如,对象01的状态端口和管理状态端口Port2被调谐至ClockID=1的基本相位。对象02的状态端口和管理状态端口Port3被调谐至ClockID=2的基本相位。对象03的状态端口和管理状态端口Port4被调谐至ClockID=3的基本相位。管理状态端口Port5被调谐至ClockID=4的基本相位。
在程序块117中,人工管理者对象44初始化对象30的状态。例如,人工管理者对象44做出一个4字节的原始数据(利用IDL输出)以将对象30的状态初始设定为零,并通过INE接口45将其发送给管理对象42。管理对象42将此4个字节写入与相应管理状态端口连接的正确端口。管理对象42接收到的确认信息通过INE 45被送回给人工管理者对象44。所有对象的状态重复执行同样的操作对。
人工管理者对象44指定保持与管理对象42的管理状态端口5相关的时钟。在紧接的下一个端口进程中,时钟被管理对象42保持。管理对象不会释放当前设定。它向人工管理者对象44发出一个确认信息。之后,人工管理者对象44可以增加一个相位,并将三个应用服务端口62a-c动态地调谐至时钟的新相位。人工管理者对象44命令管理对象42释放时钟。当管理对象42执行完来自人工管理者对象44的命令之后,应用服务端口将获取进程和开始的空数据包。此时,对象01可以向其它对象02、03发出任何请求。已被调谐至基本相位的对象必须传送数据并保持端口始终被释放,直到人工管理者对象44发出命令要求保持时钟为止,这样就可保证此时应用的连续过程。对应用的设定到此结束。人工管理者对象44可以持续监视对象状态和时钟的状态。管理对象端口42在应用中可被动态地解除调谐,直到有需要进行如下所述的动态再配置为止。
网络应用的动态再配置包括以下内容使用新的对象版本,在不关闭现有对象服务的情况下从一应用网络中增加和删除对象状态以及服务端口。例如,缺陷修复就可产生较新的版本。例如,如果独立的交互已完成或在一中间点上,对象端口可被调谐或解除调谐。在本发明所述的方法中,动态再配置发生在应用的静态点上。静态点由管理对象42通过以下的交互结构16建立,在该结构16中,管理对象42只接收在所有对象端口全被释放且至少有一个端口被触发时的进程。此时,管理对象42所接收到的进程就是一个静态点。因此,静态是自动实现的,不需要强迫进入静止状态中,从而在引入任何变化之前,允许对象自愿发出消息、根据时钟采集数据、将其发送给管理对象并等待管理从时钟内获取一个进程。
图12B显示了实现静止所需的最小破坏。应用对象不会被强迫进入静止状态。对象01,02和03自发地发送出信息。时钟采集数据并将其发送给管理对象。管理对象等待来自时钟的升级。此举减少了管理的复杂程度。只有当管理对象获取升级并拥有控制权时人工管理者对象才可引入变化。只有当收到升级时保持操作才会被完成。管理者可以从外部清晰地知道独立交互的完成。
图14显示出了网络应用109的示意图,在此网络应用中动态使用了一个新版本的对象。现有的对象02含有两个活动接口状态接口2和基本服务端口接口4。在将端口与它们相应的时钟相位解除调谐之前,对象02必须相对于这些接口是静止的。首先,人工管理者对象44向管理对象42发送与InterfaceID=4的消息相关的保持时钟信息。在与InterfaceID=4相连接的管理端口Port 5的下一个中间进程中,时钟被管理对象42保持。人工管理者对象44获得关于时钟保持的通知。在得到通知之后,人工管理者对象44获取数据包35(未示出)。从IDL Backend编译器所产生的长度、类型和偏移中,人工管理者对象44就可以知道数据包35中的结构单元。人工管理者对象44所获得的信息是时钟的初始条件。在这一点上,由于管理对象42正在保持与InterfaceID=4相关的时钟升级,所以对象01,02和03已经自发地发出释放信息,并且至少有一个用于先前步骤的触发信号,而且正等待下一个升级的尽早到来。在该点上,对象状态01,02和03相对于该接口是稳定的。对象01,02和03并不知道在步骤之间传递的消息是给谁的,而是自发地给出数据、释放信息以及触发信息(如果需要的话),而获取信息的管理对受影响的对象是透明的。人工管理者对象44可以根据共享端口InterfaceID=4并利用IDL Backend对从管理对象42接收到的原始字节进行解码。例如,其输出可以是以下内容之一Situation#1.MessageType=OMSQUARE;Data=UserInputInteger;Situation#2.MessageType=OMSUMMATION;Data=UserInputInteger;Situation#3.Messagetype=OMSQUAREOUTPUT;Data=SquaredUserInputInteger;Situation#4.MessageType=OM~SQUARE~SUMMATIONData=Summation(UserInputInteger);其目的是用对象02的版本1.1替换对象02的版本1.0。根据情况,人工管理者对象44必须将该情况映射入与当前运行版本相关的IDL说明之中,并知道交互是如何进行的以及在该时间点它在哪里。人工管理者对象44必须找出输入是会否影响对象的状态。从对象02的IDL可以建立以下情况1.如果是情况#1,则Object 01刚刚启动交互;Object 01的状态为1;Object 02的状态为0;Object 03的状态为0;如果较旧和较新的对象版本具有相同的状态转变,则较旧的版本可被较新的版本替换,并且对象02的较新版本可被初始化至0。之后,让事务处理继续,并且人工管理者对象44必须释放所保持的时钟。如果较旧和较新的对象版本具有不同的状态转变,则人工管理者对象44将必须在较新的版本中找出一个等价状态,然后让事务处理继续并对其执行初始化。如果人工管理者对象44找不到一个等价状态,则它将使事务处理持续更多的步骤并再次保持它。重复上述步骤,直到独立的事务处理在启动者中完成为止。在交互结束时,如果需要,则所有的对象都可被替换。
2.如果是情况#2或#3或#4,则对象02的状态为0;如果较旧和较新的对象版本具有相同的状态转变,则现在就可用较新的版本替换较旧的版本,并且对象02的较新版本必须被初始化为0。之后,让该事务处理继续,并且人工管理者对象44必须释放所保持的时钟。如果较旧和较新的对象版本具有不同的状态转变,则人工管理者对象44将必须在较新的版本中找出一个等价状态并对其执行初始化。如果人工管理者对象44找不到一个等价状态,则它将使事务处理持续更多的步骤并再次保持它。重复上述步骤,直到独立的事务处理在初始化中完成为止。在该事务处理结束时,如果需要,则所有的对象都可被替换。
人工管理者47通过将情况映射入IDL说明所能做出的判断是较旧的对象02可在交互操作TRANSAC_NAME_SQUARESUM的任何步骤上被替换。如果人工管理者对象44在较新的对象版本中找不到一个映射状态,则它将让事务处理再运行另一个周期并再次保持它。重复检查这个过程,直到事务处理在初始阶段结束为止。当需要时,也可找出等同状态。在本例中,人工管理者对象44能够通过查看输入而判断出对象01,02和03的状态。另外,在对对象30的状态做出判断之前,人工管理者对象44需要对象的状态和链路。
例如,如果是情况#1,人工管理者对象44发现较新的对象版本具有这样一种状态,该状态可被初始化成0,并且其行为与较旧的版本相同。人工管理者对象44通知管理对象42解除对象02服务端口与时钟的调谐。管理对象42执行此命令。对象02将不能再交换任何进程或数据。对象01和对象03也不能接收进程或数据,因此它们不再能相互进行通信。人工管理者对象44向管理对象42发送一个信息以获取对象02的状态。管理对象42将获得的状态请求发送给对象02的对象状态接口。对象02公布此稳定状态,并且管理对象42将在端口3上接收到它。
管理对象42将此状态信息返回给人工管理者对象44,而人工管理者对象44将再次了解实际的状态信息。人工管理者对象44发出一个信息以破坏对象02。此破坏信息被发送给对象02,并且管理对象42将接收到一个ack。此时,旧的对象02的状态端口和用于连接02的状态端口与管理对象端口3的ClockID=2被破坏。在接收到该消息之后,旧的对象02将破坏其自身以及基本服务端口62b。将此破坏消息通知人工管理者对象44。应该注意,人工管理者对象44仍保持着在基本相位时的ClockID=4。管理对象端口3被破坏。
人工管理者对象44建立对象的新版本,例如,人工管理者对象44在管理对象端口6中建立一个端口并创建一个带有ClockID=5的时钟,然后对新的对象状态端口进行调谐,从而建立与时钟的基本相位调谐的新的管理端口Port 6。如果存在一对一的映射,则人工管理者对象44将该新的对象状态设定成从旧对象获取的数值,否则,它会将其设定成新对象中的一个等价状态。之后,新对象的服务端口被调谐至时钟的相位1。由管理者在时钟保持之后立刻接收到的时钟数据被人工管理者对象44写回时钟,然后人工管理者对象44释放时钟。随后,对象01,02和03的全部三个对象端口获得升级。对象02将立刻接收到从由人工管理者对象44保持的对象01传送来的请求。该应用继续,如同其在初始配置时那样。邻近的对象01和对象03并不知道与对象02的替换有关的任何情况。
图15显示了动态使用一个接口新版本的示意图。例如,在InterfaceID=4中,可将其改变成含有第三个字段以表示说明对象来源的ObjectID。
首先,人工管理者对象44将与InterfaceID=4有关的保持时钟信息发送给管理对象42。在与InterfaceID=4相连的管理对象端口5的下一个即将的升级中,时钟被管理对象42保持。人工管理者对象44获取与时钟保持有关的确认信息。在接收到该信息后,人工管理者对象44获取数据包35(未示出)中的数据并理解这些数据。人工管理者对象44所获得的信息是时钟的初始条件。此时,由于管理对象42正在保持与InterfaceID=4相关的时钟进程,所以对象01,02和03已经自发地发出全部释放信息,并且至少有一个用于先前步骤的触发信号,而且正等待下一个进程的尽早到来。
如上所述,可以存在四种情况。由于需要替换全部三个,所以处理必须在启动者对象01上完成,或者必须找出其等价状态。在这种情况下,所有的对象都被破坏,并且具有较新接口版本的新对象版本被放入系统。根据这种情况,人工管理者对象44通知管理对象42以解除对象02服务端口与时钟的调谐。管理对象42执行此命令。对象02不再能与其它对象交换任何进程或数据。对象01和对象03也不能接收升级或数据,并因此不能再通信了。人工管理者对象44给管理对象42发送一个信息以获取对象02的状态。管理对象42将此获取状态请求发送给对象02的对象状态接口。对象02公布稳定状态并且管理对象42在端口3上接收到此状态。
类似地,旧对象01和对象03的服务端口被解除与时钟的调谐。管理对象42获取对象02和对象03的状态。管理对象42将状态信息返回给人工管理者对象44,而人工管理者对象44将再次了解实际的状态信息。
人工管理者对象44发送消息以破坏对象02。破坏消息被发送至该对象,由管理对象42接收一确收信息。然后旧的对象02被去调。ClockID=2被破坏,将对象02的状态端口和为对象02创建的管理对象端口3连接。一旦收到该消息,旧的对象02破坏其自身和基本服务端口。将该破坏通知人工管理者对象44。对象01和03都重复相同的步骤。注意管理对象42在基本相位处仍然保持ClockID=4。管理端口2、3和4被破坏。
人工管理者对象44创建对象01的版本1.1的新版本。人工管理者对象44在管理对象端口6创建端口,并以ClockID=5创建时钟,然后调谐至新对象的状态端口,以及创建的新管理端口调谐至时钟的基相。如果有直接的一对一的状态,则人工管理者对象44设置新的对象状态为从旧对象获得的值,否则可以在新对象中设置为一等价的状态。对象02和03都重复相同的步骤。相应地通过人工管理者对象44设置状态。现在人工管理者对象44创建大小为6字节的端口9。人工管理者对象44创建时钟并将端口9调谐至该时钟的基点。人工管理者对象44规定管理对象42保持那个时钟。在下一升级到达时,管理对象42将该消息通知人工管理者对象44。人工管理者对象44可以在时钟中创建相位1,将较新对象的所有三个新的基本服务端口调谐至那个相位,然后释放该时钟。
人工管理者对象44在保持时钟4之后立即接收到的时钟数据具有4字节的信息。但是新时钟具有6字节的信息。人工管理者对象44必须相应地转换接口的初始条件,以便应用软件的发展保持一致。人工管理者对象44可以改进旧的时钟数据然后通过管理对象42将其定回时钟8。然后,人工管理者对象44释放时钟。只有到现在,所有3个对象端口得到升级而人工管理器已经完了数据包35,该应用软件继续,好象其在初始结构中那样。没有旧对象01,02和03的参与。
非独立的事务以与人工管理者对象44对独立事务的处理相同的方式被处理。人工管理者对象44必须等待直到调谐至接口的管理端口(其支持非独立事务)接收一升级为止。管理对象端口将仅在所有其它与此接口相关的非独立和/或独立事务完成后才接收一升级。升级可以在相当的一段时间后接收,但肯定会接收升级(因为非独立和独立事务必须在有限时间内在发起者处完成)。最后,当上述管理端口升级时,人工管理器可以持有它,分析条件然后进行适当的变更。可以使用依赖关系图来确定对象的状态。人工管理器可以通过依赖关系图来分析所有状态的对象。在IDL描述中,不是使用独立的事务来描述,而是显示依赖关系。
应当理解上述的实施例只是对可能的具体实施例中的几种的说明,这些实施例可以代表本发明原理的应用。根据这些原理,本领域的技术人员在不脱离本发明精神和范围的情况下可以容易地设计出各种其它的结构。
权利要求
1.一种分布式面向对象的软件开发环境,包括多个用于执行对象操作的对象,每个对象包括对象接口;至少一个对象端口,与所述对象的所述每个对象接口连接;和交互式装置,用于将所述多个对象中之一的所述对象端口与所述多个对象中另一个的所述对象端口连接,其中,如果所述对象接口兼容,则所述多个对象之一可与所述多个对象中的另一个通信,并且所述交互装置通过动态地改变具有所述兼容接口的所述端口的集合,提供数据的顺序流和来自所述对象操作的控制。
2.根据权利要求1所述的环境,其中所述交互装置由环形通信路径表示,并且第一所述对象端口与所述环形通信路径连接,以至少从与所述环形通信路径连接的第二所述对象端口接收通信。
3.根据权利要求1所述的环境,其中所述接口以CORBA接口描述语言来描述。
4.根据权利要求1所述的环境,还包括多个管理对象,每个所述管理对象与至少一个所述对象相关;人工管理者对象;和用于网络发展的接口,以将所述管理对象连接至所述人工管理者对象,其中所述人工管理者对象通过所述管理对象来管理所述对象。
5.根据权利要求4所述的环境,其中所述人工管理者对象向所述对象分配升级的对象版本号。
6.根据权利要求5所述的环境,其中所述人工管理者对象对所述对象接口单调地提高接口版本,其中每个所述对象接口在所述应用网络中具有唯一的全局标识。
7.根据权利要求6所述的环境,还包括用于通过注册所述全局标识和具有所述管理对象的所述对象的对象版本号来确定所述对象的所述兼容接口的装置。
8.根据权利要求7所述的环境,还包括用于确定对象表的装置,该对象表包括表示所述网络应用中所述对象的所述对象版本的行,和表示对象标识和接口标识的列;用于将所述确定对象表关于对象版本来进行排序的装置;用于为第一所述对象将第一所述排序对象表关于公用的所述接口标识排序和为第二所述对象将第二所述排序对象表关于公用的所述接口标识排序的装置;用于将所述第一所述排序对象表和所述第二所述排序对象表关于所述接口标识结合的装置;和用于从所述对象表的所述结合中提取所述兼容的对象的装置。
9.根据权利要求8所述的环境,还包括用于将后续的对象表关于所述公用的所述接口标识进行排序的装置;和用于将所述后续的对象表与所述结合的第一所述排序对象表和所述第二所述排序对象表结合。
10.根据权利要求1所述的环境,还包括一生命周期结构,其包括规范化阶段,其中规定了所述对象和所述接口,设计阶段,其中协商所述对象的所述接口,实施阶段,其中实现所述协商的所述对象接口,以及测试阶段,其中测试所述实现的接口。
11.在软件开发过程中实现协商的方法,包括如下步骤a确定人工管理者对象;b.确定至少一个管理对象;c.由所述人工管理者对象,通过指示具有所述至少一个管理对象的对象建立多个用于执行对象操作的对象,确定在所述人工管理者对象和所述管理对象之间用于网络发展的接口(INE),每个所述对象包括一对象接口,d.建立用于将所述至少一个对象与所述管理对象连接的交互装置;e.确定至少一个与所述管理对象相关的管理对象端口;f.确定至少一个与所述对象相关的对象端口;和g.从所述对象端口将协商传送至所述管理对象端口。
12.根据权利要求11所述的方法,还包括如下步骤从所述人工管理者对象向与至少一个所述对象相关的相应开发者分配设计所述对象的任务。
13.根据权利要求12所述的方法,还包括如下步骤通过所述开发者为每个要开发的所述对象建立开发者协商端口。
14.根据权利要求13所述的方法,还包括如下步骤由所述人工管理者对象注册所述开发者协商端口。
15.根据权利要求14所述的方法,还包括如下步骤在所述管理对象建立管理协商端口,它们每一个分别与所述开发者协商端口之一相关。
16.根据权利要求15所述的方法,其中步骤g包括由所述开发者通过所述相应的开发者协商端口将用改进的CORBA IDL写成的协商脚本传送至所述相应的管理器协商端口,以传送至指定的对象。
17.根据权利要求16所述的方法,还包括如下步骤将在所述管理对象收到的用改进的CORBA IDL写成的所述脚本通过INE传送至所述人工管理者对象。
18.根据权利要求17所述的方法,还包括如下步骤将在所述人工管理者对象接收的所述用改进的CORBA IDL写成的脚本解释为人可读的数据。
19.根据权利要求11所述的方法,其中传送协商的步骤一直重复到所有开发者同意为止。
20.根据权利要求19所述的方法,其中所述协商确定用改进的CORBA IDL定义的对象接口。
21.一种用于实现网络应用的方法,包括如下步骤确定多个对象;将对象端口与每个所述对象相关;确定用于交换所述对象间的消息的事务;为每个所述对象确定对象接口;和实现每个确定的对象接口,其中所述消息在具有兼容的所述对象接口的所述对象之间顺序地交换。
22.根据权利要求21所述的方法,还包括如下步骤由管理结构注册所述实现的对象和所述对象接口,所述管理结构将对象标识和对象版本标识以及接口版本标识返回。
23.根据权利要求22所述的方法,其中所述实施步骤还包括如下步骤确定具有兼容的所述对象版本标识的网络应用。
24.根据权利要求23所述的方法,其中所述确定具有兼容的所述对象版本标识的网络应用的步骤包括如下步骤a.确定对象表,该对象表包括表示所述对象标识和所述对象版本标识的行,和表示所述接口版本标识的列;b.将所述确定对象表关于所述对象版本来进行排序;c.为第一所述对象将第一所述排序对象表关于公用的所述接口标识排序和为第二所述对象将第二所述排序对象表关于公用的所述接口标识排序;d.将所述第一所述排序对象表和所述第二所述排序对象表关于所述接口标识结合,以形成所述对象表的结合;和e.从所述对象表的所述结合中提取所述兼容的对象。
25.根据权利要求24所述的方法,还包括如下步骤f.将后续的对象表关于所述公用的所述接口标识排序;和g.将所述后续的对象表与步骤(d)的所述结合的对象表结合。
26.根据权利要求24所述的方法,其中所述对象表被建立为具有所述对象版本标识和在所述行和所述列中增加的所述接口版本标识。
27.根据权利要求21所述的方法,还包括如下步骤确定多个管理对象,每个所述管理对象与至少一个所述对象相关;确定人工管理者对象;确定用于网络发展的接口,以将所述管理对象与所述人工管理者对象连接;和由所述人工管理者对象通过与所述管理对象交互来管理所述对象。
28.根据权利要求27所述的方法,还包括如下步骤更新所述确定的对象;和由所述人工管理者对象将升级的对象版本号通过所述管理对象分配给所述更新的对象。
29.根据权利要求27所述的方法,还包括如下步骤更新所述对象接口;和由所述人工管理者对象将升级的对象界版本号通过所述管理对象分配给所述更新的对象。
30.一种建立网络应用的方法,包括如下步骤a确定人工管理者对象;b.确定至少一个管理对象;c.由所述人工管理者对象确定在所述人工管理者对象和所述管理对象之间用于网络发展的接口(INE);通过所述人工管理者对象指示所述至少一个管理对象建立至少一个用于执行对象操作的对象,每个所述对象包括一对象接口,d.建立用于将所述至少一个对象与所述管理对象连接的交互装置,所述交互装置还与所述INE和所述人工管理者对象连接;e.初始化在所述对象的所述人工管理者对象上的状态,并将所述初始化的状态经所述INE传送给所述对象,以将所述初始化的状态传送给所述管理对象,而所述管理对象将所述初始化的状态从所述管理对象传送给所述对象。
31.根据权利要求30所述的方法,还包括如下步骤f.为所述人工管理者对象确定人工管理者对象INE端口;g.为所述管理对象确定管理对象INE端口;和h.将所述INE与用于所述管理对象的所述INE端和用于所述管理者对象的所述INE端口相关。
32.根据权利要求31所述的方法,还包括如下步骤确定至少一个与所述管理对象相关的端口;和确定至少一个与每个所述对象相关的对象端口。
33.根据权利要求30所述的方法,其中所述对象接口用改进的CORBA IDL定义。
34.一种用于动态地重构网络应用的方法,包括如下步骤确定人工管理者对象;确定至少一个管理对象;由所述人工管理者对象通过指示具有所述至少一个管理对象的对象建立至少一个用于执行对象操作的对象,确定在所述人工管理者对象和所述管理对象之间用于网络发展的接口(INE),每个所述对象包括一对象接口并具有初始状态,建立用于将所述至少一个对象与所述管理对象连接的交互装置;确定至少一个与所述管理对象相关的管理对象端口;确定至少一个与所述对象相关的对象端口;和在至少一个要被重构的所述对象中通过所述管理对象建立静止点。
35.根据权利要求34所述的方法,还包括如下步骤将用于更新所述至少一个对象的数据从所述对象传送至所述人工管理者对象。
36.根据权利要求35所述的方法,还包括如下步骤确定所述被重构的对象的所述端口;从所述人工管理者对象发出破坏命令以破坏所述要被重构的端口;在所述人工管理者对象建立所述要被重构端口的新版本;将所述对象的所述新版本传送给所述管理对象;建立具有所述对象的所述新版本的所述新对象;和确定与所述新对象相关的新对象端口。
37.根据权利要求36所述的方法,还包括如下步骤在所述人工管理者对象确定所述对象的所述初始状态是否与所述对象的新版本的状态相同;和如果所述初始对象版本与所述新版本的状态相同,则用所述新版本替代初始对象版本;或者如果所述初始对象版本与所述新版本的状态不相同,则在所述人工管理者对象确定一等同状态并用所述新版本替代所述初始版本。
38.根据权利要求37所述的方法,还包括如下步骤将用于更新所述至少一个接口版本的数据从所述对象之一传送至所述人工管理者对象。
39.根据权利要求38所述的方法,还包括如下步骤为所述接口版本的所述更新而确定要被重构的所述对象的数目;从所述人工管理者对象发出破坏命令以破坏所述被重构的对象;在所述人工管理者对象建立所述数量的要被重构的对象每一个的新版本;将所述新版本传送至所述管理对象;和建立相应数量的具有所述新版本的新对象。
40.根据权利要求34所述的方法,其中所述对象接口用改进的CORBA IDL定义。
41.一种用于在软件开发过程中实现协商的系统,包括用于确定人工管理者对象的装置;用于确定至少一个管理对象的装置;用于由所述人工管理者对象,通过指示具有所述至少一个管理对象的对象建立多个用于执行对象操作的对象,确定在所述人工管理者对象和所述管理对象之间用于网络发展的接口(INE)的装置,每个所述对象包括一对象接口;用于建立用于将所述至少一个对象与所述管理对象连接的交互装置的装置;用于确定至少一个与所述管理对象相关的管理对象端口的装置;用于确定至少一个与所述对象相关的对象端口的装置;和用于将协商从所述对象端口传送至所述管理对象端口的装置。
42.根据权利要求41所述的系统,还包括用于由所述开发者为每个要被开始的所述对象建立开发者协商端口的装置。
43.根据权利要求42所述的系统,还包括用于由所述人工管理者对象注册所述开发者协商端口的装置。
44.根据权利要求43所述的系统,还包括用于在各个分别与所述开发者协商端口相关的所述管理对象建立管理协商端口的装置。
45.根据权利要求44所述的系统,其中所述协商是用改进的CORBA IDL编写的。
46.一种用于实现网络应用的方法,包括用于确定多个对象的装置;用于将对象端口与每个所述对象相关的装置;用于确定用于交换所述对象间消息的事务的装置;用于为每个所述对象确定对象接口的装置;和用于实现每个确定的对象接口的装置,其中所述消息在具有兼容的所述对象接口的所述对象之间顺序地交换。
47.根据权利要求46所述的系统,还包括用于注册所述实现的对象和具有管理结构的所述对象接口的装置,所述管理结构返回对象标识和对象版本标识以及接口版本标识。
48.根据权利要求47所述的系统,其中所述用于实现的装置包括用于确定具有兼容的所述对象版本标识的网络应用的装置。
49.根据权利要求48所述的系统,其中所述用于确定具有兼容的对象版本标识的网络应用的装置包括用于确定对象表的装置,该对象表包括表示所述网络应用中所述对象的所述对象版本标识的行,和表示所述接口版本标识的列;用于将所述确定的对象表关于对象版本标识进行排序的装置;用于为第一所述对象将第一所述排序对象表关于公用的所述接口标识排序和为第二所述对象将第二所述排序对象表关于公用的所述接口标识排序的装置;用于将所述第一所述排序对象表和所述第二所述排序对象表关于所述接口标识结合以形成所述对象表的结合的装置;和用于从所述对象表的所述结合中提取所述兼容的对象的装置。
50.根据权利要求49所述的系统,其中所述对象接口用改进的CORBA IDL定义。
51.一种用于建立网络应用的系统,包括用于确定人工管理者对象的装置;用于确定至少一个管理对象的装置;用于由所述人工管理者对象,确定在所述人工管理者对象和所述管理对象之间用于网络发展的接口(INE);通过所述人工管理者对象指示所述至少一个管理对象建立至少一个用于执行对象操作的对象的装置,每个所述对象包括一对象接口,用于建立用于将所述至少一个对象与所述管理对象连接的交互装置的装置,所述交互装置还与所述INE和所述人工管理者对象连接;和用于初始化在所述对象的所述人工管理者对象上的状态,并将所述初始化的状态经所述INE传送给所述对象,以将所述初始化的状态传送给所述管理对象的装置,而所述管理对象将所述初始化的状态从所述管理对象传送给所述对象。
52.根据权利要求51所述的系统,还包括用于为人工管理者对象确定人工管理者对象INE端口的装置;用于为所述管理对象确定管理对象INE端口的装置;和用于将所述INE与用于所述管理对象的所述INE端口和用于所述管理者对象的所述INE端口相关的装置。
53.根据权利要求52所述的系统,还包括用于确定至少一个与所述管理对象相关的端口的装置;和用于确定至少一个与每个所述对象相关的对象端口的装置。
54.根据权利要求51所述的系统,其中所述对象接口用改进的CORBA IDL定义。
55.一种用于动态地重构网络应用的系统,包括用于确定人工管理者对象的装置;用于确定至少一个管理对象的装置;用于由所述人工管理者对象通过指示具有所述至少一个管理对象的对象建立至少一个用于执行对象操作的对象,确定在所述人工管理者对象和所述管理对象之间用于网络发展的接口(INE)的装置,每个所述对象包括一对象接口并具有初始状态,用于建立用于将所述至少一个对象与所述管理对象连接的交互装置的装置;用于确定至少一个与所述管理对象相关的管理对象端口的装置;用于确定至少一个与所述对象相关的对象端口的装置;和用于在至少一个要被重构的所述对象中通过所述管理对象建立静止点的装置。
56.根据权利要求56所述的系统,还包括用于将用于更新所述至少一个接口版本的数据从所述对象传送至所述人工管理者对象的装置;用于确定所述要被重构的所述对象的所述端口的装置;用于从所述人工管理者对象发出破坏命令以破坏所述要被重构的端口的装置;用于在所述人工管理者对象建立要被重构端口的新版本的装置;用于将所述对象的所述新版本传送至所述管理对象的装置;用于建立具有所述对象的所述新版本的新对象的装置;和用于确定与所述新对象相关的新对象端口的装置。
57.根据权利要求56所述的系统,还包括用于从所述对象之一向所述管理人员传送用于更新所述至少一个接口版本的数据的装置;用于为所述接口版本的所述更新而确定要被重构的所述对象的数目的装置;用于从所述人工管理者对象发出破坏命令以所述要被重构的对象的装置;用于在所述人工管理者对象建立所述数量的要被重构的对象每一个的新版本的装置;用于将所述新版本传送至所述管理对象的装置;和用于建立相应数量的具有所述新版本的新对象的装置。
58.根据权利要求55所述的系统,其中所述对象接口用改进的CORBA IDL定义。
全文摘要
本发明涉及一种分布式面向对象的软件开发环境(10)。如果相关的接口是兼容的,则执行对象操作的对象可以相互通信。该环境为对象提供了控制和数据的顺序流。对象的每个接口具有独一无二的全局标识值。通过在管理结构中注册全局标识和接口版本从而确定兼容接口。该环境可以用于建立应用网络(12),以及对应用网络进行一致的、透明的动态更新。管理结构可以包括与应用中的对象相联系的管理对象。管理对象(42)与人工管理者对象(44)交流关于对象的信息。相应地,在应用网络的建立或重构中,人工管理者对象可以控制对象的事务而无需对象的参与。在设计阶段,管理结构还可以由开发者用于进行无范围协商。
文档编号G06F9/44GK1349626SQ00806859
公开日2002年5月15日 申请日期2000年4月28日 优先权日1999年4月29日
发明者曼丘纳斯M·瑟亚纳拉亚纳 申请人:拉特格斯大学, 曼丘纳斯M·瑟亚纳拉亚纳
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1