2016-03-24 9 views
0

Ich habe unter geplanten Bean, die Discovery-Methode alle zwei Minuten ausgeführt wird.Stoppen Sie eine geplante EJB-Task in Java EE

@Stateless(name="MySchedulerBean) 
public class MySchedulerBean  
    @Schedule(persistent=false, minute="*/2", hour="*", timezone="GMT" 
    public void discover(){ 
      //run discovery every 2 minute 
    } 
} 

Das Problem mit dem obigen Ansatz ist, dass es für immer läuft. Gibt es eine Möglichkeit, die Methode zu stoppen, nachdem meine Erkennung abgeschlossen ist? Kann ich bedingt rennen/stoppen?

Antwort

2

Zwei Ansätze: Sie könnten einfach einen boolean auf Ihre Bean setzen und discover() überprüfen, dass Boolean für, ob es ausgeführt werden sollte. Dies führt immer noch dazu, dass discover() alle zwei Minuten aufgerufen wird, um nichts zu tun. Dadurch können Sie jedoch eine resumeDiscovery() Methode hinzufügen, die zu einem späteren Zeitpunkt aufgenommen wird.

@Stateless(name="MySchedulerBean) 
public class MySchedulerBean 
    private boolean cancelTimer = false; 

    public void stopDiscovery() { 
     this.cancelTimer = true; 
    } 

    @Schedule(persistent=false, minute="*/2", hour="*", timezone="GMT" 
    public void discover() { 
      if (cancelTimer) { 
       return; 
      } 
      //run discovery 
    } 
} 

Alternativ können Sie die Timer abbrechen, die den Job verarbeitet. Dies ist eine dauerhafte Lösung; Sie können diese geplante EJB nicht starten ... zumindest nicht leicht. Das würde wie folgt aussehen:

@Stateless(name="MySchedulerBean) 
public class MySchedulerBean 
    private boolean cancelTimer = false; 

    public void stopDiscovery() { 
     this.cancelTimer = true; 
    } 

    @Schedule(persistent=false, minute="*/2", hour="*", timezone="GMT" 
    public void discover(Timer timer) { 
      if (cancelTimer) { 
       timer.cancel(); 
       return; 
      } 
      //run discovery 
    } 
} 

So, jetzt, wenn Sie sich entscheiden Entdeckung zu stoppen, das nächste Mal Entdeckung auszuführen versucht, wird der Timer auf dieser Bohne wird für gut aufgehoben.