no environment 异常

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架构图

no environment 异常_第1张图片


    processEngine.execute()
这个方法会自动打开一个Environment,然后执行传入的回调方法,结束后再自动将Environment关闭。
   如果使用api包下的那些servicejbpm4也会自动维护Environment,这些与spring没有关系,是jbpm4本身的调用机制,

   有人可能如果第一种方法不行,那可能由于没有开启spring事务。

http://blog.csdn.net/haoren_e/article/details/5592512

你可能感兴趣的:(no environment 异常)