İki yaklaşım: fasulyenizde bir boole ayarlayabilir ve discover()
'u çalıştırıp çalıştırmadığını kontrol edebilirsiniz. Bu, yine de hiçbir şey yapmamak için her iki dakikada bir discover()
çağrılmasına yol açacaktır. Ancak bu, sonraki bir tarihte almak için resumeDiscovery()
yöntemini eklemenize izin verecektir.
@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
}
}
Alternatif olarak, işi işleyen Timer iptal edebilirsiniz. Bu daha kalıcı bir çözümdür; Bu programlanmış EJB'yi yeniden başlatamayacaksınız ... en azından kolay değil. Yani bu şekilde görünecektir:
@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
}
}
Pekala sen keşif vazgeçerseniz, keşif çalıştırmayı dener dahaki sefere bu fasulye zamanlayıcı iyi için iptal edilecektir.