Eksempel på EJB Timer Service
1. Introduksjon
I dette eksemplet vil vi vise hvordan du bruker EJB Timer Service . EJB-timertjenesten er en beholderlevert tjeneste som lar bønneleverandøren registrere bedriftsbeans for tilbakeringing av timer i henhold til en kalenderbasert tidsplan, på et spesifisert tidspunkt eller med spesifiserte intervaller.
2. Opprett en ny EJB-modul
Åpne NetBeans IDE, velg Fil> Nytt prosjekt.
I New Project-veiviseren utvider du Java EE-kategorien og velg EJB-modul som vist i figuren nedenfor. Klikk deretter på Neste.
Figur 1:Opprett ny EJB-modul
Du må spesifisere prosjektnavnet , prosjektnavnet og prosjektplasseringen i de aktuelle tekstfeltene, og klikk deretter på Neste.
Figur 2:Konfigurer prosjekt
I neste vindu legger du til JEE-serveren og velger JEE-versjonen og klikker på Fullfør.
Figur 3:Legg til server
3. Opprett en ny Session Bean
Gå til Fil -> Ny fil -> Enterprises JavaBeans -> Session Bean eller
Høyreklikk på EJB-modulprosjektet og velg Ny> Session Bean.
Figur 4:Opprett ny Session Bean
Skriv inn TimerServiceDemo for EJB-navnet og org.netbeans.example for pakken og velg Singleton for sesjonstype.
Figur 5:Velg bønnetype
Når du klikker Fullfør, oppretter IDE-øktbønnen i org.netbeans.example pakken i EJB-modulen og åpner klassen i editoren
Figur 6:Generert bønnekilde
4. TimerService-grensesnitt
TimerService
grensesnittet gir bedriftsbean-komponenter tilgang til den beholderleverte timertjenesten. EJB Timer Service tillater statsløse sesjonsbønner, singleton-sesjonsbønner, meldingsdrevne bønner. For å lage en tidtaker må vi lage TimerService
objekt og bruk en av dens createTimer()
metode. Tidtakertjenesten er tilgjengelig via avhengighetsinjeksjon, gjennom getTimerService
metoden for EJBContext
grensesnitt, eller gjennom oppslag i JNDI-navneområdet.
5. Opprett timer
5.1. Intervalltimer
Opprett en intervalltidtaker hvis første utløp skjer på et gitt tidspunkt og hvis påfølgende utløp skjer etter et spesifisert intervall.
IntervalTimerDemo.java
package org.netbeans.example; import java.util.Date; import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.ejb.Singleton; import javax.ejb.LocalBean; import javax.ejb.Startup; import javax.ejb.Timeout; import javax.ejb.Timer; import javax.ejb.TimerService; @Singleton @LocalBean @Startup public class IntervalTimerDemo { @Resource private TimerService timerService; @PostConstruct private void init() { timerService.createTimer(1000, 2000, "IntervalTimerDemo_Info"); } @Timeout public void execute(Timer timer) { System.out.println("Timer Service : " + timer.getInfo()); System.out.println("Current Time : " + new Date()); System.out.println("Next Timeout : " + timer.getNextTimeout()); System.out.println("Time Remaining : " + timer.getTimeRemaining()); System.out.println("____________________________________________"); } }
Utgang –
Info: Timer Service : IntervalTimerDemo_Info Info: Current Time : Sat Jan 17 09:59:25 IST 2015 Info: Next Timeout : Sat Jan 17 09:59:27 IST 2015 Info: Time Remaining : 1997 Info: ____________________________________________ Info: Timer Service : IntervalTimerDemo_Info Info: Current Time : Sat Jan 17 09:59:27 IST 2015 Info: Next Timeout : Sat Jan 17 09:59:29 IST 2015 Info: Time Remaining : 1998 Info: ____________________________________________ Info: Timer Service : IntervalTimerDemo_Info Info: Current Time : Sat Jan 17 09:59:29 IST 2015 Info: Next Timeout : Sat Jan 17 09:59:31 IST 2015 Info: Time Remaining : 1997 Info: ____________________________________________
5.2. Single Action Timer
Lag en enkelthandlingstidtaker som utløper etter en spesifisert varighet.
SingleActionTimerDemo.java
package org.netbeans.example; import java.util.Date; import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.ejb.Singleton; import javax.ejb.LocalBean; import javax.ejb.Startup; import javax.ejb.Timeout; import javax.ejb.Timer; import javax.ejb.TimerConfig; import javax.ejb.TimerService; @Singleton @LocalBean @Startup public class SingleActionTimerDemo { @Resource private TimerService timerService; @PostConstruct private void init() { TimerConfig timerConfig = new TimerConfig(); timerConfig.setInfo("SingleActionTimerDemo_Info"); timerService.createSingleActionTimer(5000, timerConfig); // after 5 seconds System.out.println("INIT Time : " + new Date()); } @Timeout public void execute(Timer timer) { System.out.println("Timer Service : " + timer.getInfo()); System.out.println("Execution Time : " + new Date()); System.out.println("____________________________________________"); } }
Utgang –
Info: INIT Time : Sat Jan 17 10:06:09 IST 2015 Info: TimerServiceExample was successfully deployed in 385 milliseconds. Info: Timer Service : SingleActionTimerDemo_Info Info: Execution Time : Sat Jan 17 10:06:14 IST 2015 Info: ____________________________________________
5.3. Kalendertimer
Tidtakertjenesten lar en tidsplan for tilbakeringing uttrykkes ved hjelp av en kalenderbasert syntaks.
5.3.1. Kalendertimer – Programmatisk
For kalenderbaserte tidtakere er tidtakerens utløp uttrykt som en javax.ejb.ScheduleExpression
objekt, sendt som en parameter til TimerService.createCalendarTimer
metode. ScheduleExpression
klasse representerer kalenderbaserte timeruttrykk .
Opprett en øktbønne kalt CalendarProgTimerDemo.java
med følgende kode:
CalendarProgTimerDemo.java
package org.netbeans.example; import java.util.Date; import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.ejb.Singleton; import javax.ejb.LocalBean; import javax.ejb.ScheduleExpression; import javax.ejb.Startup; import javax.ejb.Timeout; import javax.ejb.Timer; import javax.ejb.TimerConfig; import javax.ejb.TimerService; @Singleton @LocalBean @Startup public class CalendarProgTimerDemo { @Resource private TimerService timerService; @PostConstruct private void init() { TimerConfig timerConfig = new TimerConfig(); timerConfig.setInfo("CalendarProgTimerDemo_Info"); ScheduleExpression schedule = new ScheduleExpression(); schedule.hour("*").minute("*").second("13,34,57"); timerService.createCalendarTimer(schedule, timerConfig); } @Timeout public void execute(Timer timer) { System.out.println("Timer Service : " + timer.getInfo()); System.out.println("Execution Time : " + new Date()); System.out.println("____________________________________________"); } }
Utgang –
Info: Timer Service : CalendarProgTimerDemo_Info Info: Execution Time : Sat Jan 17 10:09:13 IST 2015 Info: ____________________________________________ Info: Timer Service : CalendarProgTimerDemo_Info Info: Execution Time : Sat Jan 17 10:09:34 IST 2015 Info: ____________________________________________ Info: Timer Service : CalendarProgTimerDemo_Info Info: Execution Time : Sat Jan 17 10:09:57 IST 2015 Info: ____________________________________________ Info: Timer Service : CalendarProgTimerDemo_Info Info: Execution Time : Sat Jan 17 10:10:13 IST 2015 Info: ____________________________________________ Info: Timer Service : CalendarProgTimerDemo_Info Info: Execution Time : Sat Jan 17 10:10:34 IST 2015 Info: ____________________________________________
5.3.2. Kalendertimer – Automatisk
Automatiske tidtakere opprettes av EJB-beholderen når en bedriftsbean som inneholder metoder merket med @Schedule
eller @Schedules
merknader er distribuert. En bedriftsbean kan ha flere automatiske tidsavbruddsmetoder, i motsetning til en programmatisk tidtaker, som bare tillater én metode som er kommentert med @Timeout
merknad i enterprise bean-klassen.
Legge til en @Schedule
merknader på en bedriftsbean markerer den metoden som en tidsavbruddsmetode i henhold til kalenderplanen spesifisert i attributtene til @Schedule
.
Opprett en øktbønne kalt CalendarAutoTimerDemo.java
med følgende kode:
CalendarAutoTimerDemo.java
package org.netbeans.example; import java.util.Date; import javax.ejb.Singleton; import javax.ejb.LocalBean; import javax.ejb.Schedule; import javax.ejb.Startup; import javax.ejb.Timer; @Singleton @LocalBean public class CalendarAutoTimerDemo { @Schedule(second="13,34,57", minute="*", hour="*") public void execute(Timer timer) { System.out.println("Executing ..."); System.out.println("Execution Time : " + new Date()); System.out.println("____________________________________________"); } }
Utgang –
Info: Executing ... Info: Execution Time : Sat Jan 17 10:12:13 IST 2015 Info: ____________________________________________
6. Last ned NetBeans-prosjektet
Last ned NetBeans-prosjektet til denne opplæringen:ejb3