org.jbpm.api.JbpmException: no environment to get org.jbpm.pvm.internal.session.RepositorySession

     因爲業務需求,我們的不考勤單據的審批流程是,如果發起人是普通員工的角色,那麼則審批的流程就是其直接主管或者部門經理(直接主管的上司)其中一個任意誰籤都可以,那麼我想到了用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包下的那些servicejbpm4也會自動維護Environment,這些與spring沒有關係,是jbpm4本身的調用機制,

   有人可能如果第一種方法不行,那可能由於沒有開啓spring事務。

 

與大家共勉~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章