本文通过一个特定的定制加工处理系统(Order to Manufacturing Processing System,OTMPS)的场景(该场景已经在本系列第一篇文章(参阅 参考资料)介绍过)来描述为开发随需应变业务流程的可执行应用程序,如何集成放到 IBM® WebSphere® Studio Application Developer Integration Edition(Application Developer)中的多个构件。
图 1. 可执行的随需应变业务流程的开发
图 1 演示了随需应变业务流程的开发。可以将例如现有的 XSD 模式这样的资源导入到 WebSphere Business Integration Modeler 中。分析员利用 WebSphere Business Integration Modeler(有关详细信息请参阅该系列文章的第 3 部分--详见 参考资料)创建了模型后,随后会导出新的构件,用于开发可执行的实施程序。架构师利用 IBM Rational XDE 为场景进行用例建模并为流程和服务开发对象模型。Java 类是利用 XDE 代码生成工具由对象模型生成的。随后通过 Application Developer 将导出的对象模型转化为 XML 模式元素。开发小组利用 Application Developer 将 Java 代码和 XML schema 元素与附加的组件和服务整合起来以形成可执行的实施程序。然后将新的应用程序(EAR 文件)部署到 WebSphere Business Integration Server Foundation 上。
图 2. OTMPS 高级交互
图 2 演示了 OTMPS 的高级体系结构,有一个流程(定制流程子系统)和三个服务:1)确认与拓扑生成,2)制造工厂,以及 3)façade 规则。客户端应用程序通过 定制流程子系统的服务接口发送命令来调用流程。流程按组的方式接收客户端应用程序输入的命令并将其有效的、转换后的命令转发给生产端。 确认与拓扑生成服务通过与外部的确认服务相交互来确认命令。将发送给该服务的数据封装作为 确认信息(Validation Info)。 制造工厂(Manufacture Plant)服务负责按照原料清单向适当的制造工厂发送已确认的命令。将发送给这项服务的数据封装作为 加工信息(Manufacturing Info)。这两个服务都为现有的应用程序或商业合作伙伴应用程序提供封装器,并利用协议(例如 WebSphere MQ)与外部应用程序进行交互。要促进用户化,流程组件的很多决策都是以外部规则为基础的。我们使用 业务规则 Bean(Business Rule Bean,BRBean)框架来创建、修改和调用规则。如 图 2 所示,规则都定义在 BRBean 中并通过 façade 规则服务进行访问。
用户可以使用 Rational XDE 以统一建模语言(Unified Modeling Language,UML)为对象建模并且生成必要的 Java 代码。对于我们的场景而言,我们为例如 Orders、OrderItem,以及 OrderSubItem 这些对象建模。将这些对象作为流程组件与服务之间所交换的消息一部分。我们同样为附加对象(例如在异常处理中,作为输入的 ExceptionInput)以及工具对象(例如用于登录的 LogUtil)建模。
要在 Rational XDE 中创建上述对象,首先需要用指定的名称和默认目录创建一个新的 Java 建模项目,如 图 3 所示。
图 3. 创建一个新的 Java 建模项目
在 Model Explorer 视图中,在模型下添加一个 Java 包,将在该包中存储对象。
打开上述 Java 包中的 Main 图。在 Main 图中,利用 UML 符号创建带有属性及其之间关系的对象。在我们的实例中,我们创建了 Orders、OrderItems 以及 OrderSubItems 对象。Orders 对象与 OrderItem 对象之间存在聚集关系,OrderItem 对象与 OrderSubItem 对象之间也存在聚集关系,如 图 4 中的数据图所示。
图 4. Orders、OrderItem 以及 OrderSubItem 对象的数据图
完成建模之后,可以通过选择菜单选项来生成模型的 Java 代码,如 图 5 所示。
图 5. 生成 Java 代码
清单 1 是 Orders 对象生成的 Java 代码。
清单 1. Orders 对象生成的 Java 代码
package OrderItem;
package OrderItem;
/** @modelguid {69ABC89D-F18E-402D-9A61-D08451525E2C} */
public class Orders {
/** @modelguid {16A7446B-B7C8-44B9-B258-F0455190D1D1} */
private Boolean valid;
/** @modelguid {6C9862A0-8143-4E98-BB3C-896FD8C29DB5} */
private String mfgNum;
/** @modelguid {6F1E2C0A-D44C-483C-96BB-3142012825A5} */
private Boolean lastMileStone;
/** @modelguid {FBDFC07E-FA81-44C0-AF6F-3084457FBA6E} */
private OrderItem[] orderItems;
/** @modelguid {57915FCB-161C-41E0-B570-D59AA36CCF03} */
private OrderItem OrderItem;
}
|
将流程模型和对象模型集成到 Application Developer 中
Application Developer 为基于工作流的应用程序提供了一个开发环境。包括以下内容:
- 用于创建初始工作流项目的服务项目向导
- 通过 BPEL 元素编排工作流的 BPEL 编辑器
- 用于编辑 XML 模式的 XSD 模式编辑器
- 创建 Web 服务和从 Java 类生成 XML 模式的向导
可执行的工作流应用程序由以下内容组成:
- BPEL 工作流(BPEL 文件)
- Web 服务(WSDL,服务接口/实现类)
- 在服务元素之间传输消息的 XML 模式(XSD 文件)
- 用作 BPEL 变量的 Java 类
通过导出的构件(BPEL、XSD 及 WSDL),分析员从 WebSphere Business Integration Modeler 就可以为确定可执行工作流的要求。为了进一步开发用户需要将这些模型构件导入到 Application Developer 中。
导入从 WebSphere Business Integration Modeler 导出的 BPEL、XSD、WSDL 构件
图 6. OrderProcessSystem 流程模型
图 6 显示了 WebSphere Business Integration Modeler 输出的 OTMPS OrderProcessSystem 流程模型。该工作流程实现了多种活动,决策点、排序、循环、业务规则实施点以及对服务的访问。
将 WebSphere Business Integration Modeler 输出的构件导入到 Application Developer 中时,还要导入通过从 WebSphere Business Integration Modeler 输出而生成的文件夹结构,这是因为生成的文件要使用该结构来引用其他的文件。
从 WebSphere Business Integration Modeler 导出流程模型构件(BPEL、XSD、WSDL)有两种方法 的(有关详细信息请参阅该系列文章的第 3 部分):
- 将文件输出到现有的 Application Developer 服务项目中。
- 将文件输出到文件系统中的任意目录中。
如果正在使用现有的 Application Developer 服务项目,建议您首先完成以下步骤:
- 从 WebSphere Business Integration Modeler 导出的同时,选择 Application Developer Service Project 的存储目录作为输出目录。
- 导出完成后,启动 Application Developer。在服务导航栏内刷新项目。导出的文件(BPEL、XSD、WSDL)将自动导入到服务项目中。Application Developer 使用文件来生成其他所需的元素,例如各 XSD 复杂类型的 Java 实现,以及附加的 WSDL 文件。
然而,如果您正在将 WebSphere Business Integration Modeler 流程模型构件导出到一个指定目录,那么为了将这些构件导入到 Application Developer 中您必须完成以下步骤:
- 在 Application Developer 中,在 Business Integration 透视图中新建一个新的服务项目。该项目就是您打算导入到 WebSphere Business Integration Modeler 导出的构件中的服务项目。
- 导入到您从 WebSphere Business Integration Modeler 导出的 文件系统路径下的服务项目中。将文件导入到您所选的项目中。
Application Developer 服务项目包括 Web 服务、对象以及特定包中准备的流程构件。
导入 WebSphere Business Integration Modeler 导出的构件并刷新服务项目之后,将在服务项目文件夹中能看到 BPEL 流程(例如,OrderProcessSystem)。 图 7 显示了使用 OrderProcessSystem.bpel 文件和其他导入文件的服务项目 OrderProcessSystemWorkflow。
图 7. 使用导入文件的 OrderProcessSystemWorkflow 服务项目
将 WebSphere Business Integration Modeler 构件导入到服务项目中后,用 BPEL 编辑器打开该 BPEL 文件。 图 8 显示了 OrderProcessSystem 的 BPEL 流程。
图 8. 使用开放 OrderProcessSystem 工作流的 BPEL 编辑器
现在所有的 BPEL 验证错误都应该在 BPEL 编辑器中校正。例如,如果 WebSphere Business Integration Modeler 的模型包含一个 staff 角色,且将该模型导出为微流 (micro flows) 而不是长期运行的宏流 (macro flows),那么在 WebSphere Business Integration Modeler 导出过程中将自动生成一些 staff 变量(例如 staff 输入,staff 输出)。这对 BPEL 微流来说是无效的,因为 staff 活动只能与宏流相关联。开发人员会在 BPEL 编辑器中发现错误,且应当将其纠正过来,例如,可以删除相关的 staff 变量。
系统中的流程与服务将数据元素作为它们之间消息交换的一部分。将业务对象作为 XSD 文件从 WebSphere Business Integration Modeler 导出。
附加的Java 类以及相应的 XML 模式构件是执行工作流所必不可少的部分。这些扩展对象的实例包括以下内容:
- 内部对象例如工作流状态管理器对象
- 为事件定制上下文数据
- 用于执行业务规则的对象
- 外部服务消息
- 内部服务实现所使用的对象
我们利用 Rational XDE 来创建这些附加对象以及它们的 Java 代码。在 Rational XDE 中创建的模型项目是一个带有额外构件(例如模型文件)的 Java 项目,这些构件将导入到 Application Developer 中。
如果将从 Rational XDE 中导出的 Java 对象作为消息交换的(输入、输出、错误消息)的一部分,那么需要使用 Application Developer 来创建对应的 XSD 元素。这些对象和 XSD 元素都是访问伙伴服务时要用到的服务接口的生成和流程状态的一部分,换句话说,伙伴操作将它们囊括作为自己消息的一部分。
用户可以通过 Java 全局变量或 XML 模式元素引入这些对象。要将对象用作 Java 全局变量,通过单击流程标题在流程属性表单中的“导入”属性中添加对象,例如 OrderProcessSystem,如 图 9 所示。
导入了对象的流程内的所有活动都可以访问 Java 全局变量,但是流程的子流程不能访问。
图 9. 添加 Java 全局变量
在导入部分中添加 Java 全局变量可以在 OrderProcessSystem 流程 BPEL 文件内部创建
javaGlobals 元素,如
清单 2 所示。
清单 2. Java 全局变量的用法
<process expressionLanguage="Java" name="OrderProcessSystem" … >
….
<wpc:javaGlobals>
<wpc:import packages="com.ibm.coats.logging.LogUtil"/>
………………………………..
</wpc:javaGlobals>
<process/>
|
每个对象都会生成一个 XSD 文件,且将该 XSD 用于消息引用的 WSDL 文件中。图 10 显示了 handleExceptionRequest 消息是怎样引用 ExceptionInput 对象生成的 XSD 模式的。
图 10. 用作 XML 模式元素的 ExceptionInput 对象
可以利用 WebSphere Business Integration Modeler 或 Rational XDE 为业务对象建模。在 Rational XDE 中为业务对象建模并作为 Java 类导出。这些 Java 类稍后可以转化为 XML 模式元素,用作对应的 Web 服务的 WSDL 中定义的消息部分。然后,如果您生成了用于这些服务(从 WSDL 文件)的 Java 代理或存根,那么利用必要的序列化/反序列化操作和类就能生成新的数据对象。
对于同一业务对象我们有两组不同的数据对象,一种从 Rational XDE 导入,另一种由 WSDL 文件生成。例如,Rational XDE 生成的数据对象中不存在支持特定序列化/反序列化必不可少的 Web 服务(例如阵列)的途径。这可能在与服务实现和客户代理一起使用时会引发运行时数据序列化错误。下面是一些帮助避免这种问题的建议:
- 利用 WSDL 生成的数据对象进行 Web 服务消息传递,利用 Rational XDE 生成的数据对象进行服务和工作流的内部操作,并添加所需的必要的数据转换。开发人员在创建这些对象时必须使用恰当的封装结构以避免重写现有的类(例如从 WSDL 生成对象时定制命名空间映射)。
- 利用 Rational XDE 为业务对象建模,将它们作为 Java 类输出,将它们转化为 XML 模式元素,并将它们导入到 WebSphere Business Integration Modeler 中。然后从 WebSphere Business Integration Modeler 中导出所有的业务对象。
导入所有必须的构件后,(这些构件是由 Rational XDE and WebSphere Business Integration Modeler 导出的),开发人员把特定的必须的扩展添加到这些构件中,包括以下内容:
- 捕获系统级异常错误处理程序
- 执行数据转换/事件生成的 Java 片断
- 利用规则引擎实现业务规则
- 生成到服务端点的绑定
本系列的下一部分将讨论这些开发扩展。
作者描述了 OTMPS 场景的体系结构和 Rational XDE 的使用,它是用 UML 给业务对象建模用的。他们描述了为了进一步开发如何在 Application Developer 中集成 WebSphere Business Integration Modeler 和 Rational XDE 导出的构件。本系列的下一部分的主题是为在 WebSphere Studio Application Developer Integration Edition 中执行随需应变流程的的可执行应用程序的开发。
作者对 Martin Keen, Naveen Sachdeva 以及 Catherine Rivi 对本文的贡献,建议和帮助表示感谢。
- 您可以参阅本文在 developerWorks 全球站点上的
英文原文。
- 阅读
随需应变业务流程的生命周期的全部文章, 并继续关注我们新添加的文章。
- 阅读 IBM 红皮书
BPEL4WS 关于 WebSphere 业务集成的业务流程:理解,建模,移植 (IBM,2004 年 12 月)
- 从 developerWorks 站点上获得
BPEL for Java (BPEL) 白皮书以及
BPEL for Web services (BPEL4WS) 说明书。
- 访问
OASIS Web 服务业务流程执行语言 技术委员会。
- 用 WebSphere Business Integration Modeler 研究
Process Choreographer 的技术细节。
- 查阅
Websphere Application Server 信息中心。
- 从 developerWorks 站点上获取关于
Web 服务寻址规范的信息。
- 访问
Developer Bookstore 获取技术书籍的综合列表,其中包括数以百计的
Web 服务主题书籍。
- 想获取更多信息吗 ? developerWorks 的
SOA 与 Web 服务专区有成百上千篇信息文章,以及关于如何开发 Web 服务应用程序的入门级、中级和高级教程。
GermÁn Goldszmidt 博士是 IBM 软件组的一位高级技术人员,主要研究用于实现、定制和发布随需应变解决方案集成平台的体系结构。在此之前,他是 IBM T.J. Watson 研究中心的研究员,带领设计和实现了多种技术,包括第一个自动电子公共设施原型 OcÉano、网络分派器(Websphere 产品的负载均衡组件)。
Joshy Joseph 是 IBM 软件组随需应变体系结构和开发组织的一位软件工程师。作为一名架构师和程序员,他的主要技能和专长包括分布式计算、网格计算、 Web 服务、业务流程以及和工作流开发等领域。2003 年他的专著 网格计算 由 Prentice Hall 出版社出版。另外,他还撰写了大量的关于网格计算、业务流程开发以及 Web 服务方面的文章。