JBPM Activty深入解析
JBPM对于活动结点的架构设计有什么特别之处?
JBPM将活动功能分为活动本身的行为(ActivityBehaviour)和活动作为流程元素所共有的一些东西(Activity);这样的架构设计很巧妙,既保证了各种活动自身的独特特性,也保证作为流程元素所共有的功能,保证了最大程度的代码重用!
JBPM活动的类型大致分为自由执行结点和外部唤醒结点,可以满足现实中业务流程需要自动业务处理和需要人参与的业务处理要求。
JBPM的活动本身是一种复合元素,其可以作为父活动而拥有众多的子活动。这样保证了JBPM提供的单一活动不能满足业务需求时候,我们可以进行活动组合!
JBPM的活动可以定义变量,这样可以使我们在运行时动态传递数据,满足我们一些灵活的业务需求。
JBPM的活动可以订阅相应的事件,当相应事件触发时,就会调用相应的事件监听器的方法。这样我们可以开发自己的事件监听器进行代码注入,灵活的实现自己的一些业务需求。
实现满足特定需求的活动
如果jbpm提供的活动不能满足我们的业务需求,我们除了可以使用组合活动外,也可以实现我们自定义的活动,自定义活动根据我们的需要,我们可以继承JpdlActivity、JpdlAutomaticActivity、JpdlExternalActivity,
代码示例:
流程定义中引用自定义活动
扩展JBPM活动相关属性
Jbpm的活动是以name作为标识的,这一点有点不是很好,在名字有重复时,可能会导致一些运行时错误!为了避免这一点,我们可以自己给活动结点扩展id属性,并在设计流程时自动生成id;
流程发布xsd验证id
流程发布解析活动xml时,解析id属性
在JpdlBinding中添加代码
在JpdlParser中的parseActivities方法中添加下列选中一行的代码
在Activiy中添加接口
public String getId();
在ActivityImpl中添加下列代码
private String id;
public String getId(){
return this.id;
}
public void setId(String id){
this.id=id;
}
为了保证流程的顺利运行,我们需要提供通过Id查找活动的方法并替换掉原来的通过Name获取的方法,具体代码不在赘述!