intra-mart Accel Platform 非同期仕様書 第6版 2021-08-01

ライフサイクル

非同期処理機能には様々な状態やイベントが存在します。

本章では非同期処理機能における生成や破棄を含んだ様々なイベントとその発生タイミングを説明します。

タスク

Status diagram of task

タスクの状態遷移図

状態

選択待機状態

タスクキューの中でタスク管理アプリケーションによる選択を待機している状態です。

この時点ではタスクのビジネスロジックは実行されていません。

初期状態

タスク管理アプリケーションによってタスクキューに登録されているタスクメッセージが選択され、タスクに変換された状態です。

この時点ではタスクのビジネスロジックは実行されていません。

受付待機状態

タスクに実行時のパラメータが設定され、タスク実行エンジンによって受け付けられることを待機中である状態です。

この時点ではタスクのビジネスロジックは実行されていません。

処理実行可能状態

タスクがタスク実行エンジンによって受け付けられ、ビジネスロジックの開始を待機している状態です。

この時点ではタスクのビジネスロジックは実行されていません。

処理実行中状態

タスクのビジネスロジックが実行されている状態です。

処理終了待機状態

タスクのビジネスロジックの完了を待機している状態です。

破棄状態

タスクメッセージがタスクキューに登録されていない、または削除されている状態です。

エラー終了状態

タスクのビジネスロジックの実行に失敗し、ユーザによる措置を待機している状態です。

コラム

以下のいずれかに該当する場合に、タスクメッセージはエラー終了状態に遷移します。

エラー終了状態への遷移はintra-mart Accel Platform 2021 Summer(Cattleya)以降のバージョンで利用可能です。

イベント

タスクメッセージの登録

タスク登録アプリケーションによってタスクキューにタスクメッセージが取得されると、該当するタスクは選択待機状態です。

コラム

タスクメッセージの登録方法については、以下も参照してください。

タスク管理アプリケーションによる選択

タスク管理アプリケーションによってタスクキューからタスクメッセージが取得されると、タスクのインスタンスが生成されます。

インスタンスが生成された直後のタスクは初期状態です。

コラム

JavaでTaskインタフェースを実装したタスクのコンストラクタがこのタイミングで呼び出されます。

タスクパラメータ設定

初期状態において、タスクメッセージ登録時に指定したパラメータが生成されたタスクに対して設定されます。

パラメータが設定されたタスクは受付待機状態です。

コラム

JavaでTaskインタフェースを実装したタスクを登録した場合、Task#setParameterメソッドが呼び出されます。

サーバサイドJavaScriptでタスクを登録した場合、指定されたJSファイルのsetParameter(parameter)関数が呼び出されます(同関数が定義されている場合)。

タスク受付

受付待機状態となっているタスクが非同期処理機能によって受け付けられ、処理を実行する準備ができると、該当するイベントが通知されます。

受け付けられたタスクは処理実行可能状態です。

コラム

JavaでTaskインタフェースを実装したタスクを登録した場合、Task#taskAcceptedメソッドが呼び出されます。

サーバサイドJavaScriptでタスクを登録した場合、指定されたJSファイルのtaskAccepted(event)関数が呼び出されます(同関数が定義されている場合)。

コラム

「受け付け」とはタスクがいずれ開始されることが確約された状態です。 この時点ではビジネスロジックはまだ開始されていません。

タスク処理開始

タスクの処理を実行する直前になると、該当するイベントが通知されます。

このイベント通知が問題なく終了すると、タスクのビジネスロジックは直ちに開始され、処理実行中状態です。

コラム

JavaでTaskインタフェースを実装したタスクを登録した場合、Task#taskStartedメソッドが呼び出されます。

サーバサイドJavaScriptでタスクを登録した場合、指定されたJSファイルのtaskStarted(event)関数が呼び出されます(同関数が定義されている場合)。

タスク処理完了

タスクのビジネスロジックが完了すると、該当するイベントが通知されます。 このイベントは、ビジネスロジックの内部で例外が発生した場合も通知されます。

このイベント通知が問題なく終了(例外発生による終了も含む)すると、タスクは以下のいずれかの状態に変わります。

コラム

JavaでTaskインタフェースを実装したタスクを登録した場合、Task#taskCompletedメソッドが呼び出されます。

サーバサイドJavaScriptでタスクを登録した場合、指定されたJSファイルのtaskCompleted(event)関数が呼び出されます(同関数が定義されている場合)。

タスク受付拒否

受付待機状態となっているタスクが何らかの理由で非同期処理機能によって受け付けされなかった場合、該当するイベントが通知されます。

この場合タスクは選択待機状態に戻ります。

コラム

JavaでTaskインタフェースを実装したタスクを登録した場合、Task#taskRejectedメソッドが呼び出されます。

サーバサイドJavaScriptでタスクを登録した場合、指定されたJSファイルのtaskRejected(event)関数が呼び出されます(同関数が定義されている場合)。

タスク終了通知

処理実行中状態であるタスクに対して終了通知 がされる場合、該当するメソッドが呼び出されます。

このイベント通知が問題なく終了すると、処理終了待機状態に変わります。

この状態になると、たとえビジネスロジックが完了していなくても、タスクは非同期処理機能からは管理対象外の(ビジネスロジックを実行していない)タスクとして扱われます。

コラム

JavaでTaskインタフェースを実装したタスクを登録した場合、Task#releaseメソッドが呼び出されます。

注意

サーバサイドJavaScriptには該当するメソッドが存在しません。 しかしながら、終了通知がされたタスクは、たとえビジネスロジックが実行中であっても非同期処理機能からは管理対象外のタスクとして扱われます。

コラム

タスク終了通知については、終了通知も参照してください。

タスク強制中断

処理実行中状態であるタスクに対して強制停止 がされるとJavaのjava.lang.Thread#stop()が呼び出されます。

メソッドが呼び出された後、タスク処理完了で示されたイベントが通知されます。

強制停止された時の指定内容によって、タスクは以下のいずれかの状態に変わります。

コラム

タスク強制中断については、強制停止も参照してください。

タスクメッセージの削除

選択待機状態にあるタスクは任意の時点でタスクキューから削除することが可能です。

この場合、タスクは破棄状態に変わります。

並列タスクキュー

Status diagram of parallelized task queue

並列タスクキューの状態遷移図

並列タスクキューはテナントで1つだけ用意されています。

並列タスクキューは追加または削除できません。

状態

有効状態

並列タスクキューの先頭からタスクメッセージを取得し、タスクに変換してビジネスロジックを実行できる状態です。

無効状態

並列タスクキューの先頭からタスクメッセージを取得できない状態です。

タスクメッセージの登録は可能です。

イベント

インストール時

並列タスクキューは非同期処理機能がインストールされた時点では有効状態です。

並列タスクキューの活性化

並列タスクキューは任意の時点で有効状態にすることが可能です。

並列タスクキューの非活性化

並列タスクキューは任意の時点で無効状態にすることが可能です。

直列タスクキュー

Status diagram of serialized task queue

直列タスクキューの状態遷移図

直列タスクキューは非同期処理機能がインストールされた時点では何も登録されていない状態です。

状態

破棄状態

直列タスクキューが非同期処理機能から削除された状態です。

この状態ではタスクメッセージの登録や削除はできません。

有効状態

タスク実行エンジンが直列タスクキューの先頭からタスクメッセージを取得し、タスクに変換してビジネスロジックを実行できる状態です。

ただし、直列タスクキュー内に現在以下の状態のタスクが存在する場合、タスク実行エンジンはタスクメッセージを取得できません。

  • 初期状態
  • 受付待機状態
  • 処理実行可能状態
  • 処理実行中状態

無効状態

直列タスクキューの先頭からタスクメッセージを取得できない状態です。

タスクメッセージの登録は可能です。

イベント

直列タスクキューの追加

直列タスクキューは任意の時点で追加することが可能です。

この時、初期状態を以下のいずれかにして追加できます。

直列タスクキューの削除

直列タスクキューは任意の時点で削除することが可能です。

ただし、タスクメッセージが1つでも登録されている直列タスクキューは削除できません。

直列タスクキューの活性化

直列タスクキューは任意の時点で有効状態にすることが可能です。

直列タスクキューの非活性化

直列タスクキューは任意の時点で無効状態にすることが可能です。