开始在 WebSphere Studio 中使用 BPEL4WS
本教程讲述了在 WebSphere Studio Application Developer Integration Edition V5.1 中如何使用 Web 服务的业务流程执行语言(Business Process Execution Language,BPEL4WS)来创建和部署业务流程。通过不同的例子,您可以学习 BPEL 规范中的不同组件。
引言
在 WebSphere 上下文中,业务流程是一组编排好的活动,这组活动集中描述了实际的业务操作。在内部结构中,使用 Web 服务描述语言 (WSDL) 定义每个活动,使用 Web 服务的业务流程执行语言 (BPEL4WS) 或者流描述标识语言(FDML) 定义活动之间的交互。
WebSphere Studio Application Developer Integration Edition V5.1 (以下简称 Application Developer)支持使用 BPEL4WS 进行业务流程的开发。BPEL 规范是由 IBM、Microsoft® 和 BEA 共同开发的。它为创建业务流程提供了一个 XML 大纲。IBM 扩展了 BPEL 规范,包括一些有用的组件,例如 JavaSnippet 和 Staff 活动。扩展版本名为 BPEL+。
Application Developer 同时支持 BPEL 和 BPEL+ 规范。它为组装业务流程提供了一个图形化的编辑器和一个单元测试环境,可以在这个环境中执行和调试流程。这些工具提供了为构建部署到 WebSphere Integration Test Server 上的业务流程所需要的一切支持。
本文的其余部分组织如下:
- BPEL 是什么?通过举一个业务流程的例子概述了 BPEL 中的组件。
- 创建一个简单的 BPEL 流程描述了创建一个业务流程的步骤。
- 调用 Java 服务将 Java™ 服务引入到业务流程中。
- 调用另一个业务流程描述如何在一个业务流程里调用另一个业务流程。
BPEL 是什么?
下面是在 Application Developer 中用 BPEL 描述的一个业务流程示例:
图 1.Application Developer 中的示例 BPEL 文件
图 1 详细解释了许多活动节点:
- Receive
- BPEL 流程至少要有一个 Receive 节点,负责接收输入的信息。
- Reply
- BPEL 流程可以有一个 Reply 节点,这取决于该流程是否需要提供一个应答。
- Empty
- Empty 节点其实是一个占位符,它什么都不做。
- JavaSnippet
- JavaSnippet 节点允许用户编写 Java 代码。正如前面提到的,这个活动只存在于 BPEL+ 规范中。
- Sequence
- Sequence 节点内的元素会按顺序执行。例如,JavaSnippet 节点在 Empty1 之后执行。
- Flow
- 包括 Sequence1 和 Sequence2 的两道蓝条就是 Flow 节点。Flow 节点内的项是并行执行的。例如,Sequence1 和 Sequence2 同时开始执行。
业务流程有一个用 WSDL 描述的服务定义,该服务定义是一个标准的 XML 格式通讯协议。它将服务定义为网络端点或端口的集合。WSDL 也是 Web 服务的标准通讯协议。
WSDL 定义包括端口类型、操作和消息类型的定义。端口类型描述了业务流程支持的操作。每个操作都有定义好的输入消息和/或输出消息。如果一定要用 Java 术语来理解的话,一个操作类似于 Java 中的一个方法。输入消息类似于方法的输入参数。输出消息可以看作是方法的返回类型。
下面是 BPEL 创建向导创建的一个默认的服务定义:
|
通过 WSDL 服务定义,业务流程可以被任何充当服务客户端的应用程序所调用。例如,一个 BPEL 流程可以被另一个 BPEL 流程调用。
创建一个简单的 BPEL 流程
在本部分中,将创建、部署并运行一个简单的 BPEL 服务。
步骤 1.创建服务项目
创建一个服务项目,命名为 SimpleServiceProject 。
- 在 Business Integration 透视图中,选择 File =>New =>Service Project。
- 输入
SimpleServiceProject作为项目名称,然后单击 Finish。
步骤 2.使用 WSDL 创建服务定义
正如上面所提到的,每个 BPEL 流程需要一个 WSDL 定义,这样端口类型和操作可以供外部调用。
- 在 Business Integration 透视图的 Services 视图中,展开 Service Projects,右键单击 SimpleServiceProject并选择 New =>Empty Service。
- 输入
validatorprocess作为 Package的名称。 - 输入
MailValidator作为 File name。单击 Finish。 - 切换到
MailValidator.wsdl编辑器的 Graph 视图。 - 在 Port Types栏内单击右键,选择 Add Child =>Port Type。输入
MailValidatorPortType作为 name,然后单击 OK。 - 右键单击 MailValidatorPortType选择 Add Child =>operation,输入
ValidateOperation作为 name,然后单击 OK。 - 右键单击 ValidateOperation选择 Add Child =>Input。
- 右键单击 Input选择 Set Message。用默认值创建一个新的 WSDL 消息,然后单击 Finish。
- 在 Messages 栏中,右键单击 ValidateOperationRequest,选择 Add Child =>Part。输入
SenderAddress作为 part 的 name。单击 OK。注意到消息部分缺省的有一个 xsd:string 类型,该类型是内置的 xsd 类型。 - 再添加一个 part。右键单击 ValidateOperationRequest选择 Add Child =>Part。输入
ReceiverAddress作为 part 的 name。单击 OK。 - 在 Port Types 栏中,右键单击 ValidateOperation选择 Add Child =>Output。如果服务不同步,可以不需要输出。但是,如果服务同步,需要创建一个输出给调用者以返回一个响应。
- 右键单击 Output选择 Set Message。用默认值创建一个新的 WSDL 消息,然后单击 Finish。
- 在 Messages 栏中,右键单击 ValidateOperationRequest选择 Add Child =>Part。输入
MailToAddress作为 part 的 name。单击 OK。 - 保存 WSDL 文件并关闭编辑器。
步骤 3.创建 BPEL 流程
BPEL 流程可以是基于序列(sequence-based)的或是基于流(flow-based)的。在本步骤中,将创建一个基于序列的流程。在基于序列的 BPEL 流程中,所有的项都封装在一个序列中。另一方面,在基于流的流程中所有的项都封装在一个流中。
- 在 Business Integration 透视图的 Services 视图中,展开 Service Projects,右键单击 SimpleServiceProject选择 New =>Business Process。
- 输入
validatorprocess作为 package 的名称,MailValidatorProcess作为 File name。然后单击 Next。 - 选择 Sequence-based BPEL Process。单击 Finish。
业务流程创建向导为新创建的 BPEL 流程创建了一个默认的 WSDL 服务定义。默认的服务定义已经定义了一些虚构的端口类型、操作和消息。但是,用户可能不会使用默认的服务定义,而使用步骤 2 中定义的 WSDL 服务定义。因此,需要清除 BPEL 流程和默认的 WSDL 文件。
- 在
MailValidatorProcess.bpel编辑器中,右键单击 InputVariable=> Delete。 - 右键单击 PartnerLink=> Delete。
- 在编辑器中打开
MailValidatorProcesInterface.wsdl,右键单击 ProcessPortType=> Delete。 - 右键单击 InputMessage=> Delete。
- 保存 WSDL 和 BPEL 文件并关闭 WSDL 文件。
步骤 4.为 BPEL 流程创建合作伙伴链接
BPEL 一个重要的用途是通过 Web 服务接口与其他服务互操作的能力。与 BPEL 流程互操作的其他服务称为合作伙伴。BPEL 流程调用合作伙伴之前,需要先定义一个合作伙伴链接来引用合作伙伴的 WSDL 接口。而且,每个 BPEL 流程需要定义一个指向它自己的 WSDL 接口的合作伙伴链接,该链接自描述的。因此,每个 BPEL 流程至少要有一个描述它自己的合作伙伴链接。如果流程调用其他服务,每个服务都需要一个合作伙伴链接定义。
为 BPEL 流程创建一个自描述的合作伙伴链接。
- 在
MailValidatorProcess.bpel编辑器中,单击 Plus图标创建一个新 PartnerLink。 - 输入
MyProcess作为 Partnerlink 的名称。单击 Enter。 - 在编辑器的详细信息区域中,转到 Implementation页。单击 New PartnerLink Type。PartnerLink Type 定义服务的角色和端口类型。
- 输入
MyRole作为 First role的名称。 - 单击 Browse选择一个端口类型文件。选择 SimpleServiceProject => validatorprocess => MailValidator.wsdl => MailValidatorPortType。这是步骤 2 中定义的端口类型。单击 OK。
- 单击
<-->按钮,将 MyRole 移到右侧。左侧是流程调用的合作伙伴的角色。右侧是自描述的伙伴链接的角色。保存 BPEL 流程。
步骤 5.创建变量
BPEL 变量可以是 WSDL 消息类型或 XSD 元素类型。可以使用编辑器创建 WSDL 消息类型变量。WSDAIE v5.1 中的变量都是全局变量。但是,Application Developer 的以后版本中可能会引进局部变量。
为输入和输出消息创建变量。
- 在 MailValidatorProcess.bpel 编辑器中,单击 Plus 图标创建新变量。输入
ValidateOperationRequest作为变量名。 - 转到详细信息区域的 Message 页。单击 Browse=>展开 SimpleServiceProject => 展开 validatorprocess=> MailValidator.wsdl=>选择 ValidateOperationRequest。单击 OK。
- 添加另一个变量,命名为
ValidateOperationResponse。 - 单击 Browse=>展开 SimpleServiceProject => 展开 validatorprocess=> MailValidator.wsdl=>选择 ValidateOperationResponse。单击 OK。
- 保存 BPEL 文件。
步骤 6.修改接收节点和应答节点
BPEL 流程通过接收节点从客户端接收输入消息时,会创建新的 BPEL 流程实例,BPEL 流程开始执行。应答节点会发送一个输出消息返回给客户端。正如前面所提到的,这个流程是同步的,因此它既有接收节点又有应答节点。用户需要在接收节点和应答节点内指定端口类型、操作和消息。实际上,BPEL 流程允许多个接收和应答节点,但这是与相关性集合(correlation set)有关的高级主题,不在本教程讨论的范围之内。
- 选择 Receive节点,转到详细信息栏中的 Implementation 页。选择 MyProcess作为 Partner Link。
- 选择 ValidateOperationRequest作为 Request。
- 确保 Create a new Process instance if one does not already exist复选框被选中。
- 选择 Reply节点。转到详细信息栏中的 Implementation 页。选择 MyProcess作为 Partner Link。
- 选择 ValidateOperationResponse作为 Response。
- 保存 BPEL 文件。BPEL 流程上不会再有红色的十字形标记。
步骤 7.完成 BPEL 流程
可以使用位于编辑器左边的图标菜单项给 BPEL 流程添加基本节点。或者,也可以使用上下文菜单添加新节点。
本部分中创建的 BPEL 流程用来验证邮件地址。如果来自 ValidateOperationRequest 的 ReceiverAddress 中包括 “Toronto” 或 “Markham” 等词,BPEL 流程会将 ValidateOperationResponse 中的 MailToAddress 设置为 ReceiverAddress。否则,该邮件会返回给发送人并且 MailToAddress 会设置为 SenderAddress。
- 在接收节点后添加一个转换节点。右键单击 Reply节点,选择 Insert Before =>Switch。或者在第三级图标菜单里找到转换节点,然后简单的将其拖放到接收节点后面。图 5 显示了图标菜单的位置。
- 右键单击 Switch,选择 Add Case。
- 再添加一个实例。右键单击 Switch,选择 Add Case。
- 右键单击 Switch,选择 Add Otherwise。
为第一个实例输入 Visual Expression。
- 单击第一个实例节点,转到 Condition 页。为该实例输入一个 Java 表达式或 Visual 表达式。在下拉框中选择 Visual Expression。
- 可以通过右侧栏中列出的变量访问消息的内容。单击蓝色的 Condition链接 =>展开 ValidateOperationRequest=>选择 ReceiverAddress。
- 选择 Method or Field。
- 选择 indexOf(ch...)。
- 在右侧的栏中,单击蓝色的 ch...链接,然后单击 String。输入
Toronto。 - 将光标置于闭括号的后面。在右侧的栏上选择 >。
- 选择 Number。输入
-1。保存 BPEL 文件。 - 最终的 Visual Expression 就是这样的。如果 ReceiverAddress 中包含 “Toronto”,表达式返回 true。
为第二个实例输入 Java 表达式。
- 单击第二个实例节点转到 Condition 页。在下拉框中选择 Expression。
- 在编辑器中输入下面的代码片段:
String receiverAddr = getValidateOperationRequest().getReceiverAddress(); if (receiverAddr.indexOf("Markham")>-1) { return true; } return false; - 如果发送人地址中包含 Markham 这个词,上面的代码片段将返回 true。保存 BPEL 文件。
为第一个实例添加 JavaSnippet 节点。
- 右键单击第一个 Case,选择 Add =>Java Snippet。Java Snippet 允许用户输入 Java 代码。这遵从的不是标准的 BPEL 规范,而是 IBM BPEL+ 规范。
- 单击 JavaSnippet 转到 implementation 页:
// Set the MailToAddress in the response to the ReceiverAddress from Request String receiverAddr = getValidateOperationRequest().getReceiverAddress(); ValidateOperationResponseMessage msg = getValidateOperationResponse(); msg.setMailToAddress(receiverAddr); setValidateOperationResponse(msg); - 如果出现编译错误,在编辑器内单击右键并选择 Source =>Organize Imports。系统会自动判断是否需要导入其他文件来解决编译错误的问题。
- 这段代码片段会将请求中的 ReceiverAddress 复制到应答中的 MailToAddress。保存 BPEL 文件。
为第二个实例添加一个 Assign节点。在第一个实例中,Java Snippet 节点用于在变量之间复制值。这不是唯一的方法,也可以用赋值节点来实现这个功能。
- 右键单击第二个 Case,选择 Add =>Assign。
- 单击 Assign转到 implementation 页。在 From下拉框中选择 Variable or Part。
- 展开 ValidateOperationRequest直到看见 ReceiverAddress。选择 ReceiverAddress。
- 在 To下拉框中选择 Variable or Part。
- 从 ValidateOperationResponse中选择 MailToAddress。将请求中的 ReceiverAddress 复制到应答中的 MailToAddress。
给其他的节点添加赋值节点。
- 右键单击第二个 Case,选择 Add =>Assign。
- 单击 Assign转到 implementation 页。在 From下拉框中选择 Variable or Part。
- 从 ValidateOperationRequest中选择 SenderAddress。
- 在 To下拉框中选择 Variable or Part。
- 从 ValidateOperationResponse中选择 MailToAddress。
在应答节点前添加一个 JavaSnippet 节点。该 JavaSnippet 节点将仅仅打印系统输出。
- 右键单击 Reply,选择 Insert Before =>Java Snippet。
- 在编辑器中输入下面的代码片段。保存 BPEL 文件。
|
BPEL 流程创建完成。下一步是生成部署代码并在服务器上进行测试。
步骤 9.生成部署代码
要在 WebSphere Integration Test Server 中运行 BPEL 流程,必须生成部署代码。本步骤将为 BPEL 流程创建 EAR 和 EJB,他们可以部署到测试服务器上。
- 在 Services 视图中,右键单击 MailValidatorProcess.bpel选择 Enterprise Services =>Generate Deploy Code。
- 接受所有的默认设置,然后单击 OK。生成代码之后,可以看见创建了三个项目:SimpleServiceProjectEAR、 SimpleServiceProjectEJB 和 SimpleServiceProjectWeb。
步骤 10.部署到测试服务器
创建一个名为 IT Server 的整体测试环境服务器。
- 在 Servers 视图中,单击右键并选择 New =>Server and Server Configuration。
- 选择 WebSphere version 5.1 =>Integration Test Environment。
- 输入
IT Server作为 server name。单击 Finish。 - 将 EAR 项目添加到服务器上。右键单击 IT Server,选择 Add and remove projects。
- 单击 Add All。单击 Finish。
- 启动服务器。右键单击 IT Server,选择 Start。
- 启动服务器后,打开 BPE Web 客户端。可以通过服务器上的上下文菜单打开。右键单击 IT Server,选择 Launch Business Process Web Client。或者,在 Web 浏览器中输入 http://localhost:9080/bpe/webclient。
- 单击 My Templates。
- 选择 MailValidatorProcess =>Start Instance。
- 输入
123 Queen St., Toronto作为 ReceiverAddress。 - 输入
8200 Warden Ave., Markham作为 SenderAddress。 - 单击 Start Instance创建一个 BPEL 流程的新实例。
- 从控制台上可以看见,
MailToAddress被设置为123 Queen St., Toronto,这是因为ReceiverAddress中包含Toronto:Receiver Address: 123 Queen St., Toronto Sender Address: 8200 Warden Ave., Markham Mail To Address: 123 Queen St., Toronto - 再运行一次。输入
123 Queen St., North York作为 ReceiverAddress。流程认为该接收地址是无效的,因此,MailToAddress被设置为8200 Warden Ave., Markham。Receiver Address: 123 Queen St., North York Sender Address: 8200 Warden Ave., Markham Mail To Address: 8200 Warden Ave., Markham
本部分创建了一个简单的 BPEL 流程。在下一部分中,将创建一个长期运行的 BPEL 流程,该流程调用 Java Web 服务和另一个 BPEL 流程。
调用 Java 服务
如果服务器正在运行,在继续本部分之前请先停止服务器。
在本部分中,将从 BPEL 流程中调用 Java 服务。所以创建 BPEL 流程前,先要创建 Java 服务。
步骤 1.创建 Java Web 服务
创建一个名为 MailJavaProject 的 Java 项目。
- 在工作台上,选择 File =>New =>Project。选择 Java =>Java Project。单击 Next。
- 输入
MailJavaProject作为 Project name。单击 Finish。
创建一个名为 MailHelper 的 Jave 类。
- 在 Package Explorer 视图中,右键单击 MailJavaProject,选择 New =>Class。
- 输入
implementation作为 package的名称。 - 输入
MailHelper作为 class的名称。单击 Finish。 - 添加下面的方法到类中并保存文件。
public void mail(String mailToAddress) { System.out.println ("Sending mail to " + mailToAddress); }
为 Java 类创建服务接口。
- 在工作台上选择 File =>New =>Other =>Business Integration =>Service built from。
- 选择 Java然后单击 Next。
- 浏览选择 MailJavaProject作为 Class Project的名称 。
- 浏览选择 implementation作为 Java Class的名称 。
- 选中 mail(String)复选框。单击 Next。
- 单击 Finish。
步骤 2.创建服务项目
创建一个名为 PostOfficeProject 的服务项目。
- 在 Business Integration 透视图中选择 File =>New =>Service Project。
- 输入
PostOfficeProject作为 project name然后单击 Finish。
- 在 Business Integration 透视图的 Services 视图中,展开 Service Projects,右键单击 PostOfficeProject,选择 New =>Empty Service。
- 输入
postofficeprocess作为 package名称。 - 输入
PostOffice作为 File name。单击 Finish。 - 在
PostOffice.wsdl编辑器中切换到 Graph 视图。 - 右键单击 Port Types栏并选择 Add Child =>Port Type。输入
PostOfficePortType作为 name,然后单击 OK。 - 右键单击 PostOfficePortType,选择 Add Child =>operation。输入
SendMailOperation作为 name,然后单击 OK。 - 右键单击 SendMailOperation,选择 Add Child =>Input。
- 右键单击 Input,选择 Set Message。接受默认值,然后单击 Finish。
- 在 Messages 栏中,右键单击 SendMailOperationRequest,选择 Add Child =>Part。输入
SenderAddress作为 part的名称。单击 OK。 - Add another part.添加另一个 Part。右键单击 SendMailOperationRequest,选择 Add Child =>Part。输入
ReceiverAddress作为 part的名称。单击 OK。 - 在 Port Type 栏中,右键单击 SendMailOperation,选择 Add Child =>Output。
- 右键单击 Output,选择 Set Message。接受默认值,然后单击 Finish。
- 在 Message 栏中,右键单击 SendMailOperationResponse,选择 Add Child =>Part。输入
MailToAddress作为 part的名称。单击 OK。 - 保存 WSDL 文件并关闭编辑器。
步骤 4.创建 BPEL 流程
创建一个名为 PostOfficeProcess 的 BPEL 流程
- 在 Business Integration 透视图的 Services 视图中,展开 Service Project右键单击 PostOfficeServiceProject,选择 New =>Business Process。
- 输入
postofficeprocess作为 package 的名称,PostOfficeProcess作为 package的名称。单击 Next。 - 选择 Flow-based BPEL Process。单击 Finish。
清除 BPEL 流程中的默认值。
- 在
PostOfficeProcess.bpel编辑器中,右键单击 InputVariable,选择 Delete。 - 右键单击 PartnerLink,选择 Delete。
- 在编辑器中打开
PostOfficeProcessInterface.wsdl。右键单击 ProcessPortType,选择 Delete。 - 右键单击 InputMessage,选择 Delete。
- 保存 WSDL 和 BPEL 文件并关闭 WSDL 文件。
步骤 5.为 BPEL 流程创建合作伙伴链接
为 BPEL 流程创建一个自描述的合作伙伴链接。
- 在
PostOfficeProcess.bpel编辑器中,单击 Plus图标创建新的 PartnerLink。 - 输入
MyProcess作为 Partnerlink 的名称。单击 Enter。 - 在编辑器的详细信息区域中转到 Implementation 页。单击 NewPartnerLink Type。
- 输入
MyRole作为 First Role的名称。 - 单击 Browse选择一个端口类型文件。选择 PostOfficeServiceProject => postofficeprocess => PostOffice.wsdl => PostOfficePortType。
- 单击 OK关闭 Partner Link Type creation 对话框。
- 单击 <--> 按钮,将 MyRole 移到右侧。保存 BPEL 流程。
步骤 6.创建变量
为输入和输出消息创建变量
- 单击 Plus 图标创建一个新变量,命名为
SendMailOperationRequest。 - 转到详细信息区域中的 Message 页。单击 Browse展开 PostOfficeServiceProject展开 postofficeprocess =>PostOffice.wsdl,选择 SendMailOperationRequest。单击 OK。
- 再添加一个变量,命名为
SendMailOperationResponse。 - 单击 Browse展开 PostOfficeServiceProject展开 postofficeprocess => PostOffice.wsdl,选择 SendMailOperationResponse。单击 OK。
- 保存 BPEL 文件。
- 选择 Receive节点。转到详细信息栏中的 Implementation 页。选择 MyProcess作为 Partner Link。
- 选择 SendMailOperationRequest作为 Request。
- 确保 Create a new Process instance if one does not already exist复选框被选中。
- 选择 Reply节点。转到详细信息栏中的 Implementation 页。选择 MyProcess作为 Partner Link。
- 选择 SendMailOperationResponse作为 Response。
- 保存 BPEL 文件。BPEL 流程上不会再有红色的十字。
- 在编辑器的顶部选择标签为 PostOfficeProcess的椭圆形的节点。转到详细信息栏中的 Server页。
- 选中 Process is long-running复选框。
- 选中 Automatically delete process after completion复选框。如果该复选框未选中,流程实例不会自动删除。需要使用 Web 客户端来手动清除。
BPEL 流程可能是长期的(宏流,macroflow)也可能是短期的(微流,microflow)。长期的流程能够长时间的运行。抵押批准就是一个长期流程的实例,其中包括人们的交互,还有可能持续一定的时期。模拟一个长期或短期流程的步骤几乎一致。只需要修改 BPEL 流程 Server 页的属性就可以把一个短期的流程变为长期流程。主要的不同在于部署阶段。将一个长期流程部署到 Integration Test Server 时,需要在运行流程前创建数据源和表。因为长期流程是作为容器管理(container-managed) EJB (CMPs) 运行的,它保存在数据库中。短期的流程是作为不需要数据库表的会话 EJB 运行的。
步骤 7.创建一个合作伙伴链接供 Java Web 服务调用
创建一个名为 MailJavaProcess 的合作伙伴链接。该合作伙伴链接将引用 Java Web 服务的 WSDL 定义。
- 创建一个新的 Partner Link,命名为
MailJavaProcess。 - 为创建 MailJavaProcess PartnerLink 转到 implementation页。创建一个 NewPartner Link Type。
- 输入
MailJavaProcessRole作为 First Role的名称。 - Browse到 MailJavaProject =>implementation =>MailHelper.wsdl。选择 MailHelper作为端口类型。单击 OK。注意左侧是合作伙伴的端口类型。
为 Java Web 服务创建变量。这些变量用来与 Java Web 服务进行通信。
- 创建一个变量,命名为
MailRequest。选择消息为 MailJavaProject => Implementation => MailHelper.wsdl =>mailRequest。 - 创建一个变量,命名为
MailResponse。选择消息为 MailJavaProject => Implementation => MailHelper.wsdl =>mailResponse。
创建调用节点。
- 删除 Receive和 Reply节点之间紫色的链接。
- 在 Flow内部任何地方添加一个 Invoke节点。或者右键单击 Flow选择 Add =>Invoke。
- 选择 Invoke节点,转到 implementation 页。
- 选择 MailJavaProcess作为 Partner Link。
- 选择 MailRequest作为 request, MailResponse作为 response。
- 添加一个 Assign节点。右键单击 Flow=> Add =>Assign。
- 右键单击 Receive=> Set Links between Flow activities=> Assign。
- 右键单击 Assign=> Set Links between Flow activities=> Invoke。
- 右键单击 Invoke=> Set Links between Flow activities=> Reply。
- 右键单击 Flow=> Align Flow Contents Automatically。
图 13.含有 Java 调用的 PostOfficeProcess.bpel
完成赋值的实现。
- 单击 Assign并转到 implementation 页。在 From下拉框中选择 Variable or Part。
- 从 SendMailOperationRequest中选择 ReceiverAddress。
- 在 To下拉框中选择 Variable or Part。
- 从 MailRequest中选择 MailToAddress。
- 保存 BPEL 文件。
步骤 10.运行 BPEL 流程
继续构建 BPEL 流程之前迅速运行一下该流程。
- 在 Services 视图中,右键单击 PostOfficeProject =>Properties =>Java Build Path=>选中 SimpleServiceProject。单击 OK。
- 右键单击 PostOfficeProcess.bpel =>Enterprise Services =>Generate Deploy Code。
- 选择 MailJavaProcess =>Browse =>MailJavaProject =>implementation =>MailHelperJavaService.wsdl。
- 单击 OK。
- 将 EAR Project 添加到 Server 上。右键单击 IT Server,选择 Add and remove projects。
- 单击 Add All。单击 Finish。
- 右键单击 IT Server,选择 Create tables and data sources。由于该 BPEL 流程是长期运行的,所以这一步骤必不可少。对于短期流程可以省略该步骤,就象第一部分中创建的那个流程那样。
- 启动服务器。右键单击 IT Server,选择 Start。
- 启动 BPE Web 客户端 http://localhost:9080/bpe/webclient。
- 单击 My Templates。选择 PostOfficeProcess =>Start Instance。
- 在地址栏中输入值。您将看见 Java Web 服务从控制台被调用。
调用另一个业务流程
本部分是上一部分的延续。将使用同一个服务项目和 BPEL 文件。本部分会扩展第 4 部分中创建的 BPEL 流程,使其成为一个调用第 3 部分中创建的 MailValidatorProcess BPEL 流程的复合业务流程。停止运行中的服务器。
步骤 1.创建一个合作伙伴链接供 BPEL 服务调用。
创建一个名为 MailValidatorProcess 的合作伙伴链接。
- 在
PostOfficeProcess.bpel编辑器中,创建新的 Parter Link,并将其命名为MailValidatorProcess。 - 转到 MailValidatorProcess Partner Link 的 implementation 页。单击 New创建 Partner Link Type。
- 输入
MailValidatorProcessRole作为 First Role的名称。 - Browse到 SimpleServiceProject =>validatorprocess =>MailValidator.wsdl。选择 MailValidatorPortType作为端口类型。单击 OK。
图 15. MailValidatorProcess PartnerLink
为 BPEL 流程创建变量
- 创建一个变量,命名为
ValidatorOperationRequest。选择消息为 MailJavaProject =>Implementation =>MailValidator.wsdl =>ValidatorOperationRequest。 - 创建一个变量,命名为
ValidatorOperationResponse。选择消息为 MailJavaProject =>Implementation =>MailValidator.wsdl =>ValidatorOperationResponse。 - 保存 BPEL 文件。
为 BPEL 流程添加新节点。本实例将对 BPEL MailValidatorProcess 实施一个调用命令,让其在调用 Java Web Service MailJavaProcess 发送邮件之前验证寄件地址。
- 删除 Assign节点。
- 在 Flow中添加 Invoke 节点,并命名为
MailValidatorInvoke。 - 在 Flow中添加 Assign 节点,并命名为
MailValidatorAssign。 - 在 Flow中再添加一个 Assign 节点,并命名为
JavaInvokeAssign。 - 创建从 Receive到 MailValidatorAssign的链路连接(link connection)。
- 创建从 MailValidatorAssign到 MailValidatorInvoke的链路连接。
- 创建从 MailValidatorInvoke到 JavaInvokeAssign的链路连接。
- 创建从 JavaInvokeAssign到 Invoke的链路连接。
修改 MailValidatorAssign 节点。该赋值节点将值从 SendMailOperationRequest 复制到 ValidatorOperationRequest。这为 MailValidatorInvoke 提供了输入值。
- 选择 MailValidatorAssign并转到 implementation 页。在 From下拉框中选择 Variable or Part。选择 SendMailOperationRequest =>SendMailOperationRequest =>SenderAddress。
- 在 To下拉框中选择 Variable or Part。选择 ValidatorOperationRequest =>ValidatorOperationRequest =>SenderAddress。
- 单击 New创建第二个赋值规则。
- 在 From下拉框中选择 Variable or Part。选择 SendMailOperationRequest => SendMailOperationRequest => ReceiverAddress。
- 在 To下拉框中选择 Variable or Part。选择 ValidatorOperationRequest => ValidatorOperationRequest => ReceiverAddress。
修改 MailValidatorInvoke
- 选择 MailValidatorInvoke并转到 implementation 页。在 Partner Link下拉框中选择 MailValidatorProcess。
- 选择 ValidatorOperationRequest作为 Request。
- 选择 ValidatorOperationResponse作为 Response。
修改 JavaInvokeAssign 节点。该赋值节点将值从 ValidatorOperationResponse 复制到 MailRequest。这为 MailJavaInvoke 提供了输入值。
- 选择 JavaInvokeAssign并转到 implementation 页。在 From下拉框中选择 Variable or Part。选择 ValidatorOperationResponse =>ValidatorOperationResponse =>MailToAddress。
- 在 To下拉框中选择 Variable or Part。选择 MailRequest =>mailRequest =>mailToAddress。
- 保存 BPEL 文件。
- 在 Services 视图中,右键单击 PostOfficeProject,选择 Properties =>Java Build Path =>选中 SimpleServiceProject。单击 OK。
- 右键单击 PostOfficeProcess.bpel,并选择 Enterprise Services => Generate Deploy Code。
- 选择 MailJavaProcess =>Browse =>MailJavaProject =>implementation =>MailHelperJavaService.wsdl。
- 选择 MailValidatorProcess => Browse => SimpleServiceProject => validatorprocess => MailValidatorProcess_MailValidatorPortType_EJB.wsdl。
- 单击 OK。
- 将 EAR Project 添加到 Server 上。右键单击 IT Server,选择 Add and remove projects。
- 单击 Add All。单击 Finish。
- 右键单击 IT Server,选择 Create tables and data sources。由于该 BPEL 流程是长期运行的,所以这一步骤必不可少。
- 启动服务器。右键单击 IT Server,选择 Start。
- 启动 BPE Web 客户端并为 PostOfficeProcess 创建实例。
- 输入
123 Front St., Toronto作为 ReceiverAddress,输入8200 Warden Ave., Markham作为 SenderAddress。 - 在控制台上会看到如下输出信息。程序会转到 MailValidatorProcess BPEL 流程来验证地址,然后调用 Java Web 服务 MailJavaProcess 发送邮件。
Receiver Address: 123 Front Toronto Sender Address: 8200 Warden Ave. Markham Mail To Address: 123 Front Toronto Sending mail to 123 Front Toronto
结束语
本教程只涵盖了创建简单 BPEL 流程的基本内容。您已经创建了一个简单的业务流程,它调用一个 Java 合作伙伴和一个 BPEL 合作伙伴。在本教程中,这些合作伙伴位于同一台服务器上。实际上,合作伙伴可以存在于业务流程未知的不同的服务器上。甚至可以将 BPEL 流程发布为 Web 服务,供其他潜在的合作伙伴调用。利用 WebSphere Studio Application Developer Integration Edition 中的工具,可以轻松的开发、集成和测试业务流程。
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文.
- Web 服务业务流程执行语言(BPEL4WS)规范——由一个跨行业的工作组发布的公共草案版本 1.1。
- Web 服务描述语言(WSDL)规范——World Wide Web Consortium (W3C) 的版本 1.1
- WebSphere 零售书籍——在 Knowledge Resource Center developerWorks 书店,有关于 WebSphere 和开发者感兴趣的其他主题的书籍出售,大部分书籍打 30% 的折扣。
| 作者简介 Jane Fung是 IBM 多伦多实验室的一位软件开发人员。在 WebSphere Studio Application Developer Integration Edition 从事调试工具工作。她的专长包括 BPEL 和业务规则。她是 Java 2 认证程序员并获得 Waterloo 大学的电气工程学位。您可以通过 jcyfung@ca.ibm.com与 Jane 联系 |
浙公网安备 33010602011771号