Java >> Java opplæring >  >> Java

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

Java Tag