現在実行中のタスクの識別
タスクの実行時、タスク・データベース・レコードはタスクが完了するまでロックされます。 タスクが実行中であるかどうかを判別します。
このタスクについて
バージョン 6.0.2 より前のバージョンでは、タスクはすべて単一のグローバル・トランザクションで実行します。 この処理は、各タスクが read-committed トランザクション分離機能を使用するため、 タスクが複数回正常に実行するのを妨げるだけでなく、タスクの状態を読み取ろうとするすべての試みをブロックします。
タスクが実行中であるかどうかを判断するには、2 つの方法があります。
- NotificationSink
NotificationSink EJB は、TaskInfo オブジェクト上の setNotificationSink メソッドを使用するタスクでの設定が可能です。 NotificationSink Bean は、タスクのライフサイクルをカスタム・テーブルにある別のデータベース・レコードに記録することができます。 これは、スケジューラーから別個に照会できるタスクのヒストリー・ログとなります。 このソリューションは、全バージョンのスケジューラー・サービスで処理できます。 詳しくは、トピック『スケジューラー通知の受信』を参照してください。
- 実行の遅延およびコミットされていない読み取り
バージョン 6.0.2 以降では、2 つの振る舞いにより、スケジューラーの getTask、getTaskStatus または findTasksByName などの検索 API メソッドおよび取得 API メソッドによって、ブロックされずにタスクの現行の状態を確認することができます。 コミットされていない実行状態を含む、タスクの現在の状態を見るには、次のステップを完了します。