2016-04-18 31 views
1

当我调用完全方法时,执行3次,我怎样才能使它执行一次,以及其他2次thorw异常在运行之前通知方法?当调用完成活动任务并发时,TaskListener为完成任务运行超过一次

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 ================"); 

    } 
} 
+0

有人有同样的问题吗? –

回答

0

也许你可以通过获取任务状态:

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); 
+0

感谢您的回答。 –

+0

感谢您的回答。 task.isSuspended()不起作用。 三个线程同时进入taskListener并执行notify(DelegateTask任务)。 –

+0

“设置变量”好主意,谢谢 –