Jun Xue, 软件工程师, IBM
简介: 创建可以使用 WebSphere Process Server 的 Business Flow Manager 和 Human Task Manager Web 服务 API 与业务流程和人工任务交互的富 AdobeFlexWeb 客户机。
简介
Process Server 提供两个 Web 服务接口:
- Business Flow Manager API (BFM API),它让客户机应用程序可以与微型流和长时间运行的过程交互。
- Human Task Manager API (HTM API),它让客户机应用程序可以创建任务、声明和完成现有的任务等等。
- 创建业务流程应用程序
- 研究 BFM 和 HTM Web 服务 API
- 使用 Flex 创建富 Web 客户机
图 1 说明示例应用程序的架构。
图 1. 示例应用程序的架构
开始之前
- WebSphere Integration Developer V6.2:这是一个集成开发环境 (IDE),用于构建基于面向服务架构 (SOA) 的应用程序。
- WebSphere Process Server V6.2:这是一个高性能的业务流程自动运行时引擎。
- Adobe Flex Builder 3:这是一个基于 Eclipse 的强大的 IDE,用于开发 Flex 应用程序。
- OrderSampleLibrary.zip 包含预定义的业务对象和接口。
- OrderSampleProcessModule.zip 包含示例业务流程应用程序项目的源代码文件和可以在 Process Server 中安装的 Enterprise Application Archive (EAR) 文件 OrderSampleProcess.ear。
- BizFlexClient.zip 包含 Adobe Flex 项目的源代码文件。
下载这些文件,把 OrderSampleProcessModule.zip 和 BizFlexClient.zip 解压到本地目录中。
创建业务流程应用程序
图 2. 示例订购过程
在下面几节中,要导入示例库、创建组件和分配接口以及创建所需的 Java实现。
导入示例库
为了构建这个示例,需要导入 下载 中提供的 OrderSampleLibrary 中的接口和业务对象定义。按以下步骤导入库并在 Integration Developer 中创建 Order Process 应用程序模块:
- 选择 File => Import => thers => Project Interchange。
- 找到并选择 OrderSampleLibrary.zip,单击 Finish,见图 3。
图 3. 导入 OrderSampleLibrary
- 创建模块,选择 File => New => Module。
- 指定 OrderSampleProcess 作为 Module name,单击 Next。
- 在 Select Required Libraries 对话框中,确保选择 OrderSampleLibrary 并单击 Finish。
- 应该会在 Business Integration 视图中看到 OrderSampleProcess 装配图,见图 4。
图 4. Business Integration 视图中的 OrderSampleProcess
创建组件并分配接口
现在 OrderSampleProcess 应用程序可以使用 OrderSampleLibrary 中的业务对象和接口了,接下来可以创建过程、人工任务和 Java组件,在模块中分配对应的接口。
按以下步骤在装配图中添加组件:
- 分配接口,右键单击 OrderProcess,选择 Add => Interface,选择 NewOrderInterface,然后单击 OK。
- 分配接口,右键单击 ManagerApproval,选择 Add => Interface,选择 OrderApprovalInterface,然后单击 OK。
- 分配接口,右键单击 ProcessOrderService,选择 Add => Interface,选择 ProcessOrderInterface,然后单击 OK。
- 在 Add Wire 对话框中单击 OK,在 OrderProcess 与 ManagerApproval 之间以及 OrderProcess 与 ProcessOrderService 之间创建连接。
现在已经定义了三个组件,下面可以创建每个组件的实现。
创建 ProcessOrderService 的 Java 实现
当经理批准订购请求时,过程通过调用这个 Java 组件来处理订购请求。按以下步骤实现它:
- 这时会创建一个 Java 类,其中有一个与 ProcessOrderInterface 中定义的操作同名的方法。在这个方法中添加清单 1 所示的逻辑。
清单 1. ProcessOrderRequest 方法的实现
- 保存装配图。
创建 ManagerApproval 人工任务的实现
按以下步骤创建 ManagerApproval 人工任务的实现:
创建 OrderProcess 的实现
- 接收订购请求。
- 经理人工地批准请求。
- 判断经理是否批准了请求。如果请求被拒绝了,就向用户发送一条消息。如果请求被批准了,就调用 ProcessOrderService 继续处理它。
按以下步骤生成 OrderProcess 组件的实现:
- 因为经理可能无法马上处理请求,应该把这个过程设置为长时间运行的过程。确保选中 Process is long-running,见图 7。
- 我们希望用户能够看到响应,所以不希望过程实例被自动删除。对于 Automatically delete the process after completion 选择 No。
图 7. OrderProcess 详细信息
- 接下来,添加一个全局变量以保存经理批准消息。在 Variables 下面,单击加 。把这个变量命名为 approvalMsg,选择 ApprovalResponseBO 作为数据类型,然后单击 OK。这个变量会添加到变量列表中。
- 把 Basic Actions 类别中的 Invoke 拖放到 Generalized Flow 结构中,把它的名称设置为 InvokeTask。
- 选择 InvokeTask 活动,然后进入 Properties 视图并选择 Details。
- 在 Details 视图中(见图 8),选择 OrderApprovalInterfacePartner 作为 Partner,选择 approveOrder 作为 Operation。
- 在表格中,对于 Input(s),在 approvalMsg 行(最后一列名为 Read From Variable)中选择 (none)。从下拉列表中选择 orderRequest 变量。
- 对于 Output(s),在 response 行(最后一列名为 Store Into Variable)中选择 (none)。从下拉列表中选择 approveMsg 变量。
图 8. InvokeTask 活动详细信息
- 把 Structures 类别中的 Choice 拖放到 GeneralizedFlow 结构中,把它的名称设置为 Choice。把默认 case 改名为 Approve。
- 在 Properties 视图中,选择 Approve case,然后选择 Details。对于 Expression Language 选择 XPath 1.0,把条件设置为 $approveMsg/isApproval=true(),见图 9。
图 9. Approve case 详细信息
- 为 Choice 活动创建第二个 case:右键单击 Choice,然后选择 Add a case,把它改名为 Reject。
- 在 Properties 视图中,选择 Reject case,然后选择 Details。对于 Expression Language 选择 XPath 1.0,把条件设置为 $approveMsg/isApproval=false(),见图 10:
图 10. Reject case 详细信息
- 现在已经在 Choice 活动中创建了两个 case。对于每个 case,需要创建一个后续活动。把 Basic Actions 类别中的 Invoke 拖放到 Choice 结构中,放在 Approve case 后面,把它的名称设置为 ProcessOrder。
- 把 Assign 拖放到 Choice 结构中,放在 Reject case 后面,把它的名称设置为 RejectedMsg。
- 在 Properties 视图中选择 RejectedMsg 并指定详细信息,见图 11:
图 11. RejectedMsg 详细信息
- 在 Properties 视图中指定 ProcessOrder 活动的详细信息,见图 12:
图 12. ProcessOrder 详细信息
- 现在,过程的实现已经完成了。保存它之后,这个过程应该像图 13 这样。
图 13. OrderProcess 实现
OrderSampleProcess 应用程序现在完成了。部署这个应用程序之后,它就可以接收来自 Web 服务客户机的请求以创建过程并声明和完成人工任务。在 下载 中可以找到完整的示例。
了解 Business Flow Manager 和 Human Task Manager Web 服务 API
- 查询过程模板
- 创建和启动过程实例
- 查询任务集合
- 声明现有的任务
- 完成任务
- 传输工作项
从 WebSphere Process Server 导出 WSDL 文件
为了研究 BFM 和 HTM Web 服务 API,可以从 Process Server 导出 Web Service Description Language (WSDL) 文件,稍后将通过它调用 Web 服务接口。
按以下步骤导出 WSDL 文件:
- 确认 Process Server 已经启动。
- 在浏览器中登录管理控制台(默认 URL http://localhost:9060/admin)。
- 为了导出 BFM API WSDL 文件,在左边的导航条中选择 Applications => Enterprise Applications(见图 14),单击 BPEContainer_{your_nodename}_server1。
图 14. BPEContainer 应用程序
- 在应用程序的配置页面中,单击 Web Services Properties 部分中的 Publish WSDL files,见图 15。
图 15. 应用程序的配置页面
- 选择 zip 文件(见图 16),把它保存到本地目录中。
图 16. 下载页面
- 解压文件,会看到 WSDL 文件 BFMWS.wsdl。
- 为了导出 HTM API WSDL 文件,选择 Applications => Enterprise Applications 并单击 TaskContainer_{your_nodename}_server1。
- 重复以上步骤下载并解压文件,会看到 WSDL 文件 HTMWS.wsdl。
使用 Flex 构建富 Web 客户机
后端的业务流程应用程序已经完成了,现在可以使用 Flex 构建一个富 Web 客户机,让它与刚才构建的过程和人工任务交互。BizFlexClient.zip 中包含完整的 Adobe Flex 项目源代码文件。如果您还没有下载并解压这个文件,现在就执行这个步骤。
用 Flex 调用 BFM 和 HTM Web 服务
在本节中,讨论如何用 Flex 调用 BFM 和 HTM Web 服务 API。Business Process Choreographer 提供的 Web 服务 API 由 Web 服务安全机制保护。这意味着对 Web 服务接口的所有请求必须包含一个安全令牌,安全令牌代表有效的用户凭证。
有几种安全令牌。在我们的示例中,使用 Username 令牌。WSS-SOAP 消息安全文档中引入了 元素作为一种提供用户名的方法。清单 2 说明 元素的 XML 语法:
清单 2. 的 XML 语法
按以下步骤用 Flex 调用 BFM 和 HTM Web 服务 API:
- 创建一个名为 BizFlexClient 的 Flex 项目。
- 为了创建一个 Web 服务代理并让它向远程 Web 服务服务器发送请求,定义一个名为 WSBase.as 的 ActionScript 类,它扩展超类 mx.rpc.soap.AbstractWebService。这个类编码 SOAP 请求消息、把消息发送出去并处理结果,还要装载和解析 WSDL 文件。
- 为了创建 Username 令牌,在 WSBase.as 类中定义一个名为 createWSSEHeader 的函数。
- 首先需要设置用户名和密码。在这里,已经生成了 元素,密码以明文形式发送。最后,createWSSEHeader()(见清单 3)将返回一个 SOAP 头 XML 消息,它代表用户凭证。
清单 3. 在 WSBase.as 中创建 Username 令牌
- 为了在 WSBase.as 中编码 SOAP 消息,定义一个名为 encodeSOAPMessage 的函数,它把 SOAP Header 元素和 SOAP Body 元素编码为 SOAP Envelope 元素,见清单 4。这个元素是 SOAP 消息的根元素。
清单 4. 在 WSBase.as 中编码 SOAP 消息
- 为了对远程 Web 服务服务器执行调用,在 WSBase.as 中定义一个名为 call 的函数。这个函数使用 AsyncRequest 类发送异步请求,实现远程过程调用。当远程请求完成时,回调请求中指定的响应器。还需要定义 processResult 函数(处理结果数据)和 faultResult 函数(处理错误),见清单 5。
清单 5. 在 WSBase.as 中调用服务器
- 在向远程 Web 服务发送请求之前,必须装载并解析服务的 WSDL 文件。为此,在 WSBase.as 中定义一个名为 parseWSDL 的函数(见清单 6),它通过 HTTP 请求获取 WSDL 文件,当成功地装载文件时发送 Web 服务请求。
清单 6. WSBase.as 中的 WSDL 装载器
- 现在已经创建了一个简单的 Web 服务代理,下面可以创建 BFMWebService.as 和 HTMWebService.as 类来实现所需的 BFM 和 HTM API。这两个类都以 WSBase 作为超类。
- 在 BFMWebService.as 中,定义 queryProcessTemplates 和 startProcess 函数,它们与过程交互,见清单 7。
清单 7. BFMWebService.as 中的 BFMWebService 类
- 在 HTMWebService.as 中定义以下函数来操作人工任务:getTODOTasks、claim、completeWithOutput 和 transferWorkItem,见清单 8。
清单 8. HTMWebService.as 中的 HTMWebService 类
用 Flex 创建用户界面
现在已经创建了调用 BFM 和 HTM Web 服务 API 的类,下面创建一个简单的用户界面,它使用这些 API 与过程和人工任务交互。
在我们的示例中(见图 17),您会看到:
- 顶部有一个表单,它用于配置 Web 服务的参数。
- 左边有一个用于操作过程的面板,可以在其中查看过程模板并创建新的订购请求过程。
- 右边有一个用于操作人工任务的面板,可以在其中查看人工任务、声明、完成并传输工作项。
图 17. 示例应用程序的简单 UI
解压 BizFlexClient.zip 的 Flex 项目源代码目录中的 BizFlexClient.mxml 文件包含用户界面的完整源代码。可以把这个文件复制到 Flex 项目 BizFlexClient 中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!