当同时调用complete activiti任务时,complete任务的TaskListener会运行一次以上



当我同时调用complete方法时,PostpareTaskListener.notify执行了3次,我怎么能让它只执行一次,其他两次都在notify方法中运行之前引发异常?

public static void main(String args[]){     
    Logger log = LoggerFactory.getLogger("");
    final ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    new Thread(new Runnable() {
        @Override
        public void run() {
            processEngine.getTaskService().complete("141209", null);
        }
    }).start();
    new Thread(new Runnable() {
        @Override
        public void run() {
            processEngine.getTaskService().complete("141209", null);
        }
    }).start();
    processEngine.getTaskService().complete("141209", null);
}

public class PostpareTaskListener implements TaskListener{
    @Override
    public void notify(DelegateTask task) {
        // TODO Auto-generated method stub
        task.setVariable("result", "false");
        System.out.println("================post pare ================");
    }
}

也许您可以通过以下方式获得任务状态:

task.isSuspended();

毕竟,如果你试图完成一个已经完成的任务,我希望activit会抛出一个异常:

org.activiti.engine.ActivitiObjectNotFoundException: Cannot find task with id 141209

也许设置一个变量有帮助:

Boolean executed = (Boolean) task.getVariable("executed");
if (executed) {
    return;
}
task.setVariable("executed", true);

最新更新