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中得到...