parentLockMode用于控制Hibernate的鎖機(jī)制,這點(diǎn)我們暫且不去深究,有意思的是下面幾個變量:isDiscriminator、tokenNames、script、nOutOfM共同決定了Join節(jié)點(diǎn)內(nèi)被的具體行為,本文稍后會具體解說。
isDiscriminator和nOutOfM實(shí)現(xiàn)了多選一和多選多,但是這兩個變量起到的控制作用是死的,也就是我們并不能指定從Fork那里產(chǎn)生的子Token中哪幾個到Join之后流程可繼續(xù)。例如Fork創(chuàng)建了A、B、C、D、E五個Token,如果用前面那兩個控制機(jī)制,這五個哪幾個到Join之后流程會繼續(xù)完全是不可控的,如果我們要實(shí)現(xiàn)必須是A、C、E到達(dá)Join之后流程才可繼續(xù),這樣的需求用isDiscriminator和nOutOfM是無法實(shí)現(xiàn)的。別著急,tokenNames是專為解決這個問題而設(shè)置的,我們選定幾個子Token塞給tokenNames,那么Join就會自動為我們做這些事情了。 相比tokenNames Script為我們提供了更靈活的控制機(jī)制。如果Script返回Collection類型,那么Script起到了tokenNames的作用,如果返回Bolean類型,那么Script起到isDiscriminator的作用,源碼上注釋的很清楚,我就不在這羅嗦了。 到這Join的代碼我們也就讀完了,如果上述四個成員變量都為默認(rèn)值,那么Join也就按默認(rèn)的行為執(zhí)行,Join是JBPM源碼中少數(shù)注釋很全的類,這也說明這是JBPM開發(fā)組的得意之作。通過四個屬性我們可以非常靈活的使用Join實(shí)現(xiàn)很多實(shí)用的效果。
文章原創(chuàng),轉(zhuǎn)載請注明出處!