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

並列処理機能

並列処理機能は複数の タスクを同時に処理することを可能とする機能です。

タスク間に関連がなく、個々のタスク内でビジネスロジックが完結する場合、並列処理機能を利用することで全体のレスポンスを向上させる可能性があります。

並列処理機能を利用する場合、タスク登録アプリケーションはタスクメッセージを並列タスクキューに登録する必要があります。

Overview of queueing parallelized task process

並列処理機能の概要

タスク

並列処理機能を利用する場合、タスク間には関連性がなく、複数同時実行が可能であることが必要です。 以下の条件をすべて満たす場合は並列処理機能で処理を行うことが可能です。

  • 複数の任意のタスクが同時に実行されても実行結果に影響がない。
  • タスク間の実行順序が予期できないものであっても実行結果に影響がない。

並列タスクキュー

並列タスクキューは並列処理機能を利用する場合にタスクメッセージを登録するタスクキューです。

並列タスクキューの詳細については並列タスクキューを参照してください。

並列処理機能におけるタスクメッセージの登録

並列処理機能を利用する場合、タスク登録アプリケーションは非同期処理機能から提供されているAPIを通じてタスクメッセージを並列タスクキューに登録する必要があります。 APIはタスクメッセージを非同期処理機能に登録後、ビジネスロジックの実行を待たずに復帰します。

並列タスクキューに登録されたタスクメッセージは後にタスクに変換され、ビジネスロジック処理が開始されます。

コラム

タスクメッセージが並列処理機能に登録された時点ではまだ処理が開始されていない可能性があります。

タスクメッセージを登録すると、登録時のコンテキストの情報も保存されます。 タスクメッセージ登録時のコンテキスト情報は、タスクのビジネスロジック実行時に取得して利用することが可能です。

Java

Javaでタスクメッセージを登録する場合、jp.co.intra_mart.foundation.asynchronous.TaskManagerクラスのaddParallelizedTaskメソッドを呼び出します。 このメソッドを呼び出すことによってタスク登録アプリケーションはJavaを通じて並列タスクキューにタスクメッセージを追加します。

TaskManager#addParallelizedTask

public static jp.co.intra_mart.foundation.asynchronous.ParallelizedTaskMessage
   addParallelizedTask(
      java.lang.String taskClassName,
      java.util.Map<java.lang.String, ?> parameter,
      boolean keepTaskMessageOnError
   ) throws
      jp.co.intra_mart.foundation.asynchronous.TaskControlException

taskClassNameにはビジネスロジックを実行するタスクのクラス名を指定します。

parameterにはビジネスロジック実行時に受け渡したいパラメータを指定します。 パラメータとして指定できる値はJavaを利用するときのパラメータの制限の内容に準じます。 パラメータに無効な値が指定された場合、java.lang.IllegalArgumentExceptionが返されます。

keepTaskMessageOnErrorにはtaskClassNameで指定したタスクの実行時に例外が発生した場合、対象となるタスクメッセージをエラー終了状態にするかどうかを指定します(本引数はintra-mart Accel Platform 2021 Summer(Cattleya)以降のバージョンで利用可能です)。

  • trueが設定された場合、例外発生時には対象となるタスクメッセージをエラー終了状態にします。
  • falseが設定された場合、例外発生時であっても対象となるタスクメッセージを破棄状態にします。

このメソッドは戻り値としてjp.co.intra_mart.foundation.asynchronous.ParallelizedTaskMessageを返します。

サーバサイドJavaScript

サーバサイドJavaScriptでタスクメッセージを登録する場合、WorkManagerオブジェクトのaddParallelizedTask関数を呼び出します。 この関数を呼び出すことによってタスク登録アプリケーションはサーバサイドJavaScriptを通じて並列タスクキューにタスクメッセージを追加します。

WorkManager#addParallelizedTask

function addParallelizedTask(jsPath, parameter, keepTaskMessageOnError)

jsPathにはビジネスロジックとなるrun関数が定義されているJSソースファイルのパスを指定します。

parameterにはビジネスロジック実行時に受け渡したいパラメータを指定します。 パラメータとして指定できる値はサーバサイドJavaScriptを利用するときのパラメータの制限の内容に準じます。

keepTaskMessageOnErrorにはjsPath で指定したタスクの実行時に例外が発生した場合、対象となるタスクメッセージをエラー終了状態にするかどうかを指定します(本引数はintra-mart Accel Platform 2021 Summer(Cattleya)以降のバージョンで利用可能です)。

  • trueが設定された場合、例外発生時には対象となるタスクメッセージをエラー終了状態にします。
  • falseが設定された場合、例外発生時であっても対象となるタスクメッセージを破棄状態にします。

このメソッドは戻り値としてメッセージIDを返します。

並列処理機能におけるタスクメッセージの削除

並列タスクキューにタスクメッセージが登録された後であっても、タスクメッセージが実際にタスクとして実行される前(選択待機状態を参照)であれば任意の時点でタスクメッセージを削除できます。 タスクメッセージはAPIまたは非同期処理管理画面を通じて削除することが可能です。

Java

Javaでタスクメッセージを削除する場合、jp.co.intra_mart.foundation.asynchronous.TaskManagerクラスのremoveParallelizedTaskメソッドを呼び出します。 このメソッドを呼び出すことによってタスク管理アプリケーションはJavaを通じて並列タスクキューからビジネスロジック実行前のタスクメッセージを削除します。

TaskManager#removeParallelizedTask

public static boolean removeParallelizedTask(
      final String messageId
   ) throws
      jp.co.intra_mart.foundation.asynchronous.TaskIllegalStateException,
      jp.co.intra_mart.foundation.asynchronous.InvalidTaskException,
      jp.co.intra_mart.foundation.asynchronous.TaskControlException

messageIdにはTaskManager#addParallelizedTaskまたはWorkManager#addParallelizedTaskの呼び出し時に取得されたメッセージIDを指定します。

messageIdが並列タスクキューに登録されたものでない場合、jp.co.intra_mart.foundation.asynchronous.InvalidTaskExceptionが返されます。

messageIdに該当するタスクメッセージが(実行中などの理由により)削除できなかった場合、jp.co.intra_mart.foundation.asynchronous.TaskIllegalStateExceptionが返されます。

Javascript API

サーバサイドJavaScriptでタスクメッセージを削除する場合、WorkManagerクラスのremoveParallelizedTaskメソッドを呼び出します。 このメソッドを呼び出すことによってタスク管理アプリケーションはサーバサイドJavaScriptを通じて並列タスクキューからビジネスロジック実行前のタスクメッセージを削除します。

WorkManager#removeParallelizedTask

function removeParallelizedTask(messageId)

messageIdにはTaskManager#addParallelizedTaskまたはWorkManager#addParallelizedTaskの呼び出し時に取得されたメッセージIDを指定します。

並列処理機能におけるエラー終了状態のタスクメッセージの再登録

エラー終了状態のタスクメッセージを再実行する場合、タスク登録アプリケーションは非同期処理機能から提供されているAPIまたは非同期処理管理画面を通じてタスクメッセージを並列タスクキューに再登録する必要があります。 APIはタスクメッセージを非同期処理機能に登録後、ビジネスロジックの実行を待たずに復帰します。

並列タスクキューに再登録されたタスクメッセージは後にタスクに変換され、ビジネスロジック処理が開始されます。

コラム

タスクメッセージが並列処理機能に再登録された時点ではまだ処理が開始されていない可能性があります。

再登録時はタスクメッセージを登録した際のコンテキストの情報やパラメータを再利用できます。

エラー終了状態のタスクメッセージの再登録は、intra-mart Accel Platform 2021 Summer(Cattleya)以降のバージョンで利用可能です。

Java

Javaでエラー終了状態のタスクメッセージを再登録する場合、jp.co.intra_mart.foundation.asynchronous.TaskManagerクラスのreentryErroredTaskメソッドを呼び出します。 このメソッドを呼び出すことによってタスク登録アプリケーションはJavaを通じて並列タスクキューにタスクメッセージを追加します。

TaskManager#reentryErroredTask

public static jp.co.intra_mart.foundation.asynchronous.TaskMessage
   reentryErroredTask(
      java.lang.String messageId,
      boolean usePreviousContext,
      java.util.Map<java.lang.String, ?> parameter
   ) throws
      jp.co.intra_mart.foundation.asynchronous.TaskIllegalStateException,
      jp.co.intra_mart.foundation.asynchronous.TaskControlException

messageIdにはTaskManager#addParallelizedTaskまたはWorkManager#addParallelizedTaskの呼び出し時に取得されたメッセージIDを指定します。

usePreviousContextには前回実行時に利用したコンテキストの情報を再利用するかどうかを指定します。

  • trueが設定された場合、前回実行時に利用したコンテキストの情報を再利用します。
  • falseが設定された場合、再登録時(本メソッドを呼び出した時点)のコンテキストの情報を利用します。

parameterにはビジネスロジック実行時に受け渡したいパラメータを指定します。 パラメータとして指定できる値はJavaを利用するときのパラメータの制限の内容に準じます。 パラメータに無効な値が指定された場合、java.lang.IllegalArgumentExceptionが返されます。 省略した場合は、前回登録時に指定したパラメータを使用します。

このメソッドは戻り値としてjp.co.intra_mart.foundation.asynchronous.ParallelizedTaskMessageを返します。

サーバサイドJavaScript

Javaでエラー終了状態のタスクメッセージを再登録する場合、WorkManagerオブジェクトのreentryErroredTask関数を呼び出します。 この関数を呼び出すことによってタスク登録アプリケーションはサーバサイドJavaScriptを通じて並列タスクキューにタスクメッセージを追加します。

WorkManager#reentryErroredTask

function reentryErroredTask(messageId, usePreviousContext, parameter)

messageIdにはTaskManager#addParallelizedTaskまたはWorkManager#addParallelizedTaskの呼び出し時に取得されたメッセージIDを指定します。

usePreviousContextには前回実行時に利用したコンテキストの情報を再利用するかどうかを指定します。

  • trueが設定された場合、前回実行時に利用したコンテキストの情報を再利用します。
  • falseが設定された場合、再登録時(本関数を呼び出した時点)のコンテキストの情報を利用します。

parameterにはビジネスロジック実行時に受け渡したいパラメータを指定します。 パラメータとして指定できる値はサーバサイドJavaScriptを利用するときのパラメータの制限の内容に準じます。 省略した場合は、前回登録時に指定したパラメータを使用します。

この関数は戻り値としてメッセージID(messageIdに指定されたメッセージIDと同じ値)を返します。

並列処理機能におけるエラー終了状態のタスクメッセージの削除

エラー終了状態のタスクメッセージは、APIまたは非同期処理管理画面を通じて削除できます。

コラム

エラー終了状態のタスクメッセージの削除は、intra-mart Accel Platform 2021 Summer(Cattleya)以降のバージョンで利用可能です。

Java

Javaでエラー終了状態のタスクメッセージを削除する場合、jp.co.intra_mart.foundation.asynchronous.TaskManagerクラスのremoveErroredTaskメソッドを呼び出します。 このメソッドを呼び出すことによってタスク管理アプリケーションはJavaを通じてエラー終了状態のタスクメッセージを削除します。

TaskManager#removeErroredTask

public static jp.co.intra_mart.foundation.asynchronous.report.SearchRegisteredTaskInfo<? extends jp.co.intra_mart.foundation.asynchronous.report.RegisteredTaskInfo>
   removeErroredTask(
      final java.lang.String messageId
   ) throws
      jp.co.intra_mart.foundation.asynchronous.TaskIllegalStateException,
      jp.co.intra_mart.foundation.asynchronous.TaskControlException

messageIdにはTaskManager#addParallelizedTaskまたはWorkManager#addParallelizedTaskの呼び出し時に取得されたメッセージIDを指定します。

messageIdに該当するタスクメッセージが(エラー終了状態以外などの理由により)削除できなかった場合、jp.co.intra_mart.foundation.asynchronous.TaskIllegalStateExceptionが返されます。

このメソッドは戻り値としてjp.co.intra_mart.foundation.asynchronous.report.SearchRegisteredTaskInfo<? extends jp.co.intra_mart.foundation.asynchronous.report.RegisteredTaskInfo>を返します。
仮型パラメータの実型はjp.co.intra_mart.foundation.asynchronous.report.RegisteredParallelizedTaskInfoです。

サーバサイドJavaScript

サーバサイドJavaScriptでエラー終了状態のタスクメッセージを削除する場合、WorkManagerクラスのremoveErroredTask関数を呼び出します。 この関数を呼び出すことによってタスク管理アプリケーションはサーバサイドJavaScriptを通じてエラー終了状態のタスクメッセージを削除します。

WorkManager#removeErroredTask

function removeErroredTask(messageId)

messageIdにはTaskManager#addParallelizedTaskまたはWorkManager#addParallelizedTaskの呼び出し時に取得されたメッセージIDを指定します。

この関数は戻り値として削除したタスクメッセージを返します。