《迭代组件绑定.pdf》由会员分享,可在线阅读,更多相关《迭代组件绑定.pdf(20页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN101939723A43申请公布日20110105CN101939723ACN101939723A21申请号200980104571722申请日2009010612/027,99020080207USG06F9/06200601G06F9/44200601G06F15/17320060171申请人微软公司地址美国华盛顿州72发明人RS金伯利CL安德森CA西泽伯斯基AJ摩尔DF伯克斯74专利代理机构上海专利商标事务所有限公司31100代理人胡利鸣钱静芳54发明名称迭代组件绑定57摘要组件域用于定义与该组件域相关联的各组件之间的绑定。组件域跟踪每一组件要导入的各种服务,并且跟踪每。
2、一组件导出的各种服务。在运行时而非在编译时间,使用服务导入和导出数据来绑定各组件之间的各种相互关系。因此,取决于可用组件及其特征,绑定可以是不同的。这准许应用程序更加灵活。在一个实现中,绑定是迭代地执行的。例如,如果在将服务导入绑定到服务导出的一次迭代之后,一些组件可能展开它们导出的服务或它们希望导入的服务。30优先权数据85PCT申请进入国家阶段日2010080686PCT申请的申请数据PCT/US2009/0302112009010687PCT申请的公布数据WO2009/099691EN2009081351INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书3页说明书10页。
3、附图6页CN101939726A1/3页21一种包括其上含有计算机可执行指令的一个或多个计算机可读介质104的计算机程序产品,当所述指令由计算系统100的一个或多个处理器102执行时,使所述计算系统执行一种用于合成程序的多个组件的方法,所述方法包括创建组件域112、210的动作501;实例化一个或多个组件211的初始集合的动作502、601,以使得它们与所述组件域相关联,以及以便使所述初始集合中的每一组件所导入的服务A、B、C、D、E、F如果有的话对所述组件域可见,并且以便使所述初始集合中的每一组件所导出的服务如果有的话也对所述组件域可见;所述组件域标识一个或多个组件的所述初始集合中的包括嵌套。
4、组件401、402、411、412的任一组件的动作602对于所述组件的初始集合中的包括一个或多个嵌套组件的每一组件,展开所述包括一个或多个嵌套组件的组件的动作503、603,以便所述嵌套组件也在以下程度上对所述组件域可见使所述嵌套组件所导入的服务如果有的话对所述组件域可见,以及使所述嵌套组件所导出的服务如果有的话对所述组件域可见;所述组件域轮询所述组件的初始集合以寻找所导出的服务的动作505;以及所述组件域轮询所述组件的初始集合以寻找所导入的服务并使用所述组件的初始集合中的一个组件所导出的服务之一来满足所述组件的初始集合的各组件中的至少另一个组件所导入的服务中的至少一个的动作506,其中对包括。
5、一个或多个嵌套组件的每一组件的所述展开动作、所述组件域轮询所导出的服务的动作、以及所述组件域轮询所导入的服务并满足所导入的服务中的至少一个的动作是按预定次序发生的。2如权利要求1所述的计算机程序产品,其特征在于,所述预定次序是首先对包括一个或多个嵌套组件的每一组件的展开动作,其次所述组件域轮询所导出的服务的动作,以及第三所述组件域轮询所导入的服务并满足所导入的服务中的至少一个的动作。3如权利要求2所述的计算机程序产品,其特征在于,所述方法还包括在轮询所导出的服务的动作之前,通知所述组件的初始集合中的至少一些组件将要开始轮询所导出的服务的动作。4如权利要求3所述的计算机程序产品,其特征在于,所述。
6、方法还包括在轮询所导入的服务并满足所导入的服务中的至少一个的动作之后,以及向所述组件的初始集合中的至少一些组件通知轮询所导入的服务并满足所导入的服务中的至少一个现在已经完成的动作。5如权利要求2所述的计算机程序产品,其特征在于,所述方法还包括在轮询所导入的服务并满足所导入的服务中的至少一个的动作之后,向所述组件的初始集合中的至少一些组件通知轮询所导入的服务并满足所导入的服务中的至少一个现在已经完成的动作。6如权利要求2所述的计算机程序产品,其特征在于,包括对包含一个或多个嵌套组件的每一组件的展开动作、所述组件域轮询所导出的服务的动作、以及第三所述组件域轮询所导入的服务并满足所导入的服务中的至少。
7、一个的动作的集体动作是在轮询的该集体动作的初始迭代中执行的,所述方法还包括在所述集体动作的初始迭代中轮询所导入的服务并满足所导入的服务中的至少一个权利要求书CN101939723ACN101939726A2/3页3的动作之后,确定是否存在作为满足所述服务导入中的至少一个的动作的结果而添加的其他服务导入的动作;以及执行所述集体动作的后续迭代的动作。7如权利要求6所述的计算机程序产品,其特征在于,所述集体动作是针对多次迭代来迭代地执行的,直至满足了所有服务导入为止。8如权利要求6所述的计算机程序产品,其特征在于,所述附加服务导入是作为与所述组件域相关联的用于满足所述组件的初始集合的服务导入的附加组。
8、件的结果而添加的,附加服务导入是所述附加组件中的至少一个的服务导入。9如权利要求6所述的计算机程序产品,其特征在于,所述附加服务导入是由所述组件的初始集合之一在满足了其服务导入中的另一个之后添加的。10如权利要求1所述的计算机程序产品,其特征在于,所述一个或多个计算机可读介质是物理存储器和/或存储介质。11一种包括其上含有计算机可执行指令的一个或多个计算机可读介质104的计算机程序产品,当所述指令由计算系统100的一个或多个处理器102执行时,使所述计算系统执行一种用于合成程序的多个组件211216的方法500,所述方法包括创建组件域112、210的动作501,其中所述组件域能够标识在该组件域。
9、内实例化的每一组件所导出的服务A、B、C、D、E、F和所导入的服务;在所述组件域中实例化组件的初始集合的动作502以及针对至少两次迭代来迭代地执行以下动作的动作执行所述组件的初始集合中的每一组件的嵌套组件401、402、411、412展开的动作503、603,其中所述嵌套组件展开允许所述组件域标识所述嵌套组件所导出和导入的服务;所述组件域标识所述组件的初始集合中的包括所述嵌套组件的每一组件所导出的服务如果有的话的动作505在标识了所导出的服务后,所述组件域标识所述组件的初始集合中的每一组件所导入的服务如果有的话的动作506满足所导入的服务中的至少一个的动作506以及确定在所述满足动作之后是否还。
10、存在尚待满足的其他所导入的服务的动作508,并且如果是,则用相对于所述组件域中的组件的可能展开的集合的下一迭代来继续所述迭代动作,并且如果否,则结束所述迭代动作。12如权利要求11所述的计算机程序产品,其特征在于,所述一个或多个计算机可读介质是物理存储器和/或存储介质。13如权利要求12所述的计算机程序产品,其特征在于,对于所述迭代中的至少一次,满足所导入的服务中的至少一个的动作包括用所述组件域中的另一组件所导出的服务来满足所导入的服务中的至少一个的动作。14如权利要求12所述的计算机程序产品,其特征在于,对于所述迭代中的至少一次,满足所导入的服务中的至少一个的动作包括在所述组件域中搜索所述实。
11、例化的组件的动作;确定所述组件域中的实例化的组件都没有导出所述服务的动作;权利要求书CN101939723ACN101939726A3/3页4找出尚未在所述组件域内实例化的导出所述服务的组件的动作;在所述组件域中实例化所找到的组件的动作;以及将所找到的组件的实例化所导出的服务与已经在所述组件域内实例化的组件所导入的服务相绑定的动作。15如权利要求14所述的计算机程序产品,其特征在于,所述寻找动作包括咨询列出组件及其所导出的服务的目录的动作。16如权利要求11所述的计算机程序产品,其特征在于,所展开的嵌套组件包括至少两级嵌套组件。17如权利要求11所述的计算机程序产品,其特征在于,还包括对于迭代。
12、中的至少一次,在标识所述组件域中的组件所导出的服务之前并在满足所导出的服务中的至少一个的动作之后通知所述组件的动作。18如权利要求11所述的计算机程序产品,其特征在于,还包括在迭代的动作完成之后通知所述组件域中的组件的动作。19一种包括其上含有计算机可执行指令的一个或多个计算机可读介质104的计算机程序产品,当所述指令由计算系统100的一个或多个处理器102执行时,使所述计算系统执行一种用于合成程序的多个组件211216的方法500,所述方法包括创建组件域112、21的动作501,其中所述组件域能够标识在该组件域内实例化的每一组件所导出的服务A、B、C、D、E、F和所导入的服务;在所述组件域中。
13、实例化组件的初始集合的动作502;针对至少两次迭代来迭代地执行以下动作的动作执行所述组件的初始集合中的每一组件的嵌套组件401、402、411、412展开的动作503、603,其中所述嵌套组件展开允许所述组件域标识所述嵌套组件所导出和导入的服务;在标识所述组件域中的组件所导出的服务505之前通知所述组件的动作504,所述组件域标识所述组件的初始集合中的包括所述嵌套组件的每一组件所导出的服务如果有的话的动作505;在标识了所导出的服务505后,所述组件域标识所述组件的初始集合中的每一组件所导入的服务如果有的话的动作506;满足所导入的服务中的至少一个的动作506;以及通知所述组件域中的组件所述满。
14、足动作已完成的动作507;确定在所述满足动作之后是否还存在尚待满足的其他所导入的服务的动作508,并且如果是,则用相对于所述组件域中的组件的可能展开的集合的下一迭代来继续所述迭代动作,并且如果否,则结束所述迭代动作;以及通知所述组件域中的组件所述迭代动作已完成的动作509。20如权利要求19所述的计算机程序产品,其特征在于,所述一个或多个计算机可读介质是物理存储器和/或存储介质。权利要求书CN101939723ACN101939726A1/10页5迭代组件绑定0001背景0002面向对象程序设计将软件构造成对象实例或“组件”的集合,每一个都在定义该组件的方法和属性的类之后模式化。当谈及程序设计。
15、时,“组件化”指的是对组件进行定义以便使它们对程序可用。当然,程序的各组件在功能上互连以便实现该程序的更大目的。“合成”指的是对将程序中的对象如何相关在一起进行定义。0003通常,对象之间的相互关系是使用非常明确地定义程序的各组件之间的关系的代码或声明来实现的。已经使用编码对象之间的相互连接的这种显式合成来在面向对象程序设计领域作出了巨大进步。在常规显式合成中,例如,定义程序的合成即,各组件之间的相互关系的代码是在使用源代码创作程序之后编译的。可执行文件因而从其诞生开始就表示程序的各组件和各程序组件之间的各种相互关系。0004简要概述0005本文描述的各实施例涉及使用组件域来定义与该组件域相关。
16、联的各组件之间的绑定。组件域跟踪每一组件要导入的各种服务,并且跟踪每一组件要导出的各种服务。在运行时而非在编译时间,使用服务导入和导出数据来绑定各组件之间的各种相互关系。因此,取决于可用组件及其特征,绑定可以是不同的。这准许应用程序更加灵活。在一个实施例中,绑定是迭代地执行的。例如,如果在将服务导入绑定到服务导出的一次迭代之后,一些组件可能展开它们导出的服务或它们希望导入的服务。0006本概述不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。0007附图简述0008为了描述可获得本发明的上述和其他优点和特征的方式,将通过引用附图中示出的各具体实施例来呈。
17、现以上简要描述的本发明的更具体描述。可以理解,这些附图仅描绘更宽泛原理的各示例实施例,并且因此不被认为是对本发明的范围的限制,将通过使用附图用附加特征和细节来描述和解释这些实施例,附图中0009图1示出可操作组件域的示例计算系统;0010图2示组件域以及其相关联的逻辑和该组件域中包含的各组件的示例体系结构;0011图3示出组件域中在被绑定后的各组件的示例;0012图4示出与嵌套组件展开相关联的过程流程;0013图5示出用于迭代地绑定组件域中的组件的方法的流程图;0014图6示出用于在实例化具有嵌套组件的组件后展开嵌套组件的方法的流程图;以及0015图7示出用于用服务导出来满足服务导入的方法的流。
18、程图。0016详细描述0017根据本文描述的各实施例,组件域被用来创建该组件域中的各组件之间的绑定。组件域跟踪每一组件要导入的各种服务,并且跟踪每一组件要导出的各种服务。在运行时而非在编译时间,使用服务导入和导出数据来绑定各组件之间的各种相互关系。因此,取决说明书CN101939723ACN101939726A2/10页6于可用组件及其特征,绑定可以是不同的。这准许应用程序更加灵活。在一个实现中,绑定是迭代地执行的。例如,如果在将服务导入绑定到服务导出的一次迭代之后,一些组件可能展开它们导出的服务或它们希望导入的服务。0018首先,在概括地关于计算系统的一些介绍性讨论之后,将参考图1描述基本计。
19、算系统。随后,将参考图2到图7来示出并描述具有组件域逻辑的组件域的各实施例和组件域的操作的各实施例。0019计算系统现在越来越多地采用各种各样的形式。例如,计算系统可以是手持式设备、电器、膝上型计算机、台式计算机、大型机、分布式计算系统或甚至常规上不被认为是计算系统的设备。在本说明书以及权利要求书中,术语“计算系统”被广义地定义为包括包含至少一个处理器以及其上能含有可由处理器执行的计算机可执行指令的存储器的任何设备或系统或其组合。存储器可采取任何形式,且可取决于计算系统的性质和形式。计算系统可分布在网络环境上,且可包括多个组成计算系统。0020参考图1,在其最基本的配置中,计算系统100一般包。
20、括至少一个处理单元102和存储器104。存储器104可以是物理系统存储器,它可以是易失性的、非易失性的或两者的某种组合。术语“存储器”也可在此处用来指示诸如物理存储介质等非易失性大容量存储。如果计算系统是分布式的,则处理、存储器、和/或存储能力也可以是分布式的。如此处所使用的,术语“模块”或“组件”可以指在计算系统上执行的软件对象或例程。此处描述的不同的组件、模块、引擎和服务可被实现为在计算系统上执行的对象或进程例如,作为分开的线程。0021在以下描述中,参考由一个或多个计算系统执行的动作描述各实施例。如果这样的动作用软件实现,则相关联计算系统中执行该动作的一个或多个处理器响应于执行了计算可执。
21、行指令而引导计算系统的操作。这样的操作的示例涉及对数据的操纵。计算机可执行指令和所操纵的数据可被存储在计算系统100的存储器104中。0022计算系统100还可包含允许计算系统100例如通过网络110与其他计算系统通信的通信信道108。通信信道108是通信介质的示例。通信介质一般用诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并且包括任何信息传递介质。作为示例而非限制,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、无线电、红外线和其他无线介质。如此处所用的术语“计算机可读介质”既包括存储介质又包括通信介质。0023在图1中,。
22、计算系统100被示为在存储器104的非易失性部分内具有组件域112。如将参考图2以及后续附图进一步详细描述的,组件域112被用作在其中实例化各种组件的逻辑容器。组件域逻辑114随后动态地绑定各组件,而非在编译时间绑定这些组件。0024本发明的范围内的实施例还包括用于携带或其上储存有计算机可执行指令或数据结构的计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机访问的任何可用介质。作为示例而非限制,这样的计算机可读介质可包括物理存储和/或存储器介质,诸如RAM、ROM、EEPROM、CDROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于承载或存储计算机可执行指令或数据结构形式的所。
23、需程序代码装置且可由通用或专用计算机访问的任何其他介质。当信息通过网络或另一通信连接硬连线、无线或硬连线或无线的组合传输或提供给计算机时,计算机将该连接完全视为计算机可读介质。因此,任何说明书CN101939723ACN101939726A3/10页7这样的连接被适当地称为计算机可读介质。上述的组合也应被包括在计算机可读介质的范围内。0025计算机可执行指令例如包括,使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。尽管用对结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于在此所述的具体特征或动作。相反,在此所述的具体特征和动。
24、作是作为实现权利要求的示例形式公开的。0026图2示出组件域210和被标记为“组件域逻辑”220的相关联的组件域管理器。图2的组件域210可以是例如图1是组件域112。组件域210可以是可包含组件实例的任何逻辑容器。组件域210的灵活性允许该组件域包含各个类的各种组件实例。组件域210中包括的组件的类型将取决于应用程序和该应用程序所使用的构件块。因此,本发明的原理不限于组件域210内包括的组件的类型,也不限于该组件域内的组件的数量。然而,出于说明的目的,六个组件211、212、213、214、215和216被示为包括在组件域210内。0027组件域210可以是能够在字面上或逻辑上包含其他组件的。
25、任何逻辑容器。例如,组件域210可以是能够接纳各组件实例的容器类的实例,而各组件实例的集合是一数据结构。组件域210还可以是不直接包含每一组件实例但可能具有与相关联的组件的有关的信息的对象。即使在这种情况下,这些组件也可被认为是逻辑上处于组件域210内。例如,在一个实施例中,组件域只包括一组值,可能是一组名值对。组件域从导出服务的组件接收值,并且导入该服务的组件接收该值。然而,即使在该上下文中,这些组件也可被认为是逻辑上处于组件域内部或之内。在本说明书和权利要求书中,当组件被称为处于组件域“之内”或“内部”时,其意味着该组件被包含在该组件域内或以组件域逻辑220能够与该组件域通信并绑定与该组件。
26、域相关联的各组件的方式在逻辑上与该组件域相关联。0028组件域逻辑220被示为包括各种机制,包括例如关联机制222、服务清单机制223、嵌套组件展开机制224、具有相关联的匹配规则226的匹配机制225、抽象机制227、以及具有相关联的目录229的编目录机制228。这些各种机制222到229被示为分开的机制。然而,这是出于清楚地解释组件域逻辑220的功能的目的的。这不是用来表示它们实际上是分开的机制。这些机制中的一些可以组合成单个机制。事实上,组件域逻辑的全部可以是整体式的。在另一个极端,每一机制可以包括多个组件。单个组件还可包括对多个机制都有贡献的逻辑。将简短描述各组件域逻辑220机制的操作。
27、。0029然而,首先,这一描述回头参考在组件域210内实例化的各组成组件。在所示示例中,各组成组件包括组件211到216。每一组件都是特定类的实例。为了象征性地示出这一原理,每一组件都被示为特定形状。例如,在该示例中,组件211被示为正方形。组件212和214被示为三角形,从而指示它们是同一个类的各自实例,该类不是与组件211相同的类。组件213被示为圆形,象征它是与组件211和212不同的类的实例。组件215被示为上底长的梯形,象征它是与组件211到214不同的类的实例。最后,组件216被示为下底长的梯形,象征它是与组件211到215不同的类的实例。0030每一组件包括可能的一个或多个服务导。
28、入以及可能一个或多个服务导出。相对于一组件的“服务导入”是该组件正在请求服务的指示。相对于一组件的“服务导出”是该组件正在提议来提供服务的指示。服务导入和服务导出在图2中各自由从对应组件伸出的臂来表示。服务导入由在其端点处具有杯形的臂来表示。服务导出由在其端点处具有球形的说明书CN101939723ACN101939726A4/10页8臂来表示。在图2的配置中,所有组件211216都是在组件域210内实例化的。然而,这些组件都未连接在一起。此外,各组件连接的方式没有提前于运行时来显式地指定。相反,指定了服务导入和导出。在图2中,使用从字母A到F来为各服务抽象地表示各服务的导入和导出。0031例。
29、如,组件211具有由臂A表示的用于服务B的一个服务导出;以及两个服务导入,一个用于服务A,由臂I表示,并且另一个用于服务A,由臂J表示。组件212具有两个服务导出,一个用于服务A,由臂B表示,并且一个用于服务E,由臂C表示。组件212没有服务导入。组件213具有由臂D表示的用于服务F的一个服务导出;以及两个服务导入,一个用于服务B,由臂K表示,并且另一个用于服务C,由臂M表示。组件214与组件212是相同的类。在一个实施例中,服务导入和服务导出的类型由类来定义。因此,组件214与组件212一样,因为它没有服务导出并且具有两个服务导出,一个用于服务A,由臂F表示,并且一个用于服务E,由臂E表示。。
30、组件215没有服务导入和一个服务导入,其用于服务D,由臂G表示。组件216具有由臂N表示的用于服务D的一个服务导入和由臂H表示的用于服务C的一个服务导出。0032组件域210示出在合成各组件211到216之前的这些组件。“合成”指的是各组件将被如何互连的定义。最终,组件域210中的各组件将定义其互连。然而,这不是在运行组件域210中的各组件所表示的应用程序之前完成的。相反,组件域逻辑220将在运行时定义各组件之间的连接。0033图3示出在合成后的各组件211到216。在一个特定匹配操作中,特定服务的服务导出要与同一特定服务的服务导入相耦合。在图3中,组件212的服务A的服务导出连接到组件211。
31、的服务A的服务导入如通过臂B与臂J相聚所表示的。这表示组件212使用相关接口将服务A提供给组件211。同一象征适用于图3相对于其相应服务所示出的服务导入和导出之间的其他连接。例如,以下臂对被示为连接的,服务A的臂F和I、服务B的臂A和K、服务C的臂H和M、以及服务D的臂G和N。组件212的服E的服务导出由臂C表示未连接到任何服务导入,从而表示该服务导出是潜在的。同一象征适用于臂D和E。0034虽然各组件之间的连接没有提前定义,但指示了各组件的服务导出和导入。服务导出和导入在何处或如何指定是无关紧要的。然而,一个可能的位置可以是在类定义本身中。例如,考虑以下用C代码编写的被称为“CONSUMER。
32、消费者”的类的类定义0035CLASSCONSUMER00360037IMPORT“CONSUMERREPORT”0038IREPORTMYREPORTGET;SET;00390040004100420043在方括号中,类CONSUMER声明其导入被称为“CONSUMERREPORT消费者报告”的服务。方括号的内容不影响C中的编译对象的功能。相反,对该编译类而言,该内容被编写成伴随编译类型或成员的、以不作为编译类型或成员的默认执行的一部分但可以从外部检说明书CN101939723ACN101939726A5/10页9查并操作的方式对该编译类型或成员进行描述的元数据。在该示例中,在要实例化类的对。
33、象时,能以其预编译或后编译形式来引用类定义,以标识遵循该类的特定对象的服务导入。0044在服务导入与服务导出之间的一个示例匹配中,服务名要精确匹配,但也构想了其他匹配规则。以下表示用C表示的类定义,其中该类导出被称为“CONSUMERREPORT”的服务0045CLASSREPORTENVELOPE00460047EXPORT“CONSUMERREPORT”0048IREPORTCONTENTGET;SET00490050005100520053在此,括号中的元数据表达式声明类REPORTENVELOPE报告信封导出“CONSUMERREPORT”服务。例如,在REPORTENVELOPE类的。
34、对象与CONSUMER类的对象相连接时,CONSUMER对象可以从REPORTENVELOPE对象得到报告。0054在该示例中,不管类本身是已编译还是预编译的,都可以对其进行引用以确定特定对象的服务导出和服务导入。在另一实施例中,对象可被配置成提供组件域逻辑可以用来询问各对像以寻找服务导入和导出标识的标识。0055现在将详细描述组件域管理器220的各种机制222229。同样,这些机制可以按功能来划分,并且不表示组件域管理器220中的任何实际对象边界。如以下将提到的,各机制222229中的一些可以偶尔使用通常由系统中提供的底层运行时所提供的实例化机制。该实例化机制具有使用类定义来实例化遵循该类的。
35、组件的能力。0056关联模块222能够将实例化的组件与组件域210进行关联。例如,在图2中,组件211到216被示为在组件域210内相关联,象征它们不仅仅是实例化,而是以它们与组件域210相关联的方式来实例化的。将在运行时对与组件域210相关联的组件进行特定绑定处理。各组件与组件域的关联可以在每一组件的实例化的时刻或在某一稍后时刻进行。0057服务清单机制223对与组件域相关联的组件所导出和导入的服务进行索引。服务清单机制223可以具有用于发现这些服务的机制。例如,在一个实施例中,在实例化特定类的组件时,服务清单机制223可以访问类定义来评估所导入或导出的服务。在另一实施例中,可以将各组件设计。
36、成对发现请求进行响应。例如,各组件可以提供用来将其导出和导入的服务通知给查询实体的应用程序接口。或者,该组件可被设计成在实例化后立即将其服务导入和导出写到特定位置。0058例如,参考图2,服务清单机制可以在概念上维护下表10059组件标识符导出的服务导入的服务211BA,A说明书CN101939723ACN101939726A6/10页10212A,E213FB,C214A,E215D216CD00600061表10062服务清单机制223不必将信息表示成表,但表是用于向读者示出可以维护的信息的类型的有用图示。此外,服务清单机制223可以不知道特定组件所导出或导入的服务的全部。0063嵌套组件。
37、展开机制224评估组件域中的一组件是否在其中嵌套了组件。例如,图4表示图2的组件之一即,组件215在箭头410所表示的展开之前包括嵌套组件的分层结构。具体而言,图4中的组件215在展开之前包括两个子组件401和402。这些子组件之一401在展开之前包括其自己的子组件411和412。0064嵌套组件展开机制224被配置成发现嵌套组件,并将它们展开以便嵌套组件所导出和导入的服务也对绑定操作可见。例如,在展开410之后,示出了各嵌套组件401、402、411以及412而其导出的各个服务在组件411的情况下是服务A和E被示为对绑定可见。另外,导入的各服务组件401的服务A、组件402的服务B、以及组件。
38、412的服务C被示为对绑定可见。因此,在展开后,这些嵌套组件被服务清单机制223所识别。0065匹配机制225实际地对绑定这些组件的请求进行响应。为了做到这一点,匹配机制225遵循一组匹配规则226。匹配机制225遵循匹配规则226以进行匹配并将服务导入绑定到服务导出。例如,在图3中,组件域210中的各个组件被示为绑定在一起。0066匹配规则可以是默认的一组隐式匹配规则,或可以存在超控默认匹配规则的其他匹配规则。例如,可能默认服务导入到服务导出的匹配是通过寻找精确的服务名匹配来进行的。例如,在上述类定义示例中,类“CONSUMER”具有被称为“CONSUMERREPORT”的服务导入。另一方面。
39、,类“REPORTENVELOPE”具有完全相同的名称“CONSUMERREPORT”的服务导出。因此,根据精确服务名匹配规则,REPORTENVELOPE的实例的服务导出可以绑定到CONSUMER的实例的服务导入。0067然而,可以应用其他服务匹配规则。例如,在一些匹配规则中可以忽略大小写。在其他规则中,可能存在被认为彼此匹配的一群服务名。例如,可能存在意大利语的服务名、法语的服务名等,它们各自可被认为是匹配的。根据另一组匹配规则,如果服务导入或导出不是由名称来指定的,则匹配机制224实际上可以在结构上对照服务导出的成员名、类型和参数来评估服务导入的成员名、类型和参数。0068服务匹配机制2。
40、25还可以采取步骤以不仅在逻辑上匹配各组件,还可至少对服务导入和导出的实际功能绑定有所贡献。在一个实施例中,一旦服务匹配机制225找到匹配,说明书CN101939723ACN101939726A7/10页11则服务匹配机制225可以从服务导出组件获取所请求的服务,并将该服务提供给服务导入组件。0069在另一实施例中,服务匹配机制225可以向服务导入组件提供一句柄数据结构。服务导入机制随后可以使用该句柄来完成与服务导出机制的绑定。服务匹配机制可以任选地允许服务导入机制接受或拒绝该匹配。例如,服务导入组件可以通知服务匹配机制该匹配是否是可接受的,这之后将发生实际绑定。如果服务未被认为是可接受的,可。
41、能是服务匹配机制找到了备份匹配等,直至找到可接受匹配并被服务导入组件接受为止。0070例如,句柄数据结构可包括服务导入组件可以用来在其导入与匹配组件所提供的导出之间执行绑定操作的工厂。该句柄还可包括包含服务导入组件可以用来确定是否要触发工厂来执行绑定的信息的元数据此后称为“选择元数据”。在一个实施例中,服务导入组件可以不使用选择元数据,而可改为使用工厂来自动地接受绑定。然而,服务导入组件可以另选地使用选择元数据来评估所提议的导出对服务导入组件而言是否是可接受的。如果服务导入组件选择接受绑定,则服务导入组件可以使用工厂来触发该系统完成绑定。0071在其他情况下,可存在到特定服务导入的多个可能的服。
42、务导出匹配。在这种情况下,句柄可包括用于每一可能的服务导出的工厂和选择元数据。服务导入组件随后可以使用该元数据来不选择服务导出中的任何一个或可能选择服务导出中的一子集来进行导入。服务导入组件随后可以使用所选服务导出的对应工厂来完成与所选服务导出中的每一个的绑定。0072例如,如以上示例中,假定CONSUMER组件要导入名为“CONSUMERREPORT”的服务。如果存在提供名为“CONSUMERREPORT”的服务的多个组件,则可以对CONSUMER组件给予每一可能的服务导出匹配的工厂和选择元数据。选择元数据可包括例如1生成该CONSUMERREPORT的日期,以及2与CONSUMERREPO。
43、RT有关的产品类的标识。如果CONSUMER组件只对名为“CONSUMERREPORT”的一个服务导出感兴趣,则CONSUMER组件可以使用选择元数据来标识最近生成的并且指示与CONSUMER组件最相关的产品类的CONSUMERREPORT服务导出。0073在一些情况下,组件域中可能不存在提供与特定服务导入相匹配的服务导出的组件。在这种情况下,绑定将仍然可能执行。现在将描述处理其中最初不能对特定服务导入执行绑定的情况的多种方式。0074在一种情况下,服务导入可具有相关联的“重要性”属性等,其指定对总体应用程序的功能而言满足该服务导入有多紧急。如果重要性高,则应当在某一位置找到服务导出。然而,如。
44、果重要性低,则可能可以在根本不绑定该服务的情况下通过该应用程序。可存在各种中间重要性级别,这可以管控绑定操作将在什么程度上尝试寻找服务导出。0075在一个实施例中,如果在组件域内没有找到特定服务导入的服务导出,抽象机制227可能从另一组件域中找出另一组件。因此,多个组件域可能在单个计算系统上运行,或可由该计算系统通过网络访问。在这种情况下,抽象机制227可以咨询那些其他组件域服务清单机制或可能编目录机制228,直至找到提供与要绑定的服务导入相对应的服务导出的组件。在一个实施例中,抽象机制227可以将本身模拟成提供服务导出的组件。服务导入因而可以绑定到抽象机制227本身。当服务导入组件对服务的抽。
45、象机制227进行调用时,抽象机制227可以与外部组件进行接口以执行所请求的服务。说明书CN101939723ACN101939726A8/10页120076在一个实施例中,该组件域可以与多个相关组件域相关联。抽象机制227可以搜索所有这些相关组件域以寻找适当的服务导出。在其他实施例中,抽象机制227可以只搜索相关组件域中的一些。例如,如果组件域210是组件域的分层结构树中的节点,则抽象机制227可能只搜索表示祖先家系中的节点的组件域,而非搜索同辈组件域。抽象组件227因而可以对多个不同服务导出的服务导出进行抽象,同时执行与各外部组件进行接口以执行该服务所必需的底层处理。0077作为替换或补充,。
46、如果组件域内的已经实例化的组件不能满足服务导入,则编目录机制228可以使用目录229来找出当前未被实例化的提供特定服务导出的组件。例如,目录229可包含各个类定义,每一个类定义都具有描述该类的对象所导出的服务的元数据。基于对相关联的元数据的评估,编目录机制228可以找出提供所需服务导出的特定类定义。编目录机制228随后可以选择该类的要在组件域210内实例化的外部组件。或者,可以向导入该服务的组件提供描述被编目的类所导出的服务的元数据,以使得导入组件可以作出其自己的关于所导出的服务是否令人满意的决定。如果其是令人满意的,则导入该服务的组件可以使该类的一组件被实例化。例如,还可以向导入该服务的组件。
47、提供访问允许实例化导出该服务的组件的工厂的能力。0078在描述了图2的组件域逻辑220的各个功能之后,现在将参考图5到7来描述各个过程。0079图5示出了用于合成程序的各组件的方法500的流程图。在创建组件域动作501后,实例化组件的初始集合并将其与该组件域相关联动作502。例如,参考图2,可以用相关联组件域逻辑220的一些或全部来创建组件域210。组件域中的组件的初始集合可以像一个一样少,但可以多得多而没有限制。在图2的示例中,组件域中存在六个组件211到216。然而,组件的初始集合中的组件的数量对本发明的更宽泛原理而言并不重要。组件的初始集合中的每一组件以及应在该组件域中实例化的任何后续组。
48、件都与该组件域相关联,以便使这些组件中的任一个所导入的服务如果有的话和所导出的服务如果有的话对该组件域可见。0080作为这一实例化过程的一部分,展开嵌套组件动作503。图6示出了用于实例化组件的方法600的流程图。首先实例化组件本身动作601。如果该组件不包含任何嵌套组件判定框602中的“否”,则不进行展开。另一方面,如果存在嵌套组件判定框602中的“是”,则展开这些嵌套组件动作603,以便这些嵌套组件也在以下程度上对该组件域可见使该嵌套组件所导入的服务如果有的话对该组件域可见,以及使该嵌套组件所导出的服务如果有的话对该组件域可见。这一展开的示例参考图4来示出。这一展开可以在组件域中实例化具有。
49、一个或多个嵌套组件的组件的任何时候来执行。作为替换或补充,可以在绑定每次进行迭代时在预定时间展开这些组件。例如,在图3中,嵌套组件的展开在每一次迭代的开始时发生。0081返回图5,一旦展开了所有组件,则组件域逻辑可任选地通知组件的初始集合的至少一些组件域逻辑将轮询组件以寻找所导出的服务动作504。组件域可以通过采取其被编程来采取的任何动作来准备就其服务导出而被轮询来进行响应。例如,组件可以通过程序将另一组件实例化到组件域中。该组件能以其他方式将其状态置于适当的准备就绪以接收服务导出请求。说明书CN101939723ACN101939726A9/10页130082接着,组件域逻辑轮询组件域中的每一组件以寻找该组件所提供的服务导出动作505。从这一列表中,可以制定服务导出数据。接着,组件域逻辑可以轮询每一组件以寻找服务导入,并可以用服务导出列表来满足这些服务导入中的每一个动作506。如以下参考图7进一步详细地解释的,如果未找到满足服务导入的服务导出,则组件域逻辑可以搜索目录来寻找提供该服务的类,并且随后在适当的情况下使该编目类的组件被实例化。0083如果存在可满足特定服务导入的多个服务导出,并且多个导出对该服务导入而言是可接受的,则使所有这些服务导出作为服务导出的集合来对该服务导入可用。还存在以下情况存在可满足服务导入的比该服务导入所想要的更多的服务导出。例如,可能存在。