高級圖形執(zhí)行—jBPM開發(fā)指南(2)
讓我們和你一起遵循這個過程。
clientExecution execution = processDefinition . StartProcessInstance();
開始新的執(zhí)行意味著執(zhí)行初始活動。因此,如果自動活動是初始活動,這意味著將立即選擇第一個未命名的向外轉(zhuǎn)移。這些都發(fā)生在startProcessInstance調(diào)用中。
然而,在這種情況下,初始活動是等待狀態(tài)。因此,startProcessInstance方法將立即返回,執(zhí)行將定位到初始活動& # 39;等待1 & # 39;新的執(zhí)行將設(shè)置為& # 39;等待1 & # 39;。
然后外部觸發(fā)器執(zhí)行信號方法。
execution . signal();
像上面解釋的引入等待狀態(tài)一樣,信號導(dǎo)致默認轉(zhuǎn)換被選擇。轉(zhuǎn)移將執(zhí)行移動到自動1活動并執(zhí)行它。automatic 1中的顯示活動執(zhí)行方法向控制臺打印一行,并且它不調(diào)用execution.waitForSignal()。因此,通過選擇自動1之外的默認傳輸來執(zhí)行。在這種狀態(tài)下,信號方法已被阻止。另一種考慮的方式是執(zhí)行該方法,例如,信號將使用客戶端的線程來截取進程定義,直到它達到等待狀態(tài)。
然后執(zhí)行等待2并執(zhí)行等待狀態(tài)活動。該方法調(diào)用execution.waitForSignal(),這將導(dǎo)致信號方法返回。線程返回到調(diào)用信號方法的客戶端。
因此,當信號方法返回時,執(zhí)行被定義為等待2。一個信號將從& # 39;首字母& # 39;到& # 39;等待2 & # 39;。
然后執(zhí)行等待一個外部觸發(fā)器,比如內(nèi)存中的一個對象(或者更準確地說是一個對象圖),直到下一個外部觸發(fā)器執(zhí)行信號方法。
execution . signal();
第二次調(diào)用的信號將在返回之前引導(dǎo)執(zhí)行進入等待3。
第二個信號讓執(zhí)行進入& # 39;等待3 & # 39;。
使用此示例的優(yōu)勢在于,可以在客戶端執(zhí)行模式下執(zhí)行相同的流程定義(內(nèi)存中不使用持久性),就像在持久性執(zhí)行模式下一樣,具體取決于應(yīng)用程序和環(huán)境。
在持久模式下執(zhí)行進程時,如何將進程綁定到數(shù)據(jù)庫的事務(wù)?
持續(xù)模式下的事務(wù)超時
在大多數(shù)情況下,計算工作是需要完成的過程的一部分,外部觸發(fā)后的部分(紅色部分)實際上非常少。一般來說,處理流程執(zhí)行和處理用戶界面?zhèn)鬟f的請求的事務(wù)不會超過一秒鐘。業(yè)務(wù)流程中的等待狀態(tài)可能會超過幾個小時、幾天甚至幾年。當?shù)却隣顟B(tài)開始時,線索變得清晰。在等待狀態(tài)開始之前,事務(wù)中只包括計算工作的完成。