因爲業務需求,我們的不考勤單據的審批流程是,如果發起人是普通員工的角色,那麼則審批的流程就是其直接主管或者部門經理(直接主管的上司)其中一個任意誰籤都可以,那麼我想到了用candidate-users,用assignee已經不能完成我的業務需求了,那麼在編寫過程中遇到如題錯誤,幾經周折,最終找到解決方法,現和大家分享一下解決方法:
是因爲我在代碼中使用了TaskImpl類,而凡是對xxxImpl的訪問,都需要打開Environment纔行。
兩種方式啓用Environment
1) EnvironmentImpl env = ((EnvironmentFactory)processEngine).openEnvironment();
try{
// TODO;
} finally{
env.close();
}
2) processEngine.execute(new Command() {
public Object execute(Environment env) {
// TODO:
}
});
jBPM4本身維護的IoC容器就可以看到一個Environment。不打開Environment,裏邊的各種組件都沒法使用。具體的IoC架構可以看一下源碼。附一份jbpm架構圖
processEngine.execute()這個方法會自動打開一個Environment,然後執行傳入的回調方法,結束後再自動將Environment關閉。
如果使用api包下的那些service,jbpm4也會自動維護Environment,這些與spring沒有關係,是jbpm4本身的調用機制,
有人可能如果第一種方法不行,那可能由於沒有開啓spring事務。
與大家共勉~