ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 在 WebSphere Process Server 中进行版本管理

在 WebSphere Process Server 中进行版本管理

原创 Linux操作系统 作者:CloudSpace 时间:2009-04-01 13:19:29 0 删除 编辑
IT 架构师和集成开发人员需要设计基于业务流程的应用程序,这样的应用程序能够适应不断变化的环境和将来的业务需求。本文向您介绍如何构建基于 IBM® WebSphere® Integration Developer V6.1 和 WebSphere Process Server V6.1 最佳实践的业务流程和人工任务版本。

为什么需要版本管理?

业务流程随时间的推移而发展。它们需要反映不断更改的环境和业务需求。这些更改可能是业务驱动的更改,例如法律法规更改,或者业务流程的优化。此外,技术驱动的更改会影响基于业务流程的应用程序,例如,对流程非常重要的某个服务被替换为另一个服务。

基于业务流程的应用程序非常独特,因为它们可以包括长时间运行的实例。这些业务流程和人工任务实例可以运行数周、数月甚至数年。这对引入已发展的业务流程或人工任务施加了特定的要求,因为它们的实例可能仍在运行。这些实例需要使用最初创建和启动时的版本来运行完成。但是,业务可能要求基于新版本的业务流程定义创建新的实例。因此,新版本和旧版本需要共存。

版本管理示例

下面的示例演示了处理旅行审批和登记的业务流程。顶级流程 TravelApprovalAndBooking 控制总体处理,子流程 TravelAvailablitiyAndCosts 确定航班、酒店和出租车的成本及可用性,另一个子流程 TravelBooking 处理登记工作。


图 1. 旅行审批和登记流程(第一版)
旅行审批

流程启动 流程在员工输入商务旅行数据时启动

调用子流程 调用一个子流程来评估旅行请求的可用性和成本

经理需要审批请求 取决于成本,经理需要对旅行请求进行审批。这是使用一个内联人工任务来实现的

调用另一个子流程 如果旅行请求获得批准,则调用另一个子流程来登记旅行安排

返回旅行信息 将旅行信息(航班号、酒店名称和出租车公司)返回给员工

由于旅行登记指导原则方面的更改,必须对旅行登记和审批流程进行更新。需要一个附加的审批步骤,以便能够拒绝针对不安全国家/地区的旅行请求。


图 2. 具有附加审批步骤的旅行审批和登记流程(第二版)
旅行审批和登记

该更新是通过引入新版本的旅行审批和登记流程来实现的。新版本包括一个用于额外审批步骤的附加人工任务活动。

下面几个部分将介绍版本管理的概念,以及如何在 WebSphere Process Server 中开发新版本的业务流程和人工任务。这些部分还将描述在使用版本管理时应该考虑的最佳实践。


 

版本管理概念

本部分介绍一些了解版本管理所需要知道的重要概念。

SCA 组件

服务组件体系结构(Service Component Architecture,SCA) 是面向服务的体系结构(service oriented architecture,SOA)的关键。此类体系结构的基本单元是 SCA 组件。SCA 组件是通过其连接到其他服务的接口和引用来进行描述的 SOA 服务。其实现随组件类型而异。业务流程和人工任务就是其中两种组件类型。业务流程 组件 是使用业务流程定义(BPEL 文件)来实现的,人工任务组件 是使用人工任务定义(TEL 文件)来实现的。

模板和实例

流程模板是在 WebSphere Integration Developer 中指定并部署到 WebSphere Process Server 的流程组件的运行时表示形式。类似地,任务模板是部署到运行时环境的人工任务组件的表示形式。当业务流程或人工任务启动时,将基于特定的模板创建实例。此模板描述了如何执行该实例。

模板生命周期

流程模板或任务模板的生命周期如图 3 所示。模板可以表现为启动停止 这两种状态之一。

状态转换是使用 WebSphere 管理控制台或 wsadmin 控制台界面来触发的。


模板生命周期
模板生命周期

启动 在此状态下,可以创建新的业务流程或人工任务实例。
下一个状态:可以停止模板以防止在该模板基础上创建新实例。停止模板将导致停止 状态。 停止 在此状态下,不能在该模板基础上创建新实例。但是,现有的实例可以继续运行,直到完成。 下一个状态 在此状态下,当模板启动时,其状态设置为启动。如果某个模板不再存在任何实例,则可以通过卸载对应的企业应用程序来删除该模板。

包含该模板的企业应用程序可以独立于模板生命周期停止或启动。如果企业应用程序停止,企业应用程序中的模板实例未进行处理,并且不能创建实例。

流程和人工任务的版本

业务流程或人工任务的版本是现有业务流程或人工任务经过发展以后的副本。当您希望相同业务流程或人工任务的替代实例在运行时环境中共存时,您将使用版本管理。

版本由以下属性进行标识:

  • 相同的流程或任务组件名称
  • 相同的目标命名空间
  • 不同的起始有效日期

下图显示了这些属性来自于业务流程中的何处。这同样适用于人工任务。


图 4. 用于标识版本的属性
属性标识版本

业务流程和人工任务版本的范围是单个部署目标;在网络环境中,该范围为某个集群或应用程序服务器。不同部署目标的模板单独地操作,因此不能将其视为相同业务流程或人工任务的版本。

起始有效日期

WebSphere Process Server 允许安装相同业务流程或人工任务的多个版本。这意味着某个流程或任务的多个版本可以在运行时环境中共存。流程或任务的版本在运行时环境中是通过对应的模板实现的。

如果某个任务或流程定义的起始有效日期 是过去的时间中最近的,则该任务或流程版本(即模板)当前有效。起始有效日期适合于后期绑定。

图 5 显示了一个版本管理示例。其中安装了流程 A 的三个版本。服务器的当前状态将确定该流程的哪一个版本当前有效。在此例中,有效的是第 2 版的流程模板,因为其起始有效日期“2008 年 5 月 1 日”是过去的时间中最近的。下一个版本 (V3) 将在 2008 年 10 月 1 日变得有效。流程 B 仅安装了一个版本。其起始有效日期是在将来。如果使用后期绑定调用流程 B,您将会看到错误。但是,如果使用早期绑定调用流程 B,则调用将会成功。


图 5. 显示哪一个版本当前有效
显示有效版本

早期绑定和后期绑定

要调用特定版本的业务流程或人工任务,需要使用早期绑定 进行调用。例如,当 Web 服务客户端调用某个流程的 SCA 导出,或 SCA 组件使用 SCA 连接调用某个流程时,就会发生早期绑定。


图 6. 早期绑定:SCA 组件之间的连接

SCA 连接是指定早期绑定调用的方法之一。一个 SCA 组件具有一个或多个对其他服务的引用。它将这些引用连接到相同模块中的另一个 SCA 组件,或者在目标超出 SCA 模块范围的情况下,将其连接到某个 SCA 导出。如果使用 SCA 连接来调用人工任务或业务流程,则不考虑任务或流程的起始有效日期。可以通过这种方式调用特定的版本。

如果使用后期绑定 调用业务流程或人工任务,则 Business Process Choreographer 将确定当前有效的版本,然后使用该版本进行调用。后期绑定可应用于业务流程和人工任务。

不同版本的实例

实例的执行基于用于创建它们的模板。在创建某个业务流程或人工任务实例时,将随同流程或任务实例存储一个对该模板的引用。对该实例的后续调用(例如通过业务流程的事件处理程序)将使用在实例创建过程中存储的模板来处理。

多个版本的实例可以在运行时环境中共存,因为可以在以前版本的实例正在运行时引入新的版本。如果新版本的业务流程或人工任务变得有效,这不会影响现有的实例。但是,使用后期绑定的客户端将在创建实例时自动选取新版本。

在下图所示的示例中,存在三个表示相同业务流程的三个不同版本的模板,以及基于这些版本的实例。


图 7. 实例按照用于创建它们的模板执行
按照模板执行 

指定新版本的注意事项

除了组件名称和起始有效日期之外,您还需要考虑以下方面。

接口和业务对象

相同任务或流程的版本必须具有完全相同的接口规范。通过这些接口使用后期绑定与流程和任务交互的客户端一定不能在安装新版本之后受到影响。如果更改了新版本的接口,则流程或任务的行为将不可预测。

用作这些版本化流程或任务的接口的一部分的业务对象也必须完全相同,即它们的限定名称 (qname) 和对应的类型规范必须完全相同。


图 8. 流程中使用的接口和业务对象
接口和业务对象

您可以在新流程版本中更改仅在业务流程中用于内部处理的业务对象。

如果流程接口的参数可能会在将来更改,可以考虑对流程使用较弱类型的接口。有关详细信息,请参阅下面的弱类型接口和业务对象部分。

业务流程的相关集规范

当 Business Process Choreographer 接收到请求时,它需要确定该请求所针对的流程实例。实例是通过作为请求的一部分传递的相关集来确定的。相关集必须在流程的不同版本中保持有效。因此,用于确定流程实例的相关集规范必须在新流程版本中保持相同。

依赖某些流程或任务特征的客户端

客户端可能依赖与之交互的流程或任务的某些特征。在设计新版本的流程或任务时,您应该考虑这些特征,以便在安装新版本以后,现有的客户端能够继续无缝地工作。

这些特征包括:

业务流程的类型 长时间运行的业务流程和微流程具有不同的响应行为和事务行为。例如,调用某个微流程时,客户端在同一个事务中接收结果;对于长时间运行的业务流程,结果仅在后续的事务中可用。此外,用于调用业务流程的 API 方法可能随不同的流程类型而异。也就是说,在不同版本之间更改类型会影响流程的客户端。 授权 客户端可能需要特定的授权才能与业务流程或人工任务交互。如果修改了流程或任务的授权规范,请验证该更改是否影响客户端。 业务流程的查询属性 如果为流程指定了查询属性以使客户端能够查询业务数据,应该对新版本保留相同的规范,以防止破坏依赖这些查询属性的现有客户端。 接口限定符 SCA 接口限定符适用于流程和人工任务组件,例如,事务限定符或调用规范。如果需要更改这样的规范,请验证更改后的规范对现有的客户端是否有效。

支持早期和后期绑定的场合

正如在早期绑定和后期绑定部分中所说明的那样,在某些情况下,您可以选择使用早期绑定或后期绑定来调用人工任务或业务流程,并且存在某些仅支持早期绑定或后期绑定的情况。

早期绑定和后期绑定支持

本部分描述您可以从早期绑定和后期绑定中做出选择的场合。

Business Flow Manager 的 Web 服务接口和 EJB API

Business Flow Manager 的 Web 服务接口和 EJB API 提供了用于早期绑定和后期绑定的方法。一般来讲,接受流程模板名称作为参数的方法使用后期绑定。使用模板 ID(例如 PTID、ATID 和 VTID)进行操作的方法使用早期绑定。

例如,BusinessFlowManager EJB 接口提供了以下方法签名:

  • sendMessage(String processTemplateName,
    String nameSpace, String portType, String operation, ClientObjectWrapper inputMessage)
  • sendMessage(VTID vtid,
    ATID atid, ClientObjectWrapper inputMessage)

第一个签名 sendMessage 使用由 processTemplateName 表示的当前有效的流程,也就是使用后期绑定。第二个签名使用模板 ID vtidatid 调用特定的流程模板,也就是绑定到该特定的版本。

流程到流程的调用

可以通过后期绑定或早期绑定的方式实现流程到流程的调用。如果调用流程使用 SCA 连接来连接到另一个流程,则调用是使用早期绑定实现的,即调用的是作为该连接的目标的流程。调用流程和被调用流程可以在同一个 SCA 模块中,或者可以在通过 SCA 导入或 SCA 导出连接的不同模块中。

在流程到流程的调用中,后期绑定不需要在流程之间进行连接,因为目标组件是在运行时动态地确定的。与使用静态 SCA 连接不同,您将作为调用流程的一部分指定被调用流程的流程模板名称。这是作为执行流程调用的调用活动的引用合作伙伴属性的一部分,在 WebSphere Integration Developer 中的业务流程编辑器中指定的。请参见“参考资料”部分的“WebSphere Integration Developer V6.1.2 信息中心,使用合作伙伴链接扩展的后期绑定”。

通常,被调用流程驻留在单独的 SCA 模块中。如果是这样,则需要使用带 SCA 本机绑定的 SCA 导出将其导出。


图 9. 用于后期绑定的组装关系图和业务流程编辑器规范
组装关系图

仅支持后期绑定

Human Task Manager 的 Web 服务接口和 EJB API

Human Task Manager 的 Web 服务接口和 EJB API 仅支持使用后期绑定的方法。

例如,HumanTaskManager EJB 接口提供了以下方法签名:

  • createTask(String taskTemplateName,
    String taskNamespace)

此方法基于由 taskTemplateNametaskNamespace 表示的当前有效的任务创建任务。

按名称的动态子流程调用

端点引用(endpoint reference,EPR)是动态选择要调用的服务的常用方法。为了支持运行时的动态子流程选择和调用,WebSphere Process Server 允许您确定子流程的 EPR。getServiceRefForTemplate 方法用于检索给定其名称 processTemplateName 的子流程的 EPR。您可以使用 EPR 调用通过其端口类型(portTypeNamespaceportTypeName)指定的子流程的服务。该方法返回流程的当前有效版本的 EPR,也就是使用后期绑定:

  • getServiceRefForTemplate(
    String processTemplateName, String portTypeNamespace, String portType)

该方法对分配活动(请参见 WebSphere Integration Developer 信息中心,XPath 扩展函数)和 Java™ 代码片段活动可用。在分配活动中,您可以在 from 表达式中使用 XPath 扩展函数 getServiceRefForTemplate,以将返回的 EPR 分配给在分配活动的 to 规范所指定的合作伙伴链接。

在 Java 代码片段活动中,如果您调用方法 getServiceRefForTemplate,您将检索到 com.ibm.websphere.sca.addressing.EndpointReference 的一个实例。可以通过方法 setServiceRefToPartnerLink( , ) 使用此 EPR 将该实例分配给某个合作伙伴链接。

Business Process Choreographer Explorer

Business Process Choreographer Explorer 提供了基于 Web 的通用界面,用于创建和处理业务流程和人工任务。


图 10. 显示流程模板的 Business Process Choreographer Explorer
显示流程模板的 BPCE

您只能启动当前有效的业务流程和人工任务的实例。也就是说,Business Process Choreographer Explorer 是一个使用后期绑定的客户端。然而,您可以处理以前有效的模板的实例,例如,您可以声明这些人工任务实例,或者处理这些流程实例。

JSF 和 Lotus Forms 自定义客户端

在 WebSphere Integration Developer 中,您可以基于 JSF 技术或 Lotus Forms 技术为业务流程或人工任务生成业务用户客户端。生成的客户端代码使用 EJB API 与任务和流程交互;生成的客户端代码所调用的 EJB 方法使用后期绑定。

仅支持早期绑定

调用业务流程或人工任务的 SCA 组件

调用某个业务流程或人工任务的 SCA 组件连接到该业务流程或人工任务的对应 SCA 组件。这种静态连接导致调用特定的版本,也就是使用早期绑定。

如果调用 SCA 组件是某个流程,您可以使用后期绑定,如前面的仅支持后期绑定所述。

为了使任何 SCA 组件能够调用业务流程或人工任务的当前有效版本,您可以使用下面的业务流程的代理流程人工任务的装饰流程部分中描述的模式。

不带 WebSphere Process Server BPEL扩展的流程

起始有效日期是一个 BPEL 扩展,标准 BPEL 并没有提供它。如果希望使用不带 WebSphere Process Server 扩展的标准 BPEL,则本文档中描述的基于时间的版本管理将不受支持。

版本管理最佳实践

下面一个部分将介绍可帮助您对业务流程和人工任务进行版本管理的最佳实践。

使用版本管理为变化而设计

为了实现将来的业务流程和人工任务更改,您在设计基于业务流程的应用程序时应该考虑版本管理。本部分将描述一些可让您为更改做好准备的最佳实践和模式。

模块边界和库

应该将一起进行更改的组件分组到一个模块中。一般来讲,最佳实践是在一个模块中包括单个将进行版本管理的流程。这样,可以容易地引入该流程的新版本,旧版本在不再需要时可以容易地删除。

将流程和任务版本的接口和业务对象定义放在库中。每当引入新版本时将使用该库。

要在 WebSphere Integration Developer 中创建库,可以在 Business Integration 视图中右键单击并选择 New => Library


图 11. 在 WebSphere Integration Developer 中创建新库
创建新库

业务规则

规则逻辑很可能会随时间推移而更改。因此,与直接将规则逻辑编码到业务流程逻辑中不同,您应该将规则逻辑作为业务规则来提供,并从业务流程中调用它们。业务规则可在运行时动态地更改,并且这些更改会立即生效。这样,当需要对规则逻辑作出更改时,您就不需要新版本的业务流程。

有关业务规则以及它们如何帮助您解决业务流程的动态方面的进一步信息,请参考IBM WebSphere Integration Developer 和 WebSphere Process Server 信息中心

业务流程和子流程

在设计长时间运行的流程时,应该考虑将可能会更改的流程部分实现为子流程。这使得即使正在运行的父流程实例也可以选取这些子流程的较新版本。使用后期绑定,父流程实例将在其导航中到达子流程调用点时调用子流程的当前有效版本。

弱类型接口和业务对象

由于接口和这些接口使用的业务对象对流程或任务的所有版本都必须完全相同,因此应该考虑使用弱类型接口。例如,对于可能会更改的参数,您可以使用诸如 anyType 等 XML 模式类型,而不是使用特定的类型。WebSphere Process Server V6.1 中引入了使用通配符 (xs:any) 和无约束内容(xs:anyType、xs: anySimpleType)的弱类型支持。

这使您可以在不同版本之间更改类型,前提是仍然遵守客户端与其流程之间的契约——更改类型可能意味着也要更改客户端。

WebSphere Integration Developer 中的版本管理

创建新版本的典型方法是在 WebSphere Integration Developer 中复制包含早期版本的模块,并在其基础上发展您的流程或任务。这可以确保创建具有新的模块名称的新模块。模块名称在 WebSphere Process Server 单元中必须是唯一的。

有关在 WebSphere Integration Developer 中创建流程或任务的新版本的更多信息,请参考 WebSphere Integration Developer 信息中心(请参阅参考资料部分:

UTC 与本地时间

WebSphere Integration Developer 中为业务流程和人工任务指定的起始有效日期和时间是以 UTC 指定的。例如,如果在洛杉矶工作的开发人员希望某个业务流程版本在本地时间 (UTC-8) 上午 10 点变得有效,他必须在业务流程编辑器中指定 18:00 UTC。


图 12. 以 UTC 指定起始有效日期和时间
指定起始有效日期

如果未提供起始有效日期规范,但是在编辑器中选中了对应的复选框,则使用当前 UTC 日期和时间自动填充起始有效日期字段。

删除版本

如果安装某个业务流程或人工任务的新版本,通常旧版本的实例仍然存在。只要旧版本的实例还存在,您就不能删除该版本,因为运行的实例仍然需要完成其处理,并且已完成、失败或终止的实例可能重新启动。此外,要确保保留这些实例使用的所有服务,以使这些实例能够完成。

为了避免在旧版本的基础上创建新实例,可以停止对应的模板。当某个模板不再存在任何实例时,可以通过卸载对应的企业应用程序删除该模板。

用于版本管理的模式

以下两种模式说明了任意 SCA 组件如何使用后期绑定与人工任务和业务流程交互。请注意,通过 BPC API 与任务和流程交互的客户端不需要这些模式,因为 BPC API 直接支持后期绑定(请参阅前面的支持早期和后期绑定的场合部分)。

业务流程的代理流程

如果某个 SCA 组件调用另一个 SCA 组件,则这些组件将静态地绑定,也就是说,无论起始有效日期如何,都将调用所连接的流程组件。唯一受支持的后期绑定组合是一个流程组件调用另一个流程组件。但是,可以将后期绑定扩展到其他 SCA 组件或始终应该调用流程组件的当前有效版本的客户端。这是通过在调用 SCA 客户端(例如另一个 SCA 组件或 Web 服务客户端)与流程之间添加代理流程来实现的。这样,SCA 客户端将静态地绑定到代理流程;但是,代理流程将使用后期绑定动态地调用流程的当前有效版本。


图 13. 使用代理流程的 SCA 客户端后期绑定
SCA 后期绑定

代理流程的实现非常简单。代理流程包含一个接收活动,后面跟着一个调用活动,以及一个仅当该流程提供的操作是双向操作时才需要的应答活动。确保调用活动的引用合作伙伴指定了流程模板名称。接口合作伙伴和引用合作伙伴都必须使用要调用的流程的接口。


图 14. 代理流程实现
代理流程实现

代理流程的类型取决于所要代表的流程的类型。由于微流程的性能比长时间运行的流程的性能更好,应该尽可能使用微流程来实现代理流程。下表提供了有关何时使用哪种类型的代理流程的建议。


表 1. 提供有关何时使用每一种代理流程的建议

流程类型 流程接口的操作
单向 双向
流程为微流程 代理流程为微流程 代理流程为微流程 (*)
流程为长时间运行的流程 代理流程为微流程 代理流程为长时间运行的流程

(*) 如果该流程可能在将来更改为长时间运行的流程,则使用长时间运行的代理流程。

应该谨慎选择代理流程的类型,因为无法容易地替换此流程。例如,如果您的流程是具有双向接口的微流程,您通常会将代理流程实现为微流程。然而,如果您的流程的后续版本变为长时间运行的流程,您也需要更改代理流程。

人工任务的装饰流程

通常,SCA 客户端使用 SCA 连接调用人工任务组件,也就是静态地绑定到对应的任务。

如果 SCA 组件需要调用人工任务的当前有效版本,则人工任务装饰流程 模式可以帮助实现此目的。一般的“装饰模式”是一种设计模式,允许动态地向现有组件添加新的行为。此模式使用后期绑定来调用表示实际人工任务的装饰流程的当前有效版本,从而实现到该任务的后期绑定。

例如,如果某个流程以后期绑定方式调用某个人工任务,则它将使用后期绑定调用装饰流程,而装饰流程又静态地调用该任务。装饰流程或者作为内联任务包含该任务,或者调用对应的人工任务组件。下图显示了实现为人工任务组件的人工任务的不同版本的示例。


图 15. 使用装饰流程调用人工任务的流程
调用人工任务的流程

装饰流程公开了与其调用的任务相同的接口。由于人工任务始终是异步的,对应的装饰流程通常为长时间运行的流程。对于人工任务的单向操作,您可以考虑使用微流程。

然而,装饰流程模式不仅适用于人工任务,还可以应用它来对任何类型的长时间运行的异步服务进行基于时间的版本管理。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14789789/viewspace-582710/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-07-08

  • 博文量
    355
  • 访问量
    856754