jbpm的子流程發布與刪除

2021-08-22 12:26:14 字數 1747 閱讀 5206

jbpm的流程deploy方法之一是:

jbpmconfiguration.getinstance().createjbpmcontext().deployprocessdefinition(processdefinition);

如果流程中涉及子流程的話,deploy需要注意先後順序,否則父流程會找不到子流程.

發布流程遵循的順序是先子後父

舉例:process

|--sub process

|--|--sub sub process

發布的順序是:

1:deploy "sub sub process"

2:deploy "sub process"

3:deploy "process"

刪除亦然.

流程例項結束後刪除流程例項的方法之一是:

jbpmconfiguration.getinstance().createjbpmcontext().getgraphsession().deleteprocessinstance(processinstance.getid());

如果流程涉及子流程的話,刪除流程例項同樣需要注意先後順序,否則會報約束錯誤.

刪除流程例項的順序也是先子後父

舉例:processinstance

|--sub processinstance

|--|--sub sub processinstance

刪除的順序是:

1:delete "sub sub processinstance"

2:delete "sub processinstance"

3:delete "processinstance"

在存在子流程的情況下,如果子流程未結束,此時呼叫

jbpmconfiguration.getinstance().createjbpmcontext().getgraphsession().deleteprocessinstance(rootprocessinstance.getid());

可以正常刪除流程例項樹.

如果子流程已結束,父流程尚未結束,此時呼叫該方法會報約束錯誤,主要原因是token表中的subprocessinstance_欄位在流程執行中指向processinstance表的id,而processinstance表的roottoken欄位指向本例項的根token,superprocesstoken欄位指向父token;在子流程結束時,token表中父流程的subprocessinstance欄位會自動清空,此時雖然可以根據processinstance表中找到子流程的父token,但是根據此父token確找不到該已結束的子流程processinstance,因此在刪除時會出現約束錯誤.具體的**分析如下:

deleteprocessinstance()方法的遞迴刪除子流程部分內容在graphsession.class的deletesubprocesses()方法內,該方法的內容為:

void deletesubprocesses(token token)

if (token.getchildren()!=null) }}

上面提到,在子流程已結束的情況下父流程的token中subprocessinstance欄位會被清空,此時token.getsubprocessinstance()為null,因此永遠也刪除不掉已完成的子流程,而在刪除父流程token的時候即會因為子流程尚未刪除,而子流程的superprocesstoken欄位卻指向父流程token而出現約束錯誤.

解決方案就是先刪除已完成的子流程,然後再刪除rootprocessinstance即可.

jbpm 部署與刪除

如果流程中涉及子流程的話,deploy需要注意先後順序,否則父流程會找不到子流程.發布流程遵循的順序是先父後子 舉例 process sub process sub sub process 發布的順序是 1 deploy process 2 deploy sub process 3 deploy s...

JBPM的流程定義外掛程式

這段時間,把jbpm starters kit 3.1.4包下下來了,想好好的研究一下。今天把jbpm的流程設計器外掛程式放到eclipse環境中,終於可以在eclipse環境中視覺化的操作流程定義了。一開始以為把流程設計器外掛程式放如eclipse環境中蠻複雜,所以也看了網上的一些步驟,可越看感覺...

jbpm的流程定義版本策略

基本上,jbpm的版本控制遵循下面的原則 1 每次發布乙個流程,都將在資料庫中產生乙個新的流程定義 2 發布時將分配乙個版本號給流程定義.如果流程的名稱相同,則jbpm認為是同乙個流程定義,它將在 當前的同乙個流程定義的最高版本上加1 如果當前沒有,則新的版本號為1.你可以通過api從jbpm中得到...