2016-07-30 31 views
0

Ich möchte den Zeitplan wieder mit den gleichen Einstellungen starten (alle 10 Sekunden) (javax.ejb.Timer), nachdem ich den Zeitplan aufgehört haben:Starten Sie Schedule wieder: javax.ejb.Timer

// call this remote method with the Timer info that has to be canceled 
    @AccessTimeout(value = 20, unit = TimeUnit.MINUTES) 
    public void cancelTimer(String timerInfo) { 
     try { 
      for (Timer timer : timerService.getTimers()) { 
       if (timerInfo.equals(timer.getInfo())) { 
        timer.cancel(); 
       } 
      } 
     } catch (Exception e) { 
     } 
    } 

Dies ist meine Funktion, den Zeitplan zu stoppen:

galleryScheduleExecutionService.cancelTimer("mySchedule"); 

hier den Zeitplan:

@Lock(LockType.READ) 
     @AccessTimeout(value = 20, unit = TimeUnit.MINUTES) 
     @Schedule(second = "*/10", minute = "*", hour = "*", persistent = false, info = "mySchedule") 
     public void schedule() 
      throws StorageAttachmentNotFoundException, IOException, 
      DuplicateStorageAttachmentException, 
      CannotDuplicateStorageAttachmentException, 
      ApplicationInfoNotFoundException, PrintStorageNotFoundException, 
      InterruptedException { 
     try { 

      // start schedule 
      galleryScheduleService.doStartSchedule(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     } 

Wie kann ich den Zeitplan starten wieder mit den gleichen Einstellungen (alle 10 Sekunden ...)?

Antwort

1

Verwenden Sie die TimerService- # createCalendarTimer Methode aus der Bohne:

@Resource 
TimerService timerService; 

@Schedule(...) 
@Timeout 
public void schedule() { ... } 

public void restart() { 
    TimerConfig timerConfig = new TimerConfig(); 
    timerConfig.setPersistent(false); 
    timerService.createCalendarTimer(new ScheduleExpression() 
    .second("*/10") 
    .minute("*") 
    .hour("*"), 
    new TimerConfig("mySchedule", false)); 
} 

Sie müssen eine Timeout-Callback-Methode erklären (z.B. unter Verwendung @Timeout), die das gleiche Verfahren wie das Verfahren @Schedule sein kann.

+0

Was ist der Grund für diese Timeout-Callback-Methode? – internet

+0

Dies ist das Ziel der createTimer-Methode. Es ist nicht möglich, einen automatischen Timer ('@ Schedule') tatsächlich neu zu starten. Daher ist es am besten, einen äquivalenten programmatischen Timer zu erstellen, der dieselbe Callback-Methode verwendet. –