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實現很多實用的效果。
文章原創,轉載請注明出處!