Come disattivare tutti gli scheduler (@Schedule annotati) in un progetto di deploy su Glassfish 3.1
Forse ci sono alcune voci di configurazione per fare ciò?
Ho circa 20 EJB con scheduler nel mio progetto e se voglio testare/correggere una piccola cosa non voglio che tutto/alcuni inizi il timer.Disattivazione di tutte le pianificazioni in Glassfish 3.1
risposta
purtroppo non so se ci sono alcune voci di configurazione per risolvere il problema, ma c'è un modo per farlo programatical, chiamando il annullare() -Metodo su timer -Oggetti forniti da TimerService.
Ecco un esempio di una classe ho semplicemente messo in progetti quando voglio mettere alla prova solo piccole cose:
@Stateless
public class ScheduleCancellation {
@Resource
private TimerService timerService;
@Schedule(second = "0", minute = "*", hour = "*")
public void cancelTimers() {
System.out.println("cancelTimers()");
for (Timer timer : timerService.getTimers()) {
System.out.println("schedule gone!");
timer.cancel();
}
}
@Schedule(second = "*", minute = "*", hour = "*")
public void tick() {
System.out.println("tick");
}
}
Spero che questo aiuti! :)
Il metodo getTimer() restituisce solo i timer attivi associati a questo bean. Forse è possibile ottenere tutti i timer nel progetto e disattivarli? – alexblum
L'accesso a TimerService#getTimers()
restituirà solo i timer per questo particolare EJB. Non esiste un modo standard per accedere a tutti i timer nel contenitore (in realtà, ecco una richiesta di miglioramento: http://java.net/jira/browse/EJB_SPEC-47).
Immagino che avresti bisogno di usare una soluzione proprietaria di Glassfish e giocherellare con i loro interni (se è anche possibile). Lo chiederei su GlassFish mailing list se fossi in te.
L'annotazione '@ Schedule' non è stata aggiunta nell'EJB 3.1 (http://docs.oracle.com/javaee/6/api/javax/ejb/Schedule.html#persistent%28%29)? Stai usando EJB 3.1 o 3.0? –
Sto usando EJB 3.1 – alexblum