Il Timer Service è un servizio del Container che consente di schedulare l'esecuzione dei metodi di tutti i tipi di session bean eccetto il tipo stateful.
Possiamo schedulare il timeout di un Timer in diversi modi: come calendario, a singola azione dopo un tempo specificato,
o come task che si ripete ad intervalli di tempo.
Un Timer può essere di due tipi: programmatico o automatico. Un Timer programmatico viene creato utilizzando l'interfaccia TimerService
, mentre un Timer automatico viene creato con il deploy di EJB che contengono metodi marcati con annotation java.ejb.Schedule
o java.ejb.Schedules
.
Lo scheduling basato su calendario può essere utilizzato sia con i Timer di tipo programmatico che automatico. Lo scheduling di tipo calendario prevede l'uso dei seguenti attributi:
Attributo | Descrizione |
---|---|
second |
Valore che esprime secondi [0-59], ad esempio second="20" . |
minute |
Esprime minuti [0-59], ad esempio minute="20" . |
hour |
Esprime ore [0-23], ad esempio hour="15" . |
dayOfWeek |
Esprime il giorno della settimana [0-7], in notazione letterale [Sun, Mon, Tue, Wed, Thu ,Fri, Sat], ad esempio dayOfWeek="4" o dayOfWeek="Mon" (I valori 0 e 7 si riferiscono a Sunday). |
dayOfMonth |
Esprime i giorni del mese [1-31], ad esempio dayOfMonth="20" . |
month |
Esprime i mesi [1-12], in notazione letterale [Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec], ad esempio month="1" omonth="Jan" . |
year |
Esprime l'anno in quattro cifre, ad esempio year="2016" . |
Per il giorno del mese esistono delle particolarità. I valori da -7 a -1 indicano i giorni che mancano alla fine del mese, per esempio 3 giorni alla fine del mese: dayOfMonth="-3"
. La parola Last
consente di specificare l'ultimo giorno del mese: dayOfMonth="Last"
. Sono possibili inoltre combinazioni usando gli insiemi di parole: [1st, 2nd .. Last] [Sun, Mon .. Sat], ad esempio il secondo lunedi del mese: dayOfMonth="2nd Mon"
.
"*" specifica l'opzione "qualsiasi valore", ad esempio possiamo scrivere:
dayOfWeek="*"
per ogni giorno della settimana. Con la virgola possiamo poi definire una lista di valori per un attributo, ad esempio con hour="4,9-17,22"
intendiamo un task da eseguire alle 4 del mattino, ogni ora tra le 9 e le 17 (il trattino specifica un range con gli estremi inclusi) e alle 22.
Un altro carattere speciale interessante è lo slash che vincola un attributo ad avere un inizio ed un intervallo. Nell'espressione x/y
, x
rappresenta il punto di inizio e y
l'intervallo, ad esempio minute="*/10"
specifica ogni 10 minuti in un'ora e "*" in questa posizione equivale al valore 0 (inizio dell'ora).