jBPM-4.4:fork和join的一个例子

现在,有这样一个需求:

1、真正开始执行实际业务之前,因为要和多方进行交互(远程通信),需要对对外部各方进行一系列的鉴权;

2、对外部各方之间进行鉴权,存在一定的先后顺序;

3、如果某一个鉴权步骤失败,整个流程终止;

4、全部鉴权完毕后,需要收集一些数据(组装报文),为后续的业务调用提供组装报文的数据。

通过jBPM的fork和join可以很好地实现上述的需求,我们定义的流程,如下图所示:

上述流程对应的流程定义文件multiple-fork-join-process.jpdl.xml内容如下所示:

上述流程简要描述如下:

1、校验用户(CheckUser)的合法性,例如如果是远程移动支付,用户提供的手机号必须在线,而且开通了某项业务鉴权才通过,才可以进行后续的校验;

2、校验提供商品的商户(CheckMer),校验提供支付的银行(也就是支付商,CheckBank),校验提供的商品(CheckGoods),这几项是可以并行进行的(不过,貌似jBPM启动流程执行fork的时候,只能单线程执行,而无法多线程并行校验);

3、校验商户支付商关系(CheckMerBank),校验商品支付商关系(CheckGoodsBank)。由于商户支付商关系鉴权依赖于商户和支付商的校验,商品支付商关系鉴权依赖于商品和支付商的校验,所以在CheckBank结点进行了fork,然后分别和CheckMer、CheckGoods做了一个join操作;

4、校验提供商品的商户(CheckMer)与校验提供支付的银行(CheckBank)都完成后,需要将在发起远程支付交易的请求中数据都汇集,join后,在AggregateData中进行处理(例如内部报文到内部报文的转换操作)。

 

对于每个结点(这里只上述流程定义中的custom对应的处理类)要进行的处理,完全可以自己模拟,例如,我的com.umpay.ubp.jbpm.handler.PrintInfoHandler的继承关系如下所示:

在AbstractHandler中,对业务流程处理进行了抽象。

上述流程对应的测试用例如下所示:

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值