parentLockMode用于控制Hibernate的锁机制,这点我们暂且不去深究,有意思的是下面几个变量:isDiscriminator、tokenNames、script、nOutOfM共同决定了Join节点内被的具体行为,本文稍后会具体解说。
isDiscriminator和nOutOfM实现了多选一和多选多,但是这两个变量起到的控制作用是死的,也就是我们并不能指定从Fork那里产生的子Token中哪几个到Join之后流程可继续。例如Fork创建了A、B、C、D、E五个Token,如果用前面那两个控制机制,这五个哪几个到Join之后流程会继续完全是不可控的,如果我们要实现必须是A、C、E到达Join之后流程才可继续,这样的需求用isDiscriminator和nOutOfM是无法实现的。别着急,tokenNames是专为解决这个问题而设置的,我们选定几个子Token塞给tokenNames,那么Join就会自动为我们做这些事情了。 相比tokenNames Script为我们提供了更灵活的控制机制。如果Script返回Collection类型,那么Script起到了tokenNames的作用,如果返回Bolean类型,那么Script起到isDiscriminator的作用,源码上注释的很清楚,我就不在这罗嗦了。 到这Join的代码我们也就读完了,如果上述四个成员变量都为默认值,那么Join也就按默认的行为执行,Join是JBPM源码中少数注释很全的类,这也说明这是JBPM开发组的得意之作。通过四个属性我们可以非常灵活的使用Join实现很多实用的效果。
文章原创,转载请注明出处!