2.12.8 Timer Serviceを使用するアプリケーションの実装

Timer Serviceを使用する場合のアプリケーションの実装内容を示します。

これらの処理を実装した例と,実装時の注意事項を示します。

<この項の構成>
(1) DIを使用した場合の実装例(タイムアウトメソッドをTimeoutアノテーションで指定)
(2) EJBContextを利用した場合の実装例(TimedObjectインタフェースを実装)
(3) lookupを利用した場合の実装例(TimedObjectインタフェースを実装)

(1) DIを使用した場合の実装例(タイムアウトメソッドをTimeoutアノテーションで指定)

アノテーションを使用した場合の実装例を示します。この例では,Timeoutアノテーション(@Timeout)でタイムアウトメソッド(myTimeout)を指定しています。

@Stateless public class TimerSessionBean{
 @Resource TimerService timerService;
 
 public void createMyTimer(long intervalDuration){
   Timer timer = timerService.createTimer
                          (intervalDuration, "MyTimer");
 }

 @Timeout public void myTimeout(Timer timer) {
   System.out.println("TimerSessionBean: myTimeout ");
 }

 public void cancelTimers(){
   Collection<Timer> timers = timerService.getTimers();
   for(Timer timer: timers) {
     timer.cancel();
   }
 }
}

(2) EJBContextを利用した場合の実装例(TimedObjectインタフェースを実装)

EJBContextのサブクラスであるSessionContextを利用して,TimerServiceオブジェクトを取得する例を示します。この例では,TimedObjectインタフェースをインプリメントして実装しています。

public class TimerSessionBean implements SessionBean, TimedObject{
 private SessionContext context;

 public void createMyTimer(long intervalDuration) {
   System.out.println("TimerSessionBean: start createTimer ");
   TimerService timerService = context.getTimerService();
   Timer timer = timerService.createTimer
                            (intervalDuration, "MyTimer");
 }

 public void ejbTimeout(Timer timer) {
   System.out.println("TimerSessionBean: ejbTimeout ");
 }

 public void setSessionContext(SessionContext sc) {
   context = sc;
 }
}

(3) lookupを利用した場合の実装例(TimedObjectインタフェースを実装)

JNDIを使用して,TimerServiceオブジェクトを取得する例を示します。この例では,TimedObjectインタフェースをインプリメントして実装しています。

public class TimerSessionBean implements SessionBean, TimedObject{
 private SessionContext context;

 public void createMyTimer(long intervalDuration) {
   System.out.println("TimerSessionBean: start createTimer ");
   InitialContext context = new InitialContext();
   TimerService timerService =
     (TimerService)context.lookup("java:comp/TimerService");
   Timer timer = timerService.createTimer
                            (intervalDuration, "MyTimer");
 }

 public void ejbTimeout(Timer timer){
   System.out.println("TimerSessionBean: ejbTimeout ");
 }
}