级别: 中级
Jane Fung, 软件开发人员,WebSphere Studio Application Developer Integration Edition, IBM 多伦多实验室
Colin Yu, 技术设计人员,业务场景, IBM 多伦多实验室
2004 年 8 月
本教程讲述了在 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 文件
示例 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 创建向导创建的一个默认的服务定义:
<?xml version="1.0" encoding="UTF-8"?>
<definitions targetNamespace="http://www.example.com/process50233470/interface/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://www.example.com/process50233470/interface/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema/"
xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/">
<message name="InputMessage">
<part name="contents" type="xsd:string"/>
</message>
<portType name="ProcessPortType">
<operation name="InputOperation">
<input name="Input" message="tns:InputMessage"/>
<output name="Output" message="tns:InputMessage"/>
</operation>
</portType>
</definitions>
通过 WSDL 服务定义,业务流程可以被任何充当服务客户端的应用程序所调用。例如,一个 BPEL 流程可以被另一个 BPEL 流程调用。
创建一个简单的 BPEL 流程
在本部分中,将创建、部署并运行一个简单的 BPEL 服务。
步骤 1.创建服务项目
创建一个服务项目,命名为 SimpleServiceProject 。
1. 在 Business Integration 透视图中,选择 File =>New =>Service Project。
2. 输入 SimpleServiceProject 作为项目名称,然后单击 Finish。
步骤 2.使用 WSDL 创建服务定义
正如上面所提到的,每个 BPEL 流程需要一个 WSDL 定义,这样端口类型和操作可以供外部调用。
1. 在 Business Integration 透视图的 Services 视图中,展开 Service Projects,右键单击 SimpleServiceProject并选择 New =>Empty Service。
2. 输入 validatorprocess 作为 Package的名称。
3. 输入 MailValidator 作为 File name。单击 Finish。
4. 切换到 MailValidator.wsdl 编辑器的 Graph 视图。
5. 在 Port Types栏内单击右键,选择 Add Child =>Port Type。输入 MailValidatorPortType 作为 name,然后单击 OK。
6. 右键单击 MailValidatorPortType选择 Add Child =>operation,输入 ValidateOperation 作为 name,然后单击 OK。
7. 右键单击 ValidateOperation选择 Add Child =>Input。
8. 右键单击 Input选择 Set Message。用默认值创建一个新的 WSDL 消息,然后单击 Finish。
9. 在 Messages 栏中,右键单击 ValidateOperationRequest,选择 Add Child =>Part。输入 SenderAddress 作为 part 的 name。单击 OK。注意到消息部分缺省的有一个 xsd:string 类型,该类型是内置的 xsd 类型。
10. 再添加一个 part。右键单击 ValidateOperationRequest选择 Add Child =>Part。输入 ReceiverAddress 作为 part 的 name。单击 OK。
11. 在 Port Types 栏中,右键单击 ValidateOperation选择 Add Child =>Output。如果服务不同步,可以不需要输出。但是,如果服务同步,需要创建一个输出给调用者以返回一个响应。
12. 右键单击 Output选择 Set Message。用默认值创建一个新的 WSDL 消息,然后单击 Finish。
13. 在 Messages 栏中,右键单击 ValidateOperationRequest选择 Add Child =>Part。输入 MailToAddress 作为 part 的 name。单击 OK。
14. 保存 WSDL 文件并关闭编辑器。
图 2.MailValidator.wsdl
MailValidator.wsdl
步骤 3.创建 BPEL 流程
BPEL 流程可以是基于序列(sequence-based)的或是基于流(flow-based)的。在本步骤中,将创建一个基于序列的流程。在基于序列的 BPEL 流程中,所有的项都封装在一个序列中。另一方面,在基于流的流程中所有的项都封装在一个流中。
1. 在 Business Integration 透视图的 Services 视图中,展开 Service Projects,右键单击 SimpleServiceProject选择 New =>Business Process。
2. 输入 validatorprocess 作为 package 的名称, MailValidatorProcess 作为 File name。然后单击 Next。
3. 选择 Sequence-based BPEL Process。单击 Finish。
业务流程创建向导为新创建的 BPEL 流程创建了一个默认的 WSDL 服务定义。默认的服务定义已经定义了一些虚构的端口类型、操作和消息。但是,用户可能不会使用默认的服务定义,而使用步骤 2 中定义的 WSDL 服务定义。因此,需要清除 BPEL 流程和默认的 WSDL 文件。
1. 在 MailValidatorProcess.bpel 编辑器中,右键单击 InputVariable=> Delete。
2. 右键单击 PartnerLink=> Delete。
3. 在编辑器中打开 MailValidatorProcesInterface.wsdl ,右键单击 ProcessPortType=> Delete。
4. 右键单击 InputMessage=> Delete。
5. 保存 WSDL 和 BPEL 文件并关闭 WSDL 文件。
步骤 4.为 BPEL 流程创建合作伙伴链接
BPEL 一个重要的用途是通过 Web 服务接口与其他服务互操作的能力。与 BPEL 流程互操作的其他服务称为合作伙伴。BPEL 流程调用合作伙伴之前,需要先定义一个合作伙伴链接来引用合作伙伴的 WSDL 接口。而且,每个 BPEL 流程需要定义一个指向它自己的 WSDL 接口的合作伙伴链接,该链接自描述的。因此,每个 BPEL 流程至少要有一个描述它自己的合作伙伴链接。如果流程调用其他服务,每个服务都需要一个合作伙伴链接定义。
为 BPEL 流程创建一个自描述的合作伙伴链接。
1. 在 MailValidatorProcess.bpel 编辑器中,单击 Plus图标创建一个新 PartnerLink。
2. 输入 MyProcess 作为 Partnerlink 的名称。单击 Enter。
3. 在编辑器的详细信息区域中,转到 Implementation页。单击 New PartnerLink Type。PartnerLink Type 定义服务的角色和端口类型。
4. 输入 MyRole 作为 First role的名称。
5. 单击 Browse选择一个端口类型文件。选择 SimpleServiceProject => validatorprocess => MailValidator.wsdl => MailValidatorPortType。这是步骤 2 中定义的端口类型。单击 OK。
6. 单击 <--> 按钮,将 MyRole 移到右侧。左侧是流程调用的合作伙伴的角色。右侧是自描述的伙伴链接的角色。保存 BPEL 流程。
图 3. Mail Validator 合作伙伴链接
Mail Validator 合作伙伴链接
步骤 5.创建变量
BPEL 变量可以是 WSDL 消息类型或 XSD 元素类型。可以使用编辑器创建 WSDL 消息类型变量。WSDAIE v5.1 中的变量都是全局变量。但是,Application Developer 的以后版本中可能会引进局部变量。
为输入和输出消息创建变量。
1. 在 MailValidatorProcess.bpel 编辑器中,单击 Plus 图标创建新变量。输入 ValidateOperationRequest 作为变量名。
2. 转到详细信息区域的 Message 页。单击 Browse=>展开 SimpleServiceProject => 展开 validatorprocess=> MailValidator.wsdl=>选择 ValidateOperationRequest。单击 OK。
3. 添加另一个变量,命名为 ValidateOperationResponse 。
4. 单击 Browse=>展开 SimpleServiceProject => 展开 validatorprocess=> MailValidator.wsdl=>选择 ValidateOperationResponse。单击 OK。
5. 保存 BPEL 文件。
步骤 6.修改接收节点和应答节点
BPEL 流程通过接收节点从客户端接收输入消息时,会创建新的 BPEL 流程实例,BPEL 流程开始执行。应答节点会发送一个输出消息返回给客户端。正如前面所提到的,这个流程是同步的,因此它既有接收节点又有应答节点。用户需要在接收节点和应答节点内指定端口类型、操作和消息。实际上,BPEL 流程允许多个接收和应答节点,但这是与相关性集合(correlation set)有关的高级主题,不在本教程讨论的范围之内。
1. 选择 Receive节点,转到详细信息栏中的 Implementation 页。选择 MyProcess作为 Partner Link。
2. 选择 ValidateOperationRequest作为 Request。
3. 确保 Create a new Process instance if one does not already exist复选框被选中。
4. 选择 Reply节点。转到详细信息栏中的 Implementation 页。选择 MyProcess作为 Partner Link。
5. 选择 ValidateOperationResponse作为 Response。
6. 保存 BPEL 文件。BPEL 流程上不会再有红色的十字形标记。
图 4.修改接收节点和应答节点
修改接收节点和应答节点
步骤 7.完成 BPEL 流程
可以使用位于编辑器左边的图标菜单项给 BPEL 流程添加基本节点。或者,也可以使用上下文菜单添加新节点。
本部分中创建的 BPEL 流程用来验证邮件地址。如果来自 ValidateOperationRequest 的 ReceiverAddress 中包括 “Toronto” 或 “Markham” 等词,BPEL 流程会将 ValidateOperationResponse 中的 MailToAddress 设置为 ReceiverAddress。否则,该邮件会返回给发送人并且 MailToAddress 会设置为 SenderAddress。
1. 在接收节点后添加一个转换节点。右键单击 Reply节点,选择 Insert Before =>Switch。或者在第三级图标菜单里找到转换节点,然后简单的将其拖放到接收节点后面。图 5 显示了图标菜单的位置。
2. 右键单击 Switch,选择 Add Case。
3. 再添加一个实例。右键单击 Switch,选择 Add Case。
4. 右键单击 Switch,选择 Add Otherwise。
图 5.编辑器的图标菜单
编辑器的图标菜单
为第一个实例输入 Visual Expression。
1. 单击第一个实例节点,转到 Condition 页。为该实例输入一个 Java 表达式或 Visual 表达式。在下拉框中选择 Visual Expression。
2. 可以通过右侧栏中列出的变量访问消息的内容。单击蓝色的 Condition链接 =>展开 ValidateOperationRequest=>选择 ReceiverAddress。
3. 选择 Method or Field。
4. 选择 indexOf(ch...)。
5. 在右侧的栏中,单击蓝色的 ch...链接,然后单击 String。输入 Toronto 。
6. 将光标置于闭括号的后面。在右侧的栏上选择 >。
7. 选择 Number。输入 -1 。保存 BPEL 文件。
8. 最终的 Visual Expression 就是这样的。如果 ReceiverAddress 中包含 “Toronto”,表达式返回 true。
图 6.实例 1 中的 Visual Expression
实例1中的 Visual Expression
为第二个实例输入 Java 表达式。
1. 单击第二个实例节点转到 Condition 页。在下拉框中选择 Expression。
2. 在编辑器中输入下面的代码片段:
String receiverAddr = getValidateOperationRequest().getReceiverAddress();
if (receiverAddr.indexOf("Markham")>-1) {
return true;
}
return false;
3. 如果发送人地址中包含 Markham 这个词,上面的代码片段将返回 true。保存 BPEL 文件。
为第一个实例添加 JavaSnippet 节点。
1. 右键单击第一个 Case,选择 Add =>Java Snippet。Java Snippet 允许用户输入 Java 代码。这遵从的不是标准的 BPEL 规范,而是 IBM BPEL+ 规范。
2. 单击 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);
3. 如果出现编译错误,在编辑器内单击右键并选择 Source =>Organize Imports。系统会自动判断是否需要导入其他文件来解决编译错误的问题。
4. 这段代码片段会将请求中的 ReceiverAddress 复制到应答中的 MailToAddress。保存 BPEL 文件。
为第二个实例添加一个 Assign节点。在第一个实例中,Java Snippet 节点用于在变量之间复制值。这不是唯一的方法,也可以用赋值节点来实现这个功能。
1. 右键单击第二个 Case,选择 Add =>Assign。
2. 单击 Assign转到 implementation 页。在 From下拉框中选择 Variable or Part。
3. 展开 ValidateOperationRequest直到看见 ReceiverAddress。选择 ReceiverAddress。
4. 在 To下拉框中选择 Variable or Part。
5. 从 ValidateOperationResponse中选择 MailToAddress。将请求中的 ReceiverAddress 复制到应答中的 MailToAddress。
图 7. 赋值节点的执行
赋值节点的执行
给其他的节点添加赋值节点。
1. 右键单击第二个 Case,选择 Add =>Assign。
2. 单击 Assign转到 implementation 页。在 From下拉框中选择 Variable or Part。
3. 从 ValidateOperationRequest中选择 SenderAddress。
4. 在 To下拉框中选择 Variable or Part。
5. 从 ValidateOperationResponse中选择 MailToAddress。
在应答节点前添加一个 JavaSnippet 节点。该 JavaSnippet 节点将仅仅打印系统输出。
1. 右键单击 Reply,选择 Insert Before =>Java Snippet。
2. 在编辑器中输入下面的代码片段。保存 BPEL 文件。
String receiverAddress = getValidateOperationRequest().getReceiverAddress();
String senderAddress = getValidateOperationRequest().getSenderAddress();
String mailtoAddress = getValidateOperationResponse().getMailToAddress();
System.out.println ("Receiver Address: " + receiverAddress);
System.out.println ("Sender Address: " + senderAddress);
System.out.println ("Mail To Address: " + mailtoAddress);
BPEL 流程创建完成。下一步是生成部署代码并在服务器上进行测试。
图 8.MailValidator.bpel 完结版本
MailValidator.bpel 完结版本
步骤 9.生成部署代码
要在 WebSphere Integration Test Server 中运行 BPEL 流程,必须生成部署代码。本步骤将为 BPEL 流程创建 EAR 和 EJB,他们可以部署到测试服务器上。
1. 在 Services 视图中,右键单击 MailValidatorProcess.bpel选择 Enterprise Services =>Generate Deploy Code。
2. 接受所有的默认设置,然后单击 OK。生成代码之后,可以看见创建了三个项目:SimpleServiceProjectEAR、 SimpleServiceProjectEJB 和 SimpleServiceProjectWeb。
步骤 10.部署到测试服务器
创建一个名为 IT Server 的整体测试环境服务器。
1. 在 Servers 视图中,单击右键并选择 New =>Server and Server Configuration。
2. 选择 WebSphere version 5.1 =>Integration Test Environment。
3. 输入 IT Server 作为 server name。单击 Finish。
4. 将 EAR 项目添加到服务器上。右键单击 IT Server,选择 Add and remove projects。
5. 单击 Add All。单击 Finish。
6. 启动服务器。右键单击 IT Server,选择 Start。
步骤 11.运行 BPEL 流程
1. 启动服务器后,打开 BPE Web 客户端。可以通过服务器上的上下文菜单打开。右键单击 IT Server,选择 Launch Business Process Web Client。或者,在 Web 浏览器中输入 http://localhost:9080/bpe/webclient。
2. 单击 My Templates。
3. 选择 MailValidatorProcess =>Start Instance。
4. 输入 123 Queen St., Toronto 作为 ReceiverAddress。
5. 输入 8200 Warden Ave., Markham 作为 SenderAddress。
6. 单击 Start Instance创建一个 BPEL 流程的新实例。
7. 从控制台上可以看见, 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
8. 再运行一次。输入 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 流程。[img][/img]
分享到:
相关推荐
标题中的“websphere缓存java调用以及jar包”指的是在IBM WebSphere Application Server (WAS) 中使用Java编程方式来管理和操作缓存系统。WebSphere应用服务器提供了一种高效的方式来存储和检索频繁访问的数据,以...
在《BPEL for Web Services - BPEL and BPEL4WS 2nd》这本书中,读者可以期待深入理解以下几个核心知识点: 1. **BPEL语法与结构**:书中会详细介绍BPEL的语法元素,包括活动(activities)、流程(processes)、...
【标题】"在 WebSphere Studio V5.1.2 中使用代码片段进行 EJB 编程"涉及到的关键知识点包括WebSphere Studio的版本信息、企业级JavaBeans (EJB) 编程、代码片段的使用以及应用程序开发工具。在这个场景中,...
1. **安装Structs库**:首先,你需要在WebSphere Studio中添加Structs的JAR文件到项目的类路径中,这可以通过"项目属性" -> "Java构建路径" -> "库" -> "添加外部JARs"来完成。 2. **创建Structs配置文件**:在Web...
WebSphere Studio Application Developer (WSAD) 是IBM推出的一款强大的集成开发环境,主要用于构建、测试和部署基于Java EE(Java Platform, Enterprise Edition)的应用程序。在Version 5的时代,它主要聚焦于EJB...
IBM WebSphere Studio 是IBM公司开发的一款集成开发环境(IDE),专门用于构建基于Java EE(Java Platform, Enterprise Edition)的应用程序,它在WebSphere应用服务器上运行,提供了全面的开发工具和服务,以帮助...
标题"Self-Study Guide: WebSphere Studio Application Developer and Web Services"表明这是一份专注于IBM WebSphere Studio Application Developer软件及其在Web服务开发中应用的自学指南。WebSphere Studio ...
该书主要介绍了IBM WebSphere Business Integration(WBI)框架下的核心组件和技术,包括Process Server、BPEL、SCA以及面向服务的架构(SOA)等。 #### 二、Process Server Process Server是IBM WebSphere Process ...
《WebSphere Studio应用开发指南》深入解析 一、引言:WebSphere Studio概览与核心概念 《WebSphere Studio应用开发指南》是一部详尽的技术文献,由IBM公司于2003年7月首次发布,旨在指导开发者如何利用WebSphere ...
- **SDO在WebSphere Studio中的集成**:WebSphere Studio 5.1.2提供了对SDO的支持,使开发者能够更轻松地在他们的JSF应用中利用SDO的功能。这包括在IDE中创建、编辑和操作SDO相关的代码和配置。 #### WebSphere ...
4. **开发Web服务**:使用WS_SDK_JAVA_TECH提供的工具,如wsimport,生成服务客户端代码或者服务端实现类。这些工具能够从WSDL(Web服务描述语言)文件中自动导出Java代码。 5. **部署Web服务**:将开发好的Web服务...
这些示例会帮助你理解如何在实际应用中使用IBM MQ。 通过这个项目案例,你可以深入了解Java与IBM MQ的整合,这对于构建跨平台、高可用性的企业级应用非常有价值。在实践中,你还可以探索IBM MQ的高级特性,如事务...
开发BPEL流程通常需要使用专门的工具,如Oracle BPEL Process Manager、Apache ODE或IBM WebSphere Lombardi Edition等。这些工具提供了图形化界面,便于创建、测试和部署BPEL流程。 5. **发布与执行** 创建完...
WebSphere MQ for Java 是 IBM 提供的一个用于 Java 开发者集成消息传递功能的库,它使得 Java 应用程序能够直接与 WebSphere MQ Server 交互,或者作为客户端连接到 WebSphere MQ 服务。这个框架提供了可靠的、跨...
**BPEL(Business Process Execution Language)** 是一种用于描述业务流程和服务编排的语言,它在Web服务领域中扮演着重要角色。BPEL的主要目标是为了解决企业级服务之间的交互问题,允许开发者将多个Web服务组合成...
在WebSphere上部署CXF(CXF全称为Apache CXF,是一个开源的Java服务框架)时,可能会遇到一系列挑战。本文将深入探讨这些常见问题及其解决方案,帮助你顺利地在WebSphere应用程序服务器上运行CXF服务。 首先,理解...
在Java开发中,调用Web服务(WebService)是一项常见的任务,尤其在系统间集成和跨平台通信时。WebService是一种基于标准的、平台和语言无关的通信机制,它允许不同的应用程序之间通过HTTP进行交互。要使用Java来...
在Java中使用WebSphere MQ,你需要了解以下几个核心概念: 1. **Message Queuing (MQ) 概念**:MQ是一种异步通信模型,它将消息存储在队列中,等待消费者处理。这种模式可以提高系统的可靠性和可扩展性,因为发送者...