二者对工作流模式的支持都比较全面(主要是指常说的Control-flow部分)。
具体可参照列表: http://www.workflowpatterns.com/evaluations/standard/index.php
今天看到的几点,以后可以再补充:
BPEL的一个优势:通过scope元素的isolated属性支持Interleaved Parallel Routing模式:
http://www.workflowpatterns.com/patterns/control/state/wcp17.php
这是其他规范所不具备的。
BPEL的块状编程结构使其在以下两个方面略受限,而XPDL则比较擅长:
-
任意循环Arbitrary Cycles,
http://www.workflowpatterns.com/patterns/control/structural/wcp10.php
这类似于编程里的goto,在实际业务流程场景中的“退回”需求; - 多重实例的部分模式。
第一条是比较要命的,国内很多都是这种流程;
Albpm的一个实现样例:
而一些产品则需要采用Structured Loop模式变通实现。
第二条BPEL本身不支持多重实例的部分场景,如(Multiple Instances with a priori Run-Time Knowledge,即某个节点定义的创建实例数目是在运行时决定的)
但一些遵循BPEL的产品会有扩展实现,如Oracle BPEL的flowN元素。
Albpm对多重实例也有比较完善的支持,拆分N节点示例: