2016-04-18 7 views
1

wenn ich vollständige Methode gleichzeitig aufrufen, PostpareTaskListener.notify 3 Mal ausführen, wie kann ich es nur einmal machen, und andere 2 mal thorw Ausnahme vor dem Lauf in Methode benachrichtigen?Wenn Aufruf activiti Aufgabe gleichzeitig, TaskListener für komplette Aufgabe mehr als einmal ausführen

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

hat jemand das gleiche Problem? –

Antwort

0

Vielleicht können Sie den Task-Zustand durchkommen:

task.isSuspended(); 

Schließlich würde ich activit erwarten eine Ausnahme ausgelöst, wenn Sie versuchen, eine Aufgabe zu erfüllen, die bereits fertig gestellt wurde:

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

Vielleicht hilft das Einstellen einer Variablen:

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

danke für deine Antwort. –

+0

danke für deine Antwort. task.isSuspended() ist nicht funktionieren. drei Threads treten gleichzeitig in taskListener und exute benachrichtigen (DelegateTask-Task). –

+0

"eine Variable einstellen" gute Idee, danke –

Verwandte Themen