如何使用JSF实现与BPEL HumanTask的交互?

日期: 2010-10-17 作者:Sridevi 来源:TechTarget中国 英文

  BPEL代表业务流程执行语言(Business Process Execution Language),它是面向服务架构(Service Oriented Architecture,SOA)的关键技术之一,为描述内部或外部信息交换提供了一种业务流程引擎。BPEL明确针对业务流程的功能性方面:控制流(分支、循环、并行)、异步会话和关联、长期运行的嵌套工作单元、故障和补偿。

  BPEL专门用来处理以下业务流程难题:

  协调服务之间的异步通信, 关联各方之间的消息交换, 实现并行活动处理, 在合作伙伴交互之间处理数据, 支持长期运行的业务事务和活动。

  业务流程中的用户交互

  BPEL业务流程被定义为可以调用服务的活动集合。BPEL不会区分由应用程序提供的服务和其他交互,比如人机交互,人机交互非常重要,因为真实的业务流程不仅涉及系统和服务,还会涉及到用户。业务流程中的用户交互可以非常简单,比如批准某项任务或决策,也可以非常复杂,比如委托(delegation)、续订(renewal)、升级(escalation)、委任(nomination)或链式执行(chained execution)。

  任务审批是最简单也是最常见的用户交互。在一个保险业务流程中,比如用于批准某项保险索赔,可能需要用户交互来确定是否批准这项索赔。如果情况更复杂的话,业务流程可能需要多名用户依次或同时做出批准。在需要用户依次做出批准的场景中,流程中的下一个用户经常需要查看由前一个用户做出的决策。有时,特别是出现并行用户交互的情况下,不允许用户查看其他用户的决策。这使决策具有更多的可能性。有时,用户甚至不知道哪些用户参与到流程中——或者根本不知道是否涉及其他用户。

  BPEL为业务流程中的人机交互提供了Human任务组件。

  创建含有HumanTask的BPEL

  让我们从一个样例研究案例开始,批准保险索赔的过程是一个业务流程,其中保险索赔的提交者和批准者是流程的参与者,并且批准状态由Human Task做出。该案例涉及客户的个人信息和索赔信息,比如customerID、customerName以及索赔描述和索赔数量等。在真实的业务中,我们将按照HIPPA和HL-7 等HealthCare Standards获取信息,从而可以在异构系统中实现互操作。

  下面是创建Insurance Claim Business流程的步骤。

  切换到Business Integration Perspective。

  通过选择File > New > Module创建新的Business Integration Module。

  单击Finish,创建InsuranceClaimModule。

图 1. 创建业务模块

图 1. 创建业务模块

图 2. 创建业务对象
 
图 2. 创建业务对象

    创建业务模块后,它将打开模块,如图 2 所示。

  创建所需的业务对象(Data 类型)。

  右键单击Data Types > New > Business Object。

  单击Finish,将创建一个空对象。

  向该对象添加一些必需的字段及字段类型。

图 3. 向业务对象添加字段

图 3. 向业务对象添加字段

  在我们的场景中,必需的字段为CustomerInformation和ClaimInfomation,其中,CustomerInformation保存CustomerId、CustomerName等值,而ClaimInformation包含描述和数量信息。Business Editor中的典型Business Object如图 3 所示。

图 4. 创建接口

图 4. 创建接口

  创建接口InsuranceClaim和ClaimReview。

图 5. 向接口添加操作

图 5. 向接口添加操作

    InsuranceClaim接口将processClaim() 作为操作,将CustomerInformation和ClaimInformation作为输入,将决策作为输出。

  ClaimReview接口将review() 作为操作,将ClaimInformation作为输入,将结果作为输出。

图 6. 创建业务流程

图 6. 创建业务流程

  创建新的业务流程。

  右键单击Business Logic > New > Business Process。

图 7. 选择流程类型

图 7. 选择流程类型

  如图 7 所示,选择Long-Running流程,因为它包含人机交互。

图 8. 选择一个接口

图 8. 选择一个接口

  这里我们选择了一个需要与流程进行映射的接口,流程将作为Receive活动的输入。
 
  为此,需要单击Select an Interface单选按钮并选择InsuranceClaim接口和processClaim()操作。

  单击Finish,将创建ClaimBusinessProcess。

图 9. 映射字段

图 9. 映射字段

  向Receive活动映射InsuranceClaim接口、processCLaim操作和输入。

  Reply活动被映射到输出字符串决策。

图 10. 业务流程编辑器

图 10. 业务流程编辑器

    在业务编辑器的右上方,我们可以看到Interface Partners及其对应的变量。图 10 展示了具有宏流(macro flow)的业务流程,该宏流包含了Receive和Reply活动,我们可以从面板中拖拽Human Task来添加它。

图 11. 添加人工任务

图 11. 添加人工任务

  处理索赔的核心决策是通过使用人工任务(human task)作出的,我们将选择一个合适的接口,它将根据用户的决策选择流程。在我们的例子中,我们选择了ClaimReview接口,它具有review()操作,返回Boolean值,表示批准索赔要求。如图 11 所示,为任务命名并选择合适的接口,然后添加类型为Boolean的新变量“result”。

图 12. 向人工任务添加属性

图 12. 向人工任务添加属性

  在properties选项卡中向review()操作添加映射变量。

  在humantask活动之后添加代码片段,显示来自人工任务的结果并向代码片段提供以下java代码。 
   

以下是引用片段:
if(result.booleanValue() == true)
{
   decision = “approved”;
}
else
{
  decision = “rejected”;
}      
   System.out.println(“result:”+decision);

图 13. 添加代码片段

图 13. 添加代码片段

    流程流的典型视图和java代码编辑器将如图 13 所示。

  执行完合适的映射后,保存模块。

  为HumanTask生成用户界面

  在前面一节中,我们创建了一个业务流程,它将获取信息、处理信息并根据人工任务交付输出。现在,完整的BPEL被公开为一个界面,我们需要对它执行下面的步骤:

  将BPEL组件放到Assembly Diagram中。

  双击Assembly Diagram,打开Assembly diagram编辑器。

  将ClaimBusinessProcess bpel拖拽到编辑器中。
 
  右键单击Processes下的ClaimBusinessProcess,选择Generate User Interfaces。

图 14. 生成用户界面

图 14. 生成用户界面

图 15. 用户界面向导

图 15. 用户界面向导

  在我们BPEL流程中默认选择JSF定制客户机和人工任务作为Generator Type。

  单击Next以继续。

图 16. 创建Web模块

图 16. 创建Web模块

  生成的用户界面应当位于某些web项目中,可以执行下面的操作来实现:

  命名web项目。

  为生成的页面选择User Interface样式并单击Finish。

  动态web项目及其对应的EAR将被创建。

  运行项目

  现在,是时候来测试我们的BPEL人工任务了。完成下面的步骤:

  启动服务器并向其中添加这两个项目。

  右键单击服务器>选择Add and Remove projects>选择BPEL项目和web项目EAR,单击Finish。

图 17. 添加BPEL和Web项目

图 17. 添加BPEL和Web项目

图 18. 添加BPEL和Web项目,步骤 2
 
图 18. 添加BPEL和Web项目,步骤 2

    换到Assembly diagram。

  右键单击BPEL组件>选择Test Component。

  填充Initial request parameters部分的所有细节。

  选择Invoke in Events部分并单击continue。

  流程将在人工任务阶段暂停,等待输入。

  要调用Human Task,运行Web项目。

图 19. 运行JSF用户界面

图 19. 运行JSF用户界面

    使用服务器凭证登录服务器,这会将您重定向到settings.jsp页面。
 
  选择open链接,开始处理人工任务。窗口将显示等待状态中的任务。

图 20. 暂停的人工任务

图 20. 暂停的人工任务

  选择显示了所需的输入数据和claim按钮的任务。

图 21. 接收的输入参数

图 21. 接收的输入参数

  单击claim按钮。

图 22. 人工任务决策

图 22. 人工任务决策

  要批准索赔,单击result复选框。

  要将任务置于暂停状态,单击save按钮。

  要拒绝索赔,单击release。

图 23. 显示结果

图 23. 显示结果

  图 23 展示了代码片段的结果以及BPEL中余下的活动。

  在真实场景中,将使用相同的方式将用户重定向到另一个页面,后者帮助用户导航到其他屏幕/操作。我们在这里使用的用户界面是由WebSphere Integration Developer默认提供的。要获得更丰富的感观,可以根据我们的业务需求进行定制。

  结束语

  本文总结了使用BPEL和JSF技术的SOA应用程序开发。它主要关注为大多数业务流程中常见的BPEL人工任务开发定制的用户界面。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

Sridevi
Sridevi

相关推荐

  • 事件驱动框架和SOA在空军的应用

    空军正在利用SOA来改善数据共享,并实时跟踪战机,美国空军机动司令部的Michael Marek解释了企业可从中学习的经验。

  • 揭秘New Relic APM技术细节

    New Relic应性能管理(APM)套件主要用于Web软件开发。它允许用户在面向服务的架构(SOA)上跟踪关键事务性能,并且支持代码级别的可见性来评估特定代码段和SQL语句对性能的影响

  • 仅凭SOA和云无法解决业务数据管理风险问题

    SOA和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。

  • 购买应用集成工具可以采取平衡做法

    购买应用程序集成工具需要好好看看你的公司需求,知道从供应商里面要寻找哪些关键功能。