- Learn
- Guida JEE 7, EJB 3 e JPA
- Timer Service: Timer automatici
Timer Service: Timer automatici
I Timer Automatici vengono creati in fase di deploy grazie alle annotazioni @Schedule
e @Schedules
aggiunte sui metodi
del bean che intendiamo utilizzare come task di scheduling. Implementiamo quindi la versione automatica dello Scheduler.
Come fatto in precedenza
realizziamo l’interfaccia contratto e le interfacce local
e remote
che la estendono:
package it.html.progetto1.ejb32;
import javax.ejb.Timer;
public interface AutomaticScheduler {
void singleTask(Timer timer);
void intervalTask(Timer timer);
void calendarTask(Timer timer);
void removeTimers();
}
package it.html.progetto1.ejb32;
import javax.ejb.Local;
@Local
public interface AutomaticSchedulerLocal extends AutomaticScheduler {}
package it.html.progetto1.ejb32;
import javax.ejb.Remote;
@Remote
public interface AutomaticSchedulerRemote extends AutomaticScheduler {}
In questo caso i metodi dell’interfaccia non solo creano oggetti Timer ma rappresentano metodi registrati con uno specifico Timer per essere eseguiti allo scadere del Timer stesso. La classe bean in questo caso è la seguente:
package it.html.progetto1.ejb32;
import java.util.Collection;
import javax.annotation.Resource;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import javax.ejb.Timer;
import javax.ejb.TimerService;
@Singleton
public class AutomaticSchedulerBean implements AutomaticSchedulerLocal, AutomaticSchedulerRemote {
@Resource
private TimerService timerService;
@Schedule(minute="30", hour="*")
public void singleTask(Timer timer) {
System.out.println("Timer single task dopo 30 minuti ogni ora");
}
@Schedule(minute="*", hour="*")
public void intervalTask(Timer timer) {
System.out.println("Timer single task ad intervali di un minuto ogni ora");
}
@Schedule(dayOfMonth="1", month="*", year="*",hour="0", minute="0", second="0")
public void calendarTask(Timer timer) {
System.out.println("Timer ogni primo del mese");
}
@Override
public void removeTimers() {
/*Ejb 3.2 nuova caratteristica*/
Collection<Timer> timers = timerService.getAllTimers();
for(Timer t : timers){
t.cancel();
}
}
}
Come possiamo notare dal codice della classe, l’annotation @Schedule
crea un Timer per ciascun metodo sul quale viene posta.
Il metodo verrà poi eseguito allo scadere del Timer stesso (evento di timeout). Sull’annotation @Schedule
utilizziamo gli attributi del calendario visti ad inizio capitolo.
Non possiamo definire un caso di test JUnit per l’attivazione di un Timer automatico in quanto creato in fase di deploy, Possiamo però definire un metodo di test per la cancellazione dei Timer automatici creati:
@Test
public void testRemoveAutomaticTimers() throws NamingException {
automaticSchedulerRemote = (AutomaticSchedulerRemote) namingContext.lookup(AUTOMATIC_TIMER_SINGLETON_REMOTE_JNDI_NAME);
automaticSchedulerRemote.removeTimers();
}
Se vuoi aggiornamenti su Java inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
The road to the cloud: continuous delivery and deployment
The final rush to the perfect development. Connect your local development to cloud services with continuous delivery services and techniques […]