Cosminexus アプリケーションサーバ V8 機能解説 基本・開発編(EJBコンテナ)

[目次][用語][索引][前へ][次へ]

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 ");
  }
}