Bpel异步流程的构建与关联集
在流程的整合的实际应用中,常常会出现流程的异步运行。
例如:流程运行某处,阻塞,等待伙伴系统传来的信息,流程继续运行。可以使用receive活动或者pick活动来完成这中情况:
异步流程需要注意的问题是传入数据的相关性。因为一个流程可能有多个实例在同时运行,假如流程A运行的是学号01的同学的流程,在异步处等待该学生的成绩。在这时传来了一个成绩消息,那能否接受该消息呢?这就需要考虑数据相关性。确定相关性后,只有学号是01的同学的成绩才能传入这个流程实例。这就是相关集的作用。那么如何定义相关集呢?
在Netbeans中设置关联集有一下几个步骤
1. 首先思考能保证消息唯一性的数据是什么,例如上例中学号是唯一标识,学号是字符型,所以在相应的wsdl中添加一个属性,属性的类型为String,属性名为MY。
2. 确定属性别名。在异步流程中,传入的消息可能有多个,所以需要在这些消息中挑出一些Element来唯一确定这个消息。如上例中有两个消息。第一个消息是学生的个人信息,其的ID Element需要加入属性MY。第二个消息是学生的考试成绩,其中的ID需要加入属性MY。这样就把这个消息联系了起来。
3. 在流程中创建关联集,在关联集中添加属性MY。
4. 在消息传入的Activity中添加关联集。上面两个图中,图一的receive1与receive2需要添加关联集,图二的receive1与OnMessage需要添加关联集。
完成了以上几个步骤就可以实现异步流程了,另外提几点:
1. Pick中有个OnAlarm活动,该活动的作用是当异步消息的等待超过了一定的时间所引起的活动。
2. 发送异步消息的伙伴服务的实现形式有多种。一种是将发送消息的程序服务化,集成为Web Service,另一种是在该程序中添加一个Web Service Client,调用流程WSDL的PortType中的Operation,还有一种是Jms消息传递,在流程的receive端设置好Jms的ConnectionFactiry以及Destination,填写一个Jms服务器,填写正确的用户名密码。活动活动发送Jms消息到制定的服务器,该消息激活Receive活动,流程继续运行。Jms绑定比Http绑定更加安全可靠,这里不再骜述。这也是我在学习过程中的一点记录,有不当之处情指出