具体实施方式
在下面详细的描述中,以图示的方式对附图的引用显示了实施本发明的特定实施例。这些实施例被足够详细的描述以便使本领域技术人员能够实施本发明。应当理解,本发明的各种实施例尽管不同的,但也不是必是相互排斥的。此外,这里结合一个实施例所描述的特定特征、结构或特性在不偏离本发明的范围的条件下可在其它实施例中实现。此外,应当理解的是,每个所公开的实施例内的各个元件的位置或布置在不偏离本发明的范围的条件下可被修改。因此,下面的详细描述不应以限制意义而采纳,并且本发明的范围只由所附权利要求以及所授权的权利要求全部等效范围来限定和适当解释。在附图中,相同的数字在几个视图中引用相同或类似的功能。
本发明的实施例包括在由机器可读介质所提供的机器可执行指令内具体化的特征、方法或过程。机器可读介质包括以可由机器(例如计算机、网络设备、个人数字助理、制造工具、任何具有一个或多个处理器组的设备)访问形式提供(存储和/或传输)信息的机制。在示例实施例中,计算机可读介质包括易失性和/或非易失性介质(例如,只读存储器(ROM)、随机访问存储器(RAM)、磁盘存储介质、光存储介质、闪存设备等),以及电、光、声或其它形式的传播信号(例如载波信号、红外信号、数字信号等)。
这种指令被利用来使通用或专门的用所述指令编程的处理器来执行本发明的实施例的方法或过程。可替换地,本发明的实施例的特征或操作是由特定硬件组件执行的,所述特定硬件组件包含用于执行操作的硬布线逻辑,或者是由编程的数据处理组件和特定的硬件组件的任何组合来执行的。本发明的实施例包括数字/模拟信号处理系统、软件、数据处理硬件、实现数据处理系统的方法和各种处理操作,这里将作进一步描述。
多个图示出了本发明的实施例的系统和设备的框图。多个图示出了图示这些实施例的系统和设备的流程图。流程图的操作将参考框图中所示的系统/设备来描述。但是,应当理解,流程图的操作可由参考框图所讨论的系统和设备之外的其它系统和设备来执行,并且参考所述系统/设备所讨论的实施例可执行与参考流程图所讨论的实施例不同的操作。
本公开的一个或多个实施例提供了一种动态系统体系结构,其允许以较小的资源密集性来重新设计软件和重新构造系统体系结构。因此,系统可以更容易被更新以满足任何变更需求。具体地,一个或多个实施例提供在运行时开发软件的能力,在运行时配置和重新配置系统的能力,最小化应用的配置和重新配置,提供动态软件资源管理,为软件系统提供在运行时适应的能力,最小化软件维护工作并提供在运行时高度的可用性、故障容错和错误恢复。
本公开的一个或多个实施例通过提供开放并且轻量的动态体系结构系统来完成了这些特征。在该情况下,术语开放是指允许人们扩展该系统。术语轻量是指该系统使用很少的资源。利用两个新开发的基于XML的语言来实现开放且轻量的体系结构系统。一个是指体系结构描述标记语言(ADML),并且它用于串行化体系结构描述。另一个新开发的语言是指体系结构修改标记语言(AMML),兵器它用来串行化体系结构修改。
该系统的优点在于,对这些动态体系结构应用存在非常少的限制。应用开发者可重新使用许多现成的软件组件作为系统中的组件,并且可基于应用体系结构来任意定义连接符。此外,对于使用动态体系结构系统构建的应用,在运行时几乎不需要额外的存储器。因此,这些实施例特别适于限制资源的计算机系统,比如像PDA和移动电话的“嵌入式系统”。这些实施例集中在运行时装配组件。
一个实施例包括三个主要部分——ADML和AMML、动态体系结构运行时(DART)、和接口。ADML和AMML定义用于串行化体系结构描述和体系结构修改的文档格式。DART是能够基于ADML和AMML文档在运行时装配和/或重新装配应用的软件组件/代理。DART还能够提供关于当前运行的应用的ADML文档。在系统中的三个接口包括IConnector、IActiveComponent、和IArchitecture。在一个实施例中,IConnector由ADML和AMML文件中的连接符实现。当DART装配对象时,其调用在指定连接符上的IConnector接口(参见图1;编号140),以便构建由ADML描述的连接。IActiveComponent控制当前体系结构中活动对象的执行。例如,在重新装配应用期间,系统应当暂停,并且在重新装配之后,对每个IActiveComponent继续执行。IArchitecture仅仅是DART中的另一个接口(参见图1;编号150)。在一个实施例中,DART由程序通过该接口来控制,并且DART构建与该接口之上。此外,由于DART还是另一个组件,因此多个体系结构可装配在一起。
图1图示了动态体系结构运行时(DART)系统100的一个示例实施例。在DART系统100中,配置端105与应用端110经由ADML115和AMML120通信。应用端110包括DART模块125及其关联的IArchitecture130、IConnector140和IActiveComponent150。
ADML的一个简单示例如下:
<xml version“1.0”>
<ADML name=“Demo”>
<Assemblies>
<Assembly id=”ass_0”uri=”System.Windows.Forms”/>
<Assembly id=”ass_2”uri=Co.DA.dll”/>
<Assembly id=”ass_3”uri=Co.DA ControlsConnector.dll”/>
<Assembly id=”ass_4”uri=Co.DADemo.Pagel.dll”/>
<Assembly id=”ass_5”uri=Co.DADemo.Page2.dll”/>
</Assemblies>
<Types>
<Type id=”TabControl”name=”System.Windows.Forms.TabControl”
idrefAssembly=”ass=0”/>
<Type id=”DemoForm”name=”Systen.Windows.Forms.Form”
idrefAssembly=”ass=0”/>
<Type id=”ControlsConnector”name=”Co.DA.ControlsConnector”
idrefAssembly=”ass=3”/>
<Type id=”Page1”name=”Co.DA.Demo.Page1”
idrefAssembly=”ass=4”/>
<Type id=”Page2”name=”Co.DA.Demo.Page2”
idrefAssembly=”ass=5”/>
</Types>
<Components>
<Component id=”mainfonn”idrefType=”DemoForm”/>
<Component id=”tabcontrol”idrefType=”TabControl”/>
<Component id=”tabpage1”idrefType=”Page1”/>
<Component id=”tabpage2”idrefType=”Page2”/>
</Components>
<Connectors>
<Connector id=”main_connector”idrefType=”ControlsConnector”/>
<Connector id=”tab_connector”idrefType=”ControlsConnector”/>
</Connectors>
<Connections>
<Connection idref=”tab_connector”>
<end1 idref=”tabcontro1”/>
<end2 idref=”tabpage1”>
<Location X=”4”Y=”4”/>
<Size Width=”232”Height=”246”/>
<Text>Taskl</Text>
</end2>
<end2 idref=”tabpage2”>
<Location X=”4”Y=”4”/>
<Size Width=”232”Height=”246”/>
<Text>Task2</Text>
</end2>
</Connection>
</Connections>
</ADML>
AMML的一个简单示例如下:
<xml version“1.0”>
<AMML name=“Demo”>
<Assemblies>
<Assembly id=”ass_0”uri=”System.Windows.Forms”/>
<Assembly id=”ass_2”uri=Co.DA.dll”/>
<Assembly id=”ass_3”uri=Co.DAControlsConnector.dll”/>
<Assembly id=”ass_4”uri=Co.DADemo.Page1.dll”/>
<Assembly id=”ass_5”uri=Co.DADemo.Page2.dll”/>
</Assemblies>
<Types>
<Type id=”TabControl”name=”System.Windows.Forms.TabControl”
idrefAssembly=”ass=0”/>
<Type id=”art”name=”Co.DA.ArchitectureRuntime”
idrefAssembly=”ass=2”/>
<Type id=”DemoForm”name=”System.Windows.Forms.Form”
idrefAssembly=”ass=0”/>
<Type id=”ControlsConnector”name=”Co.DA.ControlsConnector”
idrefAssembly=”ass=3”/>
<Type id=”Page1”name=”Co.DA.Demo.Pagel”
idrefAssembly=”ass=4”/>
<Type id=”Page2”name=”Co.DA.Demo.Page2”
idrefAssembly=”ass=5”/>
</Types>
<Components>
<Component id=”___DART____”idrefType=”art”/>
<Component id=”mainform”idrefType=”DemoForm”/>
<Component id=”tabcontrol”idrefTyp6=”TabControl”/>
<Component id=”tabpage1”idrefType=”Page1”/>
<Component id=”tabpage2”idrefType=”Page2”/>
</Components>
<Connectors>
<Connector id=”main_connector”idrefType=”ControlsConnector”/>
<Connector id=”tab_connector”idrefType=”ControlsConnector”/>
</Connectors>
<Commands>
<Add idref=”tabcontro1”/>
<Add idref=”tab_connector”/>
<Add idref=”tabpage1”/>
<Add idref=”tabpage2”/>
<Connection idref=”tab_connector”>
<end1 idref=”abcontrol”/>
<end2 idref=”tabpage1”>
<Location X=”4”Y=”4”/>
<Size Width=”232”Height=”246”/>
<Text>Taskl</Text>
</end2>
<end2 idref=”tabpage2”>
<Location X=”4”Y=”4”/>
<Size Width=”232”Height=”246”/>
<Text>Task2</Text>
</end2>
</Connection>
</Commands>
</AMML>
如以上例子ADML中所示,ADML主要提供关于组件、连接符和连接的信息。连接符是实现IConnector接口(参见图1;编号140)的组件。每个包括连接符的组件对应于运行时应用中的对象。在一个实施例中,连接符可连接多个组件。在ADML中的连接元素中描述连接信息。装配元素和类型元素提供加载和卸载组件(包括描述符)的信息。线程元素指定应用中的活动对象。
一个或多个实施例的开放且轻量的的动态体系结构系统由若干因素产生。在至少一个实施例中,人们可通过编写他们自己的连接符和活动组件来扩展系统。这是通过实现接口IConnector和IActiveComponent而实现的。然后这在语义上定义了新的连接。在至少一个其他实施例中,人们可通过敬将XML项添加到ADML/AMML定义中的开放元素组件、连接符和连接中来扩展系统。通过将此与编写他们自己的连接符和互动组件相组合,人们可添加特定的连接参数.
一个或多个实施例的轻量性质是指所述实施例使用很少的资源。很少资源的使用是由于不存在运行时的负载。具体地,与其它动态体系结构系统不同,在所公开系统的一个或多个实施例中不存在消息服务。此外,存在非常少的用于这些实施例的动态体系结构性能的存储器。具体地,在一个实施例中,系统在存储器中仅保存名称-组件表;对当前体系结构的描述存储在外部存储器中。因此,当系统想重新装配组件时,体系结构描述将被加载并且名称-组件表将被用来再次在存储器中构建体系结构。在完成装配后,新的体系结构描述被存储在外部存储器,并且销毁存储器中的体系结构。
如前面所公开的,ADML被用来串行化体系结构描述,并且AMML被用来串行化体系结构修改。这些语言对于组件、连接符和连接的串行化是开放的。串行化是指对象的状态可被存储在外部存储器。具体地,组件和连接符的状态可被放到对应的XML元素中。例如,如果希望装配具有初始大小和位置属性的表格组件,所述属性可按如下被添加到XML描述中:
<Component id=’mainform’<idrefType=”Demoform”/>
<Size>300,200</Size>
<Position>0</Position>
</Component>
动态体系结构系统将这些包含在Component元素中的额外XML元素传递给主组件。该组件将描述转送到存储器。
图2和图3图示了以结构格式的ADML和AMML。尤其,在图2图示了示例ADML200及其关联的部件210、类型220、组件230、连接符240、连接250、线程260和属性270。组件230还包括组件类型232和对象类型234。相似的,连接符240包括连接符类型242和对象类型244,并且连接250包括连接类型252和对象类型254。图3图示了示例示例AMML300及其关联的部件310、类型320、组件330、连接符340、和命令350.在AMML300的一个实施例中,命令包括加上351、移除352、连接353、断开354、开始355和停止356。
使用本公开的一个实施例所构建的应用可包括部件、ADML或AMML文档和/或实例、以及DART。部件是包含组件(包括连接符)定义的软件模块。ADML和AMML是指部件和在部件中定义的组件。DART如上所述。
在一个例子中,系统构建在能够动态加载和卸载部件的平台上。例如,Java和.Net平台可用来动态加载和卸载这种部件。具体地,在Java平台中,可通过创建客户类加载器并利用它来加载类来加载/卸载类。比较起来,在.Net平台中,只能在应用域级别执行卸载。在COM平台中,COM约定(诸如Windows API LoadLibrary、FreeLibrary、GetProcAdress和GetClass0bject)可被用来动态加载和卸载COM类.此外,系统可构建在能够通过字符串动态激活对象的平台之上。用Java和.Net平台,提供了反射机制并且其能够用来根据运行时的类型名称来创建对象。COM平台还提供对象激活机制(即COM SCM—服务控制管理器),以通过运行时的类名称或GUID来创建COM对象.
在一个实施例中,系统可构建在提供安排对象生存期限(lift-time)的机制的平台之上。因为Java和.Net平台都提供垃圾收集机制,因此不存在安排对象来卸载对应类(仅使用垃圾收集机制)的需要。对于COM,引用计数机制可用来释放对象。
图4图示了构建系统体系结构的过程400的一个实施例。在过程400中,在操作405,DART代理访问ADML文档。在操作410,DART代理读取ADML文档,并且加载在ADML文档中引用的部件。在操作415,DART代理基于ADML文档的内容来激活类型对象和/或类对象。在操作420,DART代理基于ADML文档来创建部件和连接符。DART代理接着在判断框425确定两个条件。首先,DART确定是否存在在对应组件标记的标记中定义的扩展字符串内容。其次,DART确定组件是否还支持通过字符串的串行化。如果这两个条件都满足,那么在操作430使用字符串来串行化组件。因此,在操作435,DART代理基于ADML文档中描述的连接来装配体系结构。在操作440,DART代理接着将名称-对象表维护在存储器中,将基于当前体系结构生成的ADML文档存储在外部存储器,并且释放所有其它额外的资源。最后在操作445,DART代理激活在ADML文档中指定的主活动组件。
图5图示了修改系统体系结构的过程500的一个实施例。参考图5,在操作505,DART代理加载AMML文档。在加载AMML文档之后,在操作510,DART代理关闭当前体系结构。在关闭之后,在操作515,DART代理基于提供的ADML文档(来自存储器)来构建新的体系结构上下文,并且在操作520,DART代理基于AMML文档来修改体系结构。在操作525,DART代理将名称-对象表维护在存储器中,将基于当前体系结构生成的ADML文档存储在外部存储器,并且释放所有其它额外的资源。最后在操作530,DART代理激活在文档中指定的主活动组件.
图6图示了组件开发者605、体系结构设计者610和DART代理615之间关系和功能。在610,组件开发者开发软件组件。在620,组件被上载到组件库630中。在640,体系结构设计者610使用组件库630为应用来设计体系结构,并且在650,将体系结构提交给ADML600。在670,DART代理启动,并且在操作680,侦听配置端口。在操作690,DART代理接着使用ADML660和组件库630来加载ADML660,并且根据ADML加载来自组件库630的组件并且为每个ADML构建体系结构。
图7是在实施本发明的实施例中结合的硬件和操作环境的概略图。图7的描述是为了提供对实施本发明中结合的适当计算机硬件和适当计算环境的简洁、一般的描述。在一些实施例中,在计算机可执行指令的一般上下文中描述本发明,计算机可执行指令比如是由诸如个人计算机执行的程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。
此外,本领域的技术人员将理解,本发明还可利用其它计算机系统配置来实现,包括手持设备、多处理器系统、基于微处理器或可编程的消费电子产品、网路PCS、迷你计算机、主机计算机等。本发明还可在分布式计算机环境中实施,在分布式计算机环境中,任务由通过通信网络链接的I/O远程处理设备来执行。在分布式计算环境中,程序模块可位于本地和远程储存器设备。
在图7所示的实施例中,提供了可应用于其它图中所示的任何服务器和/或远程客户端的硬件和操作环境。
如图7所示,硬件和操作环境的一个实施例包括以计算机20形式的通用计算设备(例如个人计算机、工作站或服务器),包括一个或多个处理单元21、系统存储器22和系统总线23,系统总线23可操作地将包括系统存储器22的各种系统组件耦合到处理器单元21。可能只存在一个或存在多于一个的处理单元21,使得计算机20的处理器包括单个中央处理单元(CPU)或多个处理单元,通常称为多处理器或并行处理器环境。在各种实施例中,计算机20是传统计算机、分布式计算机或任何其它类型的计算机。
系统总线23可是若干总线结构类型中的任意类型,包括存储器总线或存储器控制器、外围总线和局部总线,它们使用各种总线体系结构中的任何总线体系结构。系统存储器还可简单地被称为存储器,并且在一些实施例中,包括只读存储器(ROM)24和随机访问存储器(RAM)25。基本输入/输出系统(BIOS)程序26可例如存储在ROM24中,该程序包含诸如在启动期间帮助在计算机20内的元件之间传送信息的基本例程。计算机20还包括用于从硬盘(未示出)读取和向其写入的硬盘驱动器27、用于从可移除磁盘29读取或向其写入的磁盘驱动器28、和用于从诸如CD ROM或其它光媒体的可移除光盘31读取或向其写入的光盘驱动器30。
硬盘驱动器27、磁盘驱动器28、和光盘驱动器30分别与硬盘驱动器接口32、磁盘驱动器接口33、和光盘驱动器接口34耦合。驱动器及其关联的计算机可读媒体为计算机20提供计算机可读指令、数据结构、程序模块和其它数据的非易失性存储器。本领域技术人员应当理解,能够存储计算机可访问数据的任何类型的计算机可读媒体,比如磁带盒、闪存卡、数字视频盘、Bernoulli盒式磁盘、随机访问存储器(RAM)、只读存储器(ROM)、独立盘的冗余阵列(例如RAID存储设备)等,可在示例操作环境中使用。
多个程序模块可存储在硬盘、磁盘29、光盘31、ROM24或RAM25上,包括操作系统35、一个或多个应用程序36、其它程序模块37和程序数据38。包含用于本发明的安全传输引擎的插件可驻留在这些计算机可读媒体中的任意一个或多个上。
用户可通过诸如键盘40和指示设备42的输入设备将命令和信息输入到计算机20。其它输入设备(未示出)包括麦克风、游戏杆、游戏手柄、圆盘式卫星电视天线、扫描仪等。这些其它的输入设备通常通过与系统总线23耦合的串行端口接口46连接到处理单元21,但是可由诸如并行端口、游戏端口或通用串行总线(USB)的其它接口来连接。监视器47或其它类型的显示设备也可经由诸如视频适配器48的接口而连接到系统总线23。监视器40可为用户显示图形用户接口。除了监视器40,计算机通常包括其它外围输出设备(未示出),比如扬声器和打印机。
计算机20可利用到诸如远程计算机49的一个或多个远程计算机或服务器的逻辑连接来在连网环境中操作。这些逻辑连接可通过耦合到计算机20或作为计算机20的一部分的通信设备来实现;本发明不限于特定类型的通信设备。尽管只说明了存储器存储设备50,但是远程计算机49可是另一个计算机、服务器、路由器、网络PC、客户机、对等设备或其它公共网络节点,并且通常包括许多或所有的上述与计算机20有关的I/O元件。图7中描绘的逻辑连接包括局域网(LAN)51和/或广域网(WAN)52。该连网环境在办公网络、企业范围的计算机网络、内联网和互联网中常见的,这些网络是所有类型的网络。
当在LAN连网环境中使用时,计算机20通过网路接口或适配器53连接到LAN51,网路接口或适配器53是一种通信设备。在一些实施例中,当在WAN连网环境中使用时,计算机20通常包括调制解调器54(另一种通信设备)或任何其它类型的通信设备,比如无线收发机,用于在诸如互联网的广域网52之上建立通信。调制解调器54可以是内部或外部的,并且经由串行端口接口46连接到系统总线23。在连网环境中,所描述的与计算机20有关的程序模块可被存储在远程计算机的远程存储器设备50或服务器49中。应当理解,所示的网络连接是示例性的,并且可使用在计算机之间通过任何适当的交换机、路由器、出口和电源线来建立通信链路的其它装置和通信设备,包括光纤同轴混合连接、T1-T3线路、DSL、OC-3和/或OC-12,TCP/IP、微波、无线应用协议、和其它电子媒体,如任何本领域普通技术人员所知道的那样。
在本发明的实施例的前面的详细描述中,为了简化公开,将各种特征在一个或多个实施例中被分组在一起。公开的方法不能被解释为反映本发明所要求的实施例需要多于在每个权利要求中明确叙述的特征更多的特征的意图。而是,如下面的权利要求所反映的,创造性的主题在于比单个公开的实施例的所有特征更少的特征。因此,下面的权利要求再次被合并到本发明的实施例的详细描述中,使每个权利要求将其自己作为单独的实施例。应当理解,上面的描述旨在是说明性的而不是限制性的。其旨在覆盖所有如所附权利要求中限定的本发明的范围内所包括的替换、修改和等效物。许多其它实施例对于本领域技术人员来说在回顾上述描述时是明显的。因此,应当参考所附权利要求连同所授权的权利要求的全部等效范围来确定本发明的范围。在所附权利要求中,术语“包括”和“其中”分别被用作为相应术语“包括”和“其中”的通俗英文等效词。此外,术语“第一”、“第二”和“第三”等仅仅被用作为标签,而不试图将数字要求施加于其对象上。
提供符合37C.F.R1.72(b)的摘要,以允许读者快速确定技术公开的性质和要旨。一起提交的摘要不能理解为其可用来解释或限制权利要求的范围或意思。