在前面的文章中,我们了解了使用 WebSphere Integration Developer 构建的各种面向服务的组件类型,包括业务状态机、业务流程和人工任务。我们介绍了整个编程模型和各种支持工具,如可视化代码段和映射。我们还探讨了 WebSphere Integration Developer 提供的随需应变的功能,例如,如何使用业务规则才能使运行的应用程序更具动态性和灵活性,以便您可以处理不断变化的业务条件,而无需重新部署应用程序。
简单地说,您可以标识主要业务决策,为决策创建业务规则,最后在运行时可以配置业务决策。例如,如果某客户是您最好的客户之一,也许您希望向该客户提供 20% 的折扣。也许,某一天您心情不好,希望将折扣降到 10%。WebSphere Integration Developer 中的业务规则可以很方便地适用这种情况,或者调整其他更紧急的业务需求。
随需应变问题的下一部分是选择器。
选择器是一种分派模式,用于动态确定在运行时调用哪一个组件的实现。与规则组一样,选择器拥有日期范围条目、选择条件和缺省目标。您在选择器中选择的目标与为规则组中选择的相同。也就是说,当您调用某个选择器时,它使用选择条件和日期范围条目来选择目标。目标可以是任何面向服务的组件。
选择器和规则组之间的一个主要差异是选择器的目标可以是任何服务组件,而规则组中的目标只能是规则集或决策表。换句话说,选择器在运行时可以将服务调用动态地重新路由到任何其他组件。
您可以从任何面向服务的组件调用选择器。选择器的工作是使用动态信息确定应调用哪一个组件来完成工作。目标组件的集合也是可配置的,并允许您在运行时提供其他目标。例如,假设在新年的开始,您希望将应用程序切换到新的子系统,以便于目录管理。选择器允许您提供两个目标,并指示新的目标在 1 月 1 日生效。
作为示例,我们将采用下面的业务流程(如图 1 所示)。此业务流程用于批准贷款申请,并且只有两个步骤:
第 1 步:调用服务,以检查信贷分类。
第 2 步:调用另一个服务,以确定是否应批准贷款。
图 1:调用合作伙伴服务的业务流程
在组装关系图中,两个调用活动硬连接到目标实现。我们假定业务流程调用公司 A 提供的低成本信贷审核服务。如果公司 A 提供的服务在某一段时间内不可用,则会发生什么情况呢?
选择器可以帮助您解决此类情况。正如我们前面提到的,选择器可以决定调用哪一个实现。在下一部分中,您将了解如何使用选择器,将服务调用的目标从公司 A 更改到另一家成本更低、又可以提供全天候服务的公司。
选择器的基本用途是进行简单的分派,这意味着您可以将服务调用的目标从一个组件或导入动态地重新路由到或导入另一个组件。我们让业务流程中的
Invoke Credit Checking Service
活动立即调用选择器,而不是静态地连接到公司 A 服务。这与下面的情况类似:
图 2:将选择器用于简单的分派
Invoke Credit Checking Service
活动调用选择器,决定在运行时调用哪一个实现。选择器使用选择条件来选择要调用的期望服务实现的目标。选择条件可以是当前日期、从业务对象中获取日期的 XPath 表达式或返回日期的 Java 代码片段。就像规则组一样,每个目标都有一个条目来指定此目标适用的日期范围。如果从选择条件返回的日期在日期范围条目的边界内,则选择器使用对应的目标。
日期范围条目是可选的。事实上,如果没有提供日期范围条目,或者没有匹配选择条件的日期,则会调用缺省目标。务必记住,如果未指定缺省目标并且没有匹配选择条件的日期范围条目,则会引发异常。因此,最好提供缺省目标。
在图 2 中,如果选择条件是 2006 年 10 月中的某一日期,则选择器选择公司 B 提供的服务实现。如果选择条件是 2006 年 11 月中的某一日期,则选择器将运行公司 C 提供的服务。对于所有其他情况,选择器运行公司 A 提供的服务。
图 3:使用选择器调用相同模块中的组件或不同模块中的导出
选择器的目标可以是相同模块的组装关系图中的组件,或另一个模块的导出。例如,图 3 显示了连接到 CreditCheckSelector 的 LoanProcess 组件。选择器可以将服务调用路由到模块 A 中的 CreditCheck 组件或模块 B 中的 Module_B_Export 组件。
请记住,选择器的接口操作必须匹配目标的所有接口操作。换句话说,与选择器本身相比,您选择的目标不能具有不同操作名称、输入或输出的接口。如果您尝试使用操作名称不匹配的选择器,那么将收到 ServiceRuntimeException,指示不能解析操作名称。如果输入或输出不匹配(例如,目标接口具有不同的输入名称或不同的输入类型),那么您将收到 SelectorException,指示组件不支持该操作。
如果您不能将选择器的接口与目标的接口匹配,那么您可以使用带有接口映射(我们在本系列文章中的第 7 篇文章中对它进行了介绍)的选择器,以便在选择器中将接口映射用作目标,从一个接口转换到另一个接口。然后,选择器可以调用接口映射,该接口映射接着调用实际的服务实现。
例如,图 4 显示了可以从两个 Web 服务导入选择的选择器,每个 Web 服务导入具有不同的接口。为协调每个接口之间的差异,选择器将对应的接口映射设置为目标,而不是将导入设置为目标。然后,LoanApplicationProcess 组件可以使用 CreditCheck 接口进行信贷审核服务调用,而无需担心使用哪一个导入或导入的接口。
图 4:将接口映射与选择器一起使用
我们向您介绍了如何在简单的分派场景中使用选择器。如果您的公司将终止与公司 A 之间的契约,并且将其替换为与公司 B 之间的契约,该怎么办呢?在这种情况下,选择器也可以提供帮助。
您可以在运行时更新或修改选择器及其对应的日期范围的目标,而无需重新部署初始应用程序。这意味着,在前一个示例中,您不必重新部署业务流程,以修改您希望通过选择器分派的组件。
使用 WebSphere Process Server 管理控制台,您可以将现有服务实现替换为另一个服务实现,添加具有完整日期范围信息的新目标,或删除目标。
图 5 显示了您可以通过管理控制台在运行时执行的操作示例,其中包括:
- 替换现有组件(公司 Z 作为新缺省值)
- 更改日期范围(将公司 B 移至十二月)
- 添加新的组件(公司 X 在十月)
图 5:使用选择器动态地更改目标
在运行时更新选择器之后,您可以有选择地使用管理控制台中的导出功能将更改导出到开发工作台。导出功能将包含选择器的模块项目导出到项目交换文件,然后您可以将其导入到 WebSphere Integration Developer 工作台。
在本文的稍后部分中,您将通过创建执行简单分派的选择器来尝试此操作。然后,将使用管理控制台更新选择器的目标。之后,将部署新的模块项目,并使用选择器在新的模块中调用服务。
本部分描述在创建选择器时涉及的主要步骤。在下一部分中,您将有机会亲自构建一个选择器。
创建选择器类似于在 WebSphere Integration Developer 中创建任何其他组件。您先选择选择器支持的接口。通常,您可以根据选择器分派给的目标选择接口。请记住,选择器的接口操作必须完全匹配目标的接口操作。这包括其类型必须完全匹配的参数。
第一次创建选择器时,它会在图形编辑器中打开(如图 6 所示),其中,您可以指定详细信息。
图 6:创建选择器
首先,您需要决定使用下面三个选择条件中的哪一个:
- 当前日期
- XPath 表达式
- 可视化代码片段或 Java 表达式。
如果选择当前日期,那么当前日期位于目标的起始日期到终止日期范围中时,选择器会选择一个目标。如果您选择 XPath,则需要进一步指定从输入变量返回日期的 XPath 表达式。如果选择 Java 表达式,则需要提供 Java 代码,它可以是从输入变量返回日期对象的可视化代码片段。
决定使用哪一个选择条件后,就可以添加目标了。图 7 显示了缺省目标的选择。正如前面提到的,最好的做法是始终提供缺省目标。在单击缺省目标计算单元时,它会显示一个可供选择的可用目标的列表。该列表包括相同模块的组件或来自其他模块的导出。
图 7:选择缺省目标
最后一步是提供仅适用于特定日期范围的目标。此外,在开发过程中您可以将此部分留空,并在部署之后在管理控制台中修改它。您也可以在运行时更改缺省目标。
添加日期选择条目后,您可以从可用目标的列表中选择目标,如图 8 所示。向日期选择表添加多少行没有任何限制。
图 8:添加其他目标
与组装关系图中的其他组件不同,您不能将选择器连接到其他组件或导入。因为没有静态绑定选择器中的目标,并且它们在其他模块中可能有目标,所以无需将选择器连接到任何组件。
我们介绍了理论,现在是学习如何构建选择器的时候了。在本部分中,您将把选择器添加到现有应用程序中。如图 9 所示,应用程序由调用信用审核服务的贷款处理模块组成。我们在下载文件中提供了应用程序的存根,其中包括您需要的接口和业务对象,因此您可以集中精力分析本文中介绍的内容。现有应用程序会调用静态服务实现,因此通过引入选择器可以使应用程序变得更灵活。
在下载了应用程序,并将其导入到工作台之后,您会看到四个模块和一个库。图 9 显示的 LoanProcess 业务流程驻留在 LoanProcess_Module 中,它静态调用 Company A 服务。其他模块是您要为选择器创建的目标。
图 9:现有 LoanProcess 模块
在练习的第一部分中,您删除了允许对公司 A 进行服务调用的静态连接,并将其替换为选择器,该选择器根据 XPath 选择条件将调用路由到公司 A、B 或 C,如图 10 所示:
图 10:更新的 LoanProcess 模块
在练习的第二部分中,探讨了管理控制台中的选择器功能。学习了如何替换现有目标和添加新的目标,而无需重新部署初始 LoanProcess 应用程序。
在开始练习之前,您需要下载并导入包含示例应用程序的项目交换文件。
-
请从本文结尾处的下载部分下载
beginningnodules.zip文件。 - 在工作台中,选择 File - Import - Project Interchange,然后单击 Next。
-
浏览到刚下载的
beginningnodules.zip文件,并单击 Open。 -
选中 Select All,然后单击 Finish。所导入的模块在 Business Integration 视图中打开,而且在生成模块时,您可以在工作台右下角看到
Building workspace消息。等待工作区完成生成过程。
在练习 1 中,您将创建一个具有一个缺省目标和两个日期范围目标的选择器。然后,将更改 LoanProcess 业务流程中的调用活动,将最初调用公司 A 导入改为调用新创建的选择器。最后,将部署并运行应用程序。
在此步骤中,您将为选择器创建一个新的模块。模块中使用的接口已存在于 CommonLibrary 中。
-
在 Business Integration 视图中单击右键,并选择 New - Module。将其命名为
SelectorModule,然后单击 Finish。 - 双击您刚才创建的 SelectorModule。打开依赖关系编辑器,以便指定您希望在模块中包括哪个库。
- 单击 Add,从列表中选择 CommonLibrary,然后单击 OK。
- 保存依赖关系编辑器,然后关闭它。
选择器使用的接口已经位于 CommonLibrary 中。接口有一个操作 checkCredit 和类型为 LoanData 的输入和输出,如图 11 所示:
图 11:选择器接口
- 在 Business Integration 视图,展开 SelectorModule。在 Business Logic 下,右键单击 Selectors,然后选择 New - Selector。
-
输入
CreditSelector作为新选择器的名称,然后单击 Next。 - 从接口列表中选择 SelectorInterface。
- 单击 Finish。此时会打开选择器编辑器。
现在,您可以定义选择器,以便将服务调用路由到正确的组件。在接下来的步骤中,您将指定选择条件,它是 applyDate 变量的值:
- 在选择器编辑器中,在左面板的 Interfaces 部分中选择 checkCredit。
- 在 Selection Criteria 计算单元中,单击 Current date,然后从可用选择条件的列表中选择 XPath。
- 在 Parameter 计算单元中,单击 Enter Parameter,然后从可用参数(在本示例中只有一个)的列表中选择 input1。
- 在 XPath 计算单元中,单击 Enter Parameter,然后选择 applyDate 作为 XPath 表达式。
选择条件现在应该出现,如图 12 所示。在以下步骤中,您将根据前面步骤中指定的 applyDate XPath 值指定要使用的目标。
- 在 Default Destination 计算单元中,单击 Enter SCA Destination,然后从目标列表中选择 Company_A_Component_Export。
-
要添加日期选择条目,请单击 Add Date Selection Entry 按钮(
)。目标列表将显示新的目标。
-
将目标的 Start Date 更改为
Oct 1, 2006,将 End Date 更改为Oct 31, 2006。注意,您可以键入日期,或单击计算单元左边的日期选择按钮(
),以便从日历中选择日期。
- 单击 Enter SCA Destination,并选择 Company_B_ComponentRG_Export。
-
按照刚才使用的步骤,创建另一个目标,使其 Start Date 为
Nov 1, 2006,End Date 为Nov 30, 2006。对目标选择 Company_C_ComponentExport。 - 保存文件。最终的选择器应该出现,如图 12 所示。
图 12:选择器定义
要使用您刚才创建的选择器,您需要将其添加到选择器模块的组装关系图。然后,要使选择器对其他模块可用,您需要创建导出。您可以向导出提供 SCA 绑定,因为只有应用程序的其他模块(而不是外部客户机)才能调用它。
- 在 Business Integration 视图中展开 SelectorModule,并双击 SelectorModule,打开 SelectorModule 组装关系图。
- 将 CreditSelector 从 Business Integration 视图中的 BusinessLogic - Selectors 目录拖放到组装关系图。
- 在组装关系图中,右键单击 CreditSelector 组件,并选择 Export - SCA Binding。
- 保存组装关系图内容。
图 13:选择器模块
当您按照以下步骤打开 LoanProcess_Module 的组装关系图时,您将看到 LoanProcess 与一个导入连接,该导入通过 SCA 绑定连接到公司 A 的导出。如果您打开 LoanProcess 业务流程(双击它),并选择 Invoke Credit Checking Service 调用活动,则将看到该调用活动包含公司 A 接口的合作伙伴链接。
在本部分中,通过修改业务流程的调用活动,可使您的应用程序更灵活,以便它可以调用选择器,而不是指定的组件。
-
通过展开 LoanProcess_Module,并双击 LoanProcess_module,打开
LoanProcess_Module组装编辑器。 -
通过在 LoanProcess_Module 组装关系图中双击 LoanProcess 组件,打开
LoanProcess业务流程。 - 在右边的面板中,选择 Partner,然后切换到 Properties 视图,并选择 Details 选项卡。
- 单击 Browse,从接口的列表中选择 SelectorInterface,然后单击 OK。
- 在业务流程编辑器中,选择 Invoke Credit Checking Service 活动,然后在 Properties 视图的 Details 选项卡中,为操作选择 checkCredit。
-
分别将 input1 和 output1 变量设置为
Input1和Output1。现在,您的业务流程应该与图 14 类似: - 保存文件。
图 14:更新的业务流程
Invoke Credit Checking Service 的属性详细信息现在应该如图 14 所示。请注意,LoanProcess_Module 旁边的 Business Integration 视图中有一个红色的“x”。因为您在业务流程中更改了合作伙伴接口,所以您需要按照以下步骤修改组装编辑器中的相应组件引用:
-
打开 LoanProcess_Module 组装关系图,然后选择 LoanProcess 组件的组件引用。
(提示:在您完成这些步骤之前,组件引用也有一个红色的“x”。)图 15 显示了选择的引用。
图 15:LoanProcess_Module 组装关系图
- 在 Properties 视图的 Details 选项卡中,展开 References - Partner - CompanyA_Interface。
-
在 Interface 旁边单击 Change,并从接口的列表中选择 SelectorInterface。
提示:在 Change Interface 对话框中,上一个接口可能已选择为过滤器,因此您可能需要从过滤器中清除该接口,才能在列表中看到其他接口。 -
删除从
LoanProcess引用到CompanyA_Component_Import的连接。 - 右键单击 LoanProcess,并选择 Wire References to New - Imports。将会创建 Partner 导入。
- 右键单击 Partner 导入,并选择 Generate Binding - SCA Binding。
- 在 Partner 导入的 Properties 视图的 Binding 选项卡中,单击 Browse,并选择 CreditSelectorExport。
- 单击 OK,保存组装关系图。
因为组件引用和流程合作伙伴匹配,所以错误标记会消失。模块组装将会出现,如图 15 所示。现在,您已准备好测试新的选择器了。
在此步骤中,您将使用集成测试客户机来调用 LoanProcess 组件的 checkCredit 操作。测试客户机将启动服务器(如果需要),并将模块部署到该服务器。但是,让我们后退一步,探讨一下现有测试客户机的更多功能。
通常,通过在 Business Integration 视图中右键单击模块,或右键单击模块组装关系图并选择 Test Module 来测试模块。不过,在本例中,我们要测试的模块将对其他模块进行服务调用,所以必须首先将其他模块部署到服务器。
在 Servers 视图中,右键单击该服务器并使用 Add and remove projects 菜单来选择要部署哪些模块。您还可以使用测试客户机来控制部署哪些模块。当您需要模拟或监视其他模块中的服务调用时,请使用测试客户机来部署。为此,在 Business Integration 视图中,请选择您要测试的每个模块(选择每个模块时,请按下 Ctrl),然后右键单击所选的任何模块,并选择 Test - Test Module。现在,当您开始测试时,将所选的每个模块部署到服务器,并且在调用其他模块时监视服务调用。您还可以在测试客户机的 Configurations 选项卡中查看每个模块,这意味着您可以添加模拟器,或者启用或禁用监视器。
现在我们开始测试:
-
按下 Ctrl,并选择 Company_A_Module、Company_B_Module、Company_C_Module、LoanProcess_Module 和 SelectorModule,如图 16 所示。
图 16:要测试的模块
- 右键单击选择的模块,并选择 Test - Test Module。
-
在打开的测试客户机中,确保为模块选择 LoanProcess_Module,为组件选择 LoanProcess,如图 17 所示:
图 17:测试 LoanProcess 组件
-
在 applyDate 中输入
2006-10-09,在 name 中输入任意内容,并在 amount 中输入800000。 - 单击 Continue,然后在打开的 Deployment Location 对话框中,单击 Finish。
- 等待服务器启动和模块部署。
选择器使用 applyDate 来决定运行哪一个组件。因为日期位于您指定的开始到结束日期(2006 年 10 月 1 日和 2006 年 10 月 31 日)范围之内,所以调用 Company_B_Component。
图 18:测试结果
现在,让我们尝试一下不同的日期。使用 2006-11-9 会发生什么情况?在本例中,选择器调用公司 C 的服务。
假设您的业务环境已经改进,并需要为 CreditSelector. 更改缺省目标。在练习 2 中,您将使用管理控制台更改选择器的缺省目标。在提交更改后,再次测试 LoanProcess。
- 您可以使用管理控制台更改选择器条件。在 Servers 视图中,右键单击该服务器并选择 Run Administrative Console。
- 在登录页中,必须指定用户名,才能更改选择器中的内容,即使您没有启用安全。 请键入用户名,并登录。
- 在导航部分中,展开 Servers,单击 Application servers,然后单击 server1。
- 在 server1 编辑器页面中,向下滚动到 Business Integration 部分,并单击 Selectors 链接,如图 19 所示:
图 19:在运行时更改选择器属性
-
在选择器页面中,您会看到当前系统中所有的选择器。单击 CreditSelector(如图 20 所示),它是您先前创建的选择器:
图 20:选择的 CreditSelector
-
单击 checkCredit 链接。您会看到此选择器的日期条目,如图 21 所示:
图 21:CreditSelector 的属性
- 要修改选择器,请单击 default 链接。
-
在 Target Components 列表中,选择 Exported Target: Company_B_Module Company_B_ComponentRG_Export,并单击 OK。
图 22:更改选择器的缺省目标
- 要提交更改,请选择缺省选择器旁边的复选框,然后单击 Commit。您将在管理控制台的顶部看到一条消息,提醒您选择提交,以便使更改生效。
现在,让我们再次运行 LoanProcess。要调用缺省目标,请使用日期为 2002-01-01 的 applyDate。如图 23 所示,您将看到调用了公司 B 的服务。
图 23:测试缺省目标更改
现在,让我们假设业务环境已经进一步改进,并且您需要将缺省目标从公司 A 更改为公司 X。但是,您还没有将公司 X 的模块部署到服务器。在此步骤中,您可以将新模块公司 X 部署到服务器,然后使用管理控制台指定何时应将此新模块用作目标。提交更改后,您将再次测试 LoanProcess。
- 右键单击服务器并选择 Add and remove projects。
- 在 Add and Remove Projects 对话框中,从可用的项目列表中选择 Company_X_ModuleApp,然后单击 Add。
- 单击 Finish,等待模块部署。
- 按照前一部分中的步骤,在管理控制台中导航到 CreditSelector,然后单击 checkCredit。
- 要创建新的日期选择条目,请单击 New。
-
将开始日期修改为
December 1, 2006,将结束日期修改为December 31, 2006。 - 将 Target Components 更改为 Exported Target: Company_X_Module CompanyX_Component_Export。
- 现在,形式应与图 24 类似。单击 OK。
图 24:添加新的目标
-
选中第一个日期条目旁边的复选框,并单击 Commit,如图 25 所示:
图 25:提交新的选择器目标
如果您这次使用日期为 2006-12-03 的 applyDate 再次运行 LoanProcess,您将看到图 26 中所示的结果。
图 26:选择新目标的结果
本文是 WebSphere Integration Developer 指导教程系列文章的最后一部分。在这些系列文章中,我们通过介绍基本概念(即编程模型、业务对象、接口、组件和引用),向您说明了如何启动和运行 WebSphere Integration Developer。我们还向您介绍了 WebSphere Integration Developer 提供的各个组件实现类型,即业务状态机、业务流程和人工任务。另外,我们还了解了各种支持工具,如接口映射和可视化代码片段。我们希望通过此系列文章帮助您了解如何使用工具,并希望您现在亲自部署自已的应用程序,使您的业务更加随需应变。
作者非常感谢 Stephanie Parkin、Laura Gardash、Catherine Hamilton 和 Donna Sutarno,他们对本系列文章提供了非常有价值的帮助。
| 描述 | 名字 | 大小 | 下载方法 |
|---|---|---|---|
| MappingExample module with artifacts and utilities | beginningmodules.zip | 73 KB | FTP |
| Complete MappingExample module | completedapplication.zip | 85 KB | FTP |
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
- WebSphere Integration Developer 指导教程——第 1 部分:WebSphere Integration Developer 概览
- WebSphere Integration Developer 指导教程——第 2 部分:使用 WebSphere Integration Developer 进行 SOA 开发
- WebSphere Integration Developer 指导教程——第 3 部分:构建面向服务的简单应用程序
- WebSphere Integration Developer 指导教程——第 4 部分:在面向服务的应用程序中利用可视化代码片段和业务状态机
- WebSphere Integration Developer 指导教程——第 5 部分:面向服务的世界中的业务流程
- WebSphere Integration Developer 指导教程——第 6 部分:使用动态业务规则来变得更加随需应变
- WebSphere Integration Developer 指导教程——第 7 部分:接口映射、业务对象映射和人工任务
- Creating WebSphere Process Server Custom Selectors with WebSphere Integration Developer
- Websphere Process Server 关系服务: 第 1 部分:静态关系
- Websphere Process Server 关系服务: 第 2 部分:动态关系
- Installing and starting Business Process Choreographer Explorer
- XML Path Language (XPath)
- Business Process Choreographer Samples.(Select Human Task Features)
- WebSphere Process Server V6.0 Business Process Choreographer Programming Model.(Section 6.3 Human Task Editor)
- 用于 Web 服务的业务流程执行语言(1.1 版)
- Business Process with BPEL4WS: Understanding BPEL4WS
- WebSphere Integration Developer 产品信息
- WebSphere Process Server 产品信息
- WebSphere Process Server:IBM 为 SOA 提供的新基础
- Build a Hello World SOA application
- 服务组件体系结构
- Common Event Infrastructure
- developerWorks:WebSphere Process Server 和 WebSphere Integration Developer 资源
- developerWorks:WebSphere Business Integration 专区
- developerWorks:WebSphere 开发工具专区
- 专家访谈:WebSphere Integration Developer
获得产品和技术
讨论

Jane Fung 是 IBM Canada Ltd 的一名高级软件开发人员,她负责开发 Business Process Execution Language (BPEL) 和 WebSphere Integration Developer 中的 Business Rules 调试工具。在此之前,她曾担任 WebSphere Studio Technical Support 团队的负责人。

Greg Adams 是优秀的 Eclipse 平台中用户界面首席架构师,最近又担任了核心 WebSphere Business Integration Tools (包括 WebSphere Studio Application Developer Integration Edition 和 WebSphere Integration Developer)的首席架构师和开发负责人。Greg 领导了 IBM 的第一个完整的面向服务的体系结构 (SOA) 工具组和第一个支持 Business Process Editor 的 BPEL4WS 标准的交付,这两个项目都是 IBM 的随需应变策略中非常关键的交付。

