Cosminexus V9 アプリケーションサーバ 機能解説 拡張編
ここでは,TimerManagerを使用したアプリケーションの開発について説明します。
TimerManagerを使用する場合の,アプリケーションを構成するコンポーネントの使用可否を次の表に示します。
表10-12 TimerManagerを使用する場合のアプリケーションを構成するコンポーネントの使用可否
| コンポーネント | 使用可否 | |||
|---|---|---|---|---|
| EJBクライアント | × | |||
| リソースアダプタ | × | |||
| JavaBeansリソース | × | |||
| サーブレット/JSP※ | ○ | |||
| EJB | Stateless Session Bean | EJB2.1以前 | CMT | ○ |
| BMT | ○ | |||
| EJB3.0 | × | |||
| Stateful Session Bean | × | |||
| Entity Bean | × | |||
| Message-driven Bean | × | |||
注※ サーブレットリスナやフィルタでも使用できます。
TimerManagerを使用するアプリケーションの開発の流れは次のとおりです。
それぞれの作業の詳細を次に示します。
TimerManagerを使用するEJBまたはサーブレットの属性をDDに定義します。TimerManagerを使用するための定義は,アノテーションでは実施できません。
TimerManagerを使用するために定義する必要がある属性を次の表に示します。
表10-13 TimerManagerを使用するために定義する必要がある属性
| タグ名 | 説明 | |
|---|---|---|
| <ルートタグ> | − | |
| ┣ ┃ ┃ |
<description> | 任意で設定してください。 |
| ┣ ┃ ┃ ┃ |
<res-ref-name> | JNDI ENC名(JNDIルックアップに使用する名前)を指定してください。 |
| ┣ ┃ ┃ ┃ |
<res-type> | 次の内容を設定してください。 「commonj.timers.TimerManager」 |
| ┣ ┃ ┃ |
<res-auth> | 設定した値は無視されます。 |
| ┣ ┃ ┃ ┃ ┃ |
<res-sharing-scope> | 「Unshareable」を設定してください。ただし,「Shareable」を設定しても,「Unshareable」設定時と同様に動作します(ルックアップされるたびに新しいTimerManagerが作成されます)。 |
| ┣ ┃ ┃ |
<mapped-name> | 設定した値は無視されます。 |
| ┣ ┃ ┃ |
<injection-target> | 設定した値は無視されます。 |
| ┗ | <linked-to> | 設定した値は無視されます。 |
サーブレットでTimerManagerを使用する場合のweb.xmlの定義例を次に示します。
<web-app>
<display-name>TimerManagerSample</display-name>
<servlet>
<servlet-name>SampleServlet</servlet-name>
<display-name>SampleServlet</display-name>
<servlet-class>SampleServlet</servlet-class>
</servlet>
・・・
<resource-ref>
<res-ref-name>timer/MyTimer</res-ref-name>
<res-type>commonj.timers.TimerManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Unshareable</res-sharing-scope>
</resource-ref>
</web-app>
|
TimerManagerは,アプリケーション中でJNDIによるルックアップが実行されるたびに作成されます。作成されたTimerManagerは,stopメソッドの実行時,またはアプリケーション終了時に破棄されます。なお,TimerManagerは必要に応じて複数定義することもできます。
TimerManagerを使用するには,実行する処理を実装したリスナを作成する必要があります。リスナのインタフェースには,必ず実装するものと,必要に応じて実装するものがあります。必ず実装するインタフェースと必要に応じて実装するインタフェースを次に示します。
APIの詳細については,Timer and Work Manager for Application ServersのAPIの仕様を参照してください。
TimerListener,StopTimerListenerおよびCancelTimerListenerを実装したクラスの例を次に示します。
public class MyTimerListener
implements TimerListener,StopTimerListener, CancelTimerListener {
private int count = 0;
public MyTimerListener() {
}
public void timerStop(Timer timer) {
System.out.println("Timer stopped: " + timer);
}
public void timerCancel(Timer timer) {
System.out.println("Timer cancelled: " + timer);
}
public void timerExpired(Timer timer) {
System.out.println("Timer expired !");
if(count++ > 10) {
//規定回数に到達したためキャンセル
timer.cancel();
} else {
System.out.println("The next timer will fire at : " +
timer.getScheduledExecutionTime());
}
}
}
|
TimerManagerを使用するには,スケジュール元となるEJBまたはサーブレットに,属性に定義したTimerManagerのJNDI名のルックアップ,およびTimerManagerの処理のスケジューリングを実装します。
InitialContext ic = new InitialContext();
TimerManager tm = (TimerManager)ic.lookup
("java:comp/env/timer/MyTimer");
|
InitialContext ctx = new InitialContext();
TimerManager mgr = (TimerManager)
ctx.lookup("java:comp/env/timer/MyTimer");
TimerListener listener = new MyTimerListener();
mgr.schedule(listener, 1000*60,1000*10);
mgr.stop();
|
TimerManagerを使用するJ2EEアプリケーションをコンパイルする場合は,次のJARファイルを含めてください。
<Application Serverのインストールディレクトリ>\CC\lib\ejbserver.jar
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.