10.2.2 スレッドの非同期並行処理で使用できるJava EEの機能

非同期並行処理として実行する処理の中では,Java EEの機能を使用できます。Java EEの機能を使用できるTimerManagerおよびWorkManagerのAPIを次に示します。

TimerManager
  • TimerListener.timerExpired
    設定した時間に達したときに実行されるメソッドです。
  • StopTimerListener.timerStop
    TimerManager.stopメソッドが実行されたとき,またはアプリケーションが停止したときに実行されるメソッドです。
  • CancelTimerListener.timerCancel
    TimerManager.cancelメソッドが実行されたときに実行されるメソッドです。
WorkManager
  • Work.run
    WorkManagerで非同期に実行される処理メソッドです。
  • WorkListener.workAccepted
    スケジュールしたWorkをWorkManagerが受け付けるときに実行されるメソッドです。
  • WorkListener.workCompleted
    スケジュールされたWorkのrunメソッドが終了した直後に実行されるメソッドです。
  • WorkListener.workRejected
    スケジュールしたWorkをWorkManagerが受け付けたあとに,スケジュール処理を継続できなくなった場合に実行されるメソッドです。
  • WorkListener.workStarted
    スケジュールされたWorkのrunメソッドが実行される直前に実行されるメソッドです。

それぞれのAPIの詳細については,Timer and Work Manager for Application ServersのAPI仕様を参照してください。

TimerManagerおよびWorkManagerで使用できるJava EE機能を次の表に示します。

表10-2 TimerManagerおよびWorkManagerで使用できるJava EEの機能

機能名使用可否参照先
Enterprise Beanの呼び出し×
ネーミングサービス(1)
トランザクションサービスとリソース接続(2)
ログとトレースの出力(3)
コンテナ拡張ライブラリの利用(4)
メソッドキャンセル×
(凡例)
○:使用できる
×:使用できない
-:該当なし
注※
ただし,一部の機能については使用できません。使用できる機能については,「参照先」の列に示す情報を参照してください。

次に,TimerManagerおよびWorkManagerで使用できる機能を詳細に分類して説明します。また,それぞれの機能を使用する場合の注意事項についても説明します。

<この項の構成>
(1) ネーミングサービス
(2) トランザクションサービスとリソース接続
(3) ログとトレースの出力
(4) コンテナ拡張ライブラリの利用

(1) ネーミングサービス

ネーミングサービスとして提供する機能がTimerManagerおよびWorkManagerで使用できるかどうかを次の表に示します。

表10-3 ネーミングサービスの機能の使用可否

機能名使用可否
JNDIを使用したDB Connectorのルックアップ
JNDIを使用したJava Mailのルックアップ×
JNDIを使用したJavaBeansリソースのルックアップ×
JNDIを使用したEntityManagerのルックアップ×
JNDIを使用したEntityManagerFactoryのルックアップ×
JNDIを使用したTimerManagerのルックアップ×※1
JNDIを使用したWorkManagerのルックアップ×※1
JNDIを使用したユーザトランザクションのルックアップ※2
(凡例)
○:使用できる
×:使用できない

注※1 TimerManagerやWorkManagerのスケジュールの延長で,さらにTimerManagerやWorkManagerを呼び出すことはできません。

注※2 スケジュール元が,CMTでトランザクションを管理するEJBの場合は,java:comp/UserTransactionでルックアップできません。必ずHITACHI_EJB/SERVERS/<J2EEサーバ名>/SERVICES/UserTransactionを使用してルックアップしてください。


注意
スケジュール元で取得したDB ConnectorやユーザトランザクションをWorkManagerまたはTimerManager中で使用しないでください。必ず実行した処理を実装したTimer ListenerまたはWork内で取得してください。

(2) トランザクションサービスとリソース接続

リソースアダプタには,DB Connectorだけを使用できます。TimerManagerおよびWorkManagerで使用できるDB Connectorを次の表に示します。

表10-4 DB Connectorの使用可否

DB Connector名使用可否
DBConnector_HiRDB_Type4_CP.rar
DBConnector_HiRDB_Type4_XA.rar
DBConnector_Oracle_CP.rar
DBConnector_Oracle_XA.rar
DBConnector_HiRDB_Type4_CP_Cosminexus_RM.rar×
DBConnector_HiRDB_Type4_XA_Cosminexus_RM.rar×
DBConnector_Oracle_CP_Cosminexus_RM.rar×
DBConnector_Oracle_XA_Cosminexus_RM.rar×
DBConnector_CP_ClusterPool_Root.rar×
DBConnector_Oracle_CP_ClusterPool_Member.rar×
(凡例)
○:使用できる
×:使用できない

DB Connectorを使用する場合,トランザクションサポートレベルには,NoTransaction,LocalTransaction,またはXATransactionを指定してください。DB Connectorのコネクションを取得するには,DB Connectorの別名を設定する必要があります。JNDIによるルックアップでは,設定した別名を使用して,DB Connectorのコネクションを取得してください。DB Connectorの別名を使用したコネクションの取得方法については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「2.6 Enterprise BeanまたはJ2EEリソースへの別名付与(ユーザ指定名前空間機能)」を参照してください。

リソース接続およびトランザクションサービスとして提供する機能がTimerManagerおよびWorkManagerで使用できるかどうかを次の表に示します。

表10-5 トランザクションサービスの機能の使用可否

機能名使用可否
トランザクション
(ユーザトランザクション)
ローカルトランザクション
グローバルトランザクション
トランザクションの自動決着※1
トランザクションタイムアウト
コネクションプーリングDB Connectorによるコネクションプーリング
コネクションプールのウォーミングアップ
コネクション数調節
コネクションシェアリング※2
コネクションアソシエーション×
DB Connectorのステートメントプーリング
コネクションの障害検知
コネクション枯渇時のコネクション取得待ち
コネクション取得リトライ
コネクション自動クローズ×
コネクションスイーパ
障害調査用SQLの出力
(凡例)
○:使用できる
△:一部の機能が使用できない
×:使用できない

注※1 ユーザトランザクションは,リスナの処理メソッドからリターンする前に決着する必要があります。トランザクションが決着していない場合,例外が発生しなくてもトランザクションはロールバックされて,メッセージ(KDJE43179-W)が出力されます。

注※2 シェアリングできるコネクションの範囲は,デフォルトで設定される「同一トランザクション」だけです。


注意
取得したDB Connectorのコネクションは自動でクローズされないため,必ずメソッド内でコネクションをクローズするように設定してください。

(3) ログとトレースの出力

ログとトレースを出力する機能がTimerManagerおよびWorkManagerで使用できるかどうかを次の表に示します。

表10-6 ログとトレースの機能の使用可否

機能名使用可否
ユーザログ
性能解析トレース
(凡例)
○:使用できる

参考
性能解析トレースのオペレーション名について
TimerManagerおよびWorkManagerの性能解析トレースでは,スケジュールごとに一意の番号を取得できます。この情報は,トレース情報のオペレーション名に出力されます。取得できるトレース情報の詳細については,マニュアル「アプリケーションサーバ 機能解説 保守/移行編」の「8. 性能解析トレースのトレース取得ポイントとPRFトレース取得レベル」を参照してください。

(4) コンテナ拡張ライブラリの利用

コンテナ拡張ライブラリの機能は,TimerManagerおよびWorkManagerを使用しない場合と同様に使用できます。