集成 JMS 与 IBM Business Process Manager 的实用方法

在本文中,您将学习如何使用 IBM Business Process Manager V7.5 实现一个 Java™ Message Service (JMS) 发起的 Undercover Agent (UCA),以支持直接将 JMS 消息发送到 Business Process Manager Event Manager 而无需任何自定义配置。此方法提供了一种简洁方式来实现在 Process Center 中调用业务流程的异步方法。

Sharad Chandra, 高级 WebSphere 顾问, IBM

作者照片Sharad Chandra 是 IBM 印度软件实验室 IBM PartnerWorld for WebSphere 中的一名高级顾问。他在使用 WebSphere Process Server、WebSphere Lombardi 和 SOA 产品套件开发解决方案方面拥有丰富的经验。在当前的职位上,Sharad 从事过多项涉及可伸缩且高度可用的 WebSphere 基础架构、解决方案开发、迁移、性能调优和故障排除的重要活动。



Sateesh Balakrishnan, IT 专家, IBM

Sateesh Balakrishnan 的照片Sateesh Balakrishnan 是 IBM Software Services for WebSphere (ISSW) 的 IT 专家。他拥有 10 多年的从业经验,目前从事 BPM 和 BRMS 研究,专攻 WebSphere Lombardi 和 WebSphere ILOG。在以前的 ISSW 职位上,他从事过应用程序基础架构研究,专攻 WebSphere Application Server、J2EE 应用程序迁移,以及故障排除和 WebSphere Application Server 调优。他在 IBM 从事过各种工作,包括 J2EE 解决方案的设计和开发。他目前的兴趣是 BPM 和 BRMS 系统。



2012 年 7 月 30 日

简介

Java™ Message Service (JMS) 是一个消息系统,用于实现 Java 应用程序的异步编程风格,也可用于集成异构的平台。例如,要将一个第三方应用程序与 IBM Business Process Manager V7.5 相集成,普通的实现方法是在应用服务器中创建一个 JMS 提供程序(服务集成总线、JMS 队列连接工厂和队列等),然后在 Business Process Manager 中创建一个 JMS 集成服务,以连接配置的提供程序来发送或获取消息。本文将介绍一个使用 JMS 与 Business Process Manager V7.5 集成的场景,该场景中利用了现有的消息基础架构和 Process Server 的 Event Manager。尽管这是一种相对简单的实现模式,但它为开发更复杂的解决方案提供了基础。

Process Server 中的 Event Manager 会响应外部事件。Event Manager 对传入的消息进行排队,并触发合适的 UCA。图 1 展示了 Event Manager 如何接收和处理传入的请求。Event Manager 使用 UCA 找到与该事件有关联的服务。所以,如果您希望在收到传入消息事件时调用一个服务,或者如果您希望在出现一个定期发生的事件时调用一个服务,您应该创建一个 UCA。

图 1. Event Manager 执行
Event Manager 执行

UCA 的作用

UCA 在外部系统与业务流程定义 (BPD) 之间建立一座桥梁。您可以使用 UCA 管理与外部系统进行的入站和出站通信。UCA 通过一条消息或按特定的时间表监听来自外部系统的事件。如果您希望向 JMS 监听器发送一条消息,Event Manager 有一个已定义的 XML 消息结构,该结构必须从外部系统接收消息。UCA 负责触发 BPD 中包含的一个 Start Message Event 或 Intermediate Message Event。

以下队列与 UCA 有关联:

  • 异步队列:允许 Event Manager 作业同时运行。
  • SYNC_QUEUE_1:强制一个作业在上一个作业完成后启动。默认情况下,有 3 个同步队列可用。
  • SYNC_QUEUE_2:强制一个作业在上一个作业完成后启动。默认情况下,有 3 个同步队列可用。
  • SYNC_QUEUE_3:强制一个作业在上一个作业完成后启动。

默认情况下,有 3 个同步队列可用。所有这些队列都在服务器启动时初始化。

第 1 步. 创建一个流程

本文中使用的流程应用程序是一个实现为 Coach 的简单的人工服务,如图 2 所示,它显示了通过一个消息事件接收的数据,该事件被配置为与 UCA 进行交互。

图 2. 显示收到的数据的 Coach
显示收到的数据的 Coach

图 3 显示了该流程收到并在 Coach 中发布的输入数据。

图 3. 流程的输入数据
流程的输入数据

第 2 步. 创建一个事件处理程序服务

事件处理程序服务就是一个 General System 服务,它是 UCA 的核心。此服务因外部刺激而接收数据,并通过 UCA 将数据发送到一个 BPD 流程。您需要定义输出数据,并将这些数据显式地映射到此服务的输入数据,否则输出数据将为 null。为此服务定义的数据应与 BPD 流程需要的输入数据相同。要定义该服务,请执行以下步骤:

  1. 选择 General System Service,如图 4 所示,将该服务命名为 ComplexUCAService
    图 4. 创建一个 UCA 服务
    创建一个 UCA 服务
  2. 使用 Variable 选项卡定义 BPD 流程需要的输入和输出数据,如图 5 所示。
    图 5. 创建 UCA 服务的 Input 和 Output 参数
    创建 UCA 服务的 Input 和 Output 参数
  3. 添加一段服务器脚本,并将它连接到输入和输出。将该脚本命名为 Input -OutputMapping,将输入数据显式地映射到组件的 Implementation 属性中的输出变量,如图 6 所示。
    图 6. UCA 服务的 “输入-输出” 映射
    UCA 服务的 “输入-输出” 映射

第 3 步. 创建 UCA

您必须在引用 UCA 之前创建它。要创建一个 UCA 并将它与 General System 服务相关联,请执行以下步骤:

  1. 在 Designer 视图中,选择 Implementation 旁边的加号 (+),然后选择 Undercover Agent,如图 7 所示。
    图 7. 创建一个 UCA
    创建一个 UCA
  2. 在 New Undercover Agent 对话框中,指定以下信息,如图 6 所示,然后单击 Finish
    • Name:为新 UCA 指定一个名称。
    • Schedule Type:从列表中选择 On Event
    • Attached Service:单击 Select 选择要在收到事件时调用的服务。对于本例,请选择 ComplexUCAService
    图 8. 配置 UCA
    配置 UCA
  3. 创建 UCA 后,将会显示一个对话框,您可以在其中配置 UCA 属性,如图 9 所示。在这里,您需要将 UCA 与刚创建的新服务相关联。确保勾选了 Enabled,以便在事件到达时启用服务的执行。如果未勾选该复选框,Event Manager 不会在收到外部消息时运行 UCA。请注意,Event Manager 监视器可能会显示 Event Manager 已执行 UCA,但如果未勾选 Enabled,则不会执行 UCA。

    Parameter Mapping 部分中,勾选 Use Default,以便在附加的服务中使用输入变量的默认值。如果附加的服务的输入变量没有默认值,则禁用此复选框。在大部分情况下,需要的值都包含在传入消息事件中,无需执行任何操作。

    图 9. 将 UCA 服务与 UCA 关联
    将 UCA 服务与 UCA 关联

第 4 步. 向 Event Manager 发送一条消息

要通过 UCA 发送应用程序数据来调用一个 BPD 流程,您需要将数据封装在一个预定义的 XML 结构中,该结构使用 eventmsg 作为 root,如下面的清单所示:

String data="<eventmsg><event processApp="JMSTA" snapshot="JMSTASNAPSHOT" 
ucaname="complexBOUCA">complexBOUCA</event>
<parameters>
   <parameter>
      <key>ucacomplexInput</key>
      <value>
         <customerID>"+customerID+"</customerID>
         <name>"+name+"</name>
         <address>"+address+"</address>
         <surname>"+surname+"</surname>
         <city>"+city+"</city>
         <state>"+state+"</state>
         <country>"+country+"</country>
      </value>
    </parameter>
  </parameters>
</eventmsg>"

请注意,您需要将以下信息包含在 XML 标头中:

  • snapshot:流程快照名称;通过 Process Center 创建。
  • ucaname:UCA 名称,可用于 Process Center 中的 UCA 编辑器中。
  • processApp:流程名称;此缩写词在创建新流程应用程序时提供。
  • event:事件名称;在本例中为 complexBOUCA
  • key:在 UCA 服务中定义的输入对象名称。

在我们的方案中,使用了一个 servlet 客户端来向 Event Manager 发送一条消息。该 servlet 按规定的格式预先格式化消息。消息要启用 UCA 服务,则需要在基础 WebSphere Application Server 查找事件队列。引用这个事件队列的 JNDI 是 jms/eventqueue,如下面的示例中所示:
Queue ucaqueue=(Queue)ctx.lookup("jms/eventqueue");

有关消息结构的更多信息,请参阅 Business Process Manager 信息中心中的 理解消息结构


第 5 步. 定义消息事件并将它与 UCA 关联

消息事件是与 UCA 协作接收外部刺激因素来调用 BPD 流程的实际组件。您需要执行以下操作将此事件连接到某个流程任务:

  1. 在 Process Designer 中创建一个 BPD 流程。将 Start Message Event 拖放到面板上,使用一个顺序线将它连接到 Submit Request 活动,如图 10 所示。
    图 10. 创建一个消息事件
    创建一个消息事件
  2. 将消息事件与您前面定义的 complexBOUCA UCA 相关联,如图 11 所示。
    图 11. 配置消息事件
    配置消息事件

第 6 步. 测试集成解决方案

在测试解决方案之前,您需要向 AllUsers 组公开该流程,如图 12 中所示。否则,不会调用该流程并在 Process Portal 中显示它。

图 12. 向 AllUsers 公开流程
向 AllUsers 公开流程

为了测试总体解决方案,我们创建了一个基于 JSP 的简单的客户端应用程序,它部署在 WebSphere Application Server 中。使用这个 JSP 客户端(如图 13 所示,已在 本文的下载部分 中提供),您可以创建一个提交到 servlet 的请求。servlet 将消息发送到队列中,在这里供 Event Manager 使用消息。

图 13. 调用一个 JSP 客户端
调用一个 JSP 客户端

通过 JSP 客户端提交消息后,您能够以 admin 的身份登录 Process Portal。在收件箱中,应该可以看到收到消息后创建的新流程实例,如图 14 所示。如果单击流程实例中绿色的 “Run” 图标来运行流程,您会看到从客户端收到的数据,如图 14 所示。

图 14. Process Portal 中的结果
Process Portal 中的结果

第 7 步. 验证 JVM 日志中的结果

成功触发 UCA 后,您可通过 Business Process Manager JVM 日志验证调用是否成功,如图 15 所示。

图 15. systemout.log 中的消息
systemout.log 中的消息

参见图 15 的大图。)


结束语

本文介绍了如何通过将 JMS 消息发送到 IBM Business Process Manager V7.5 的 Event Manager 来启动一个流程。文中还介绍了实现 Event Manager 和 UCA 的步骤,介绍了它们之间的运行时关系。您学习了如何使用一个关联的 BPD 和 Process Cente 的默认消息基础架构将 JMS 与 Business Process Manager 集成。

致谢

感谢 Scott Simmons 和 Harsha Bhushana 对本文的审核。


下载

描述名字大小
样例场景JMSUCATEST.zip9KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=828011
ArticleTitle=集成 JMS 与 IBM Business Process Manager 的实用方法
publish-date=07302012