2016-04-18 57 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

「設置變量」好主意,謝謝 –