9.3. 管理対象エグゼキューターサービス

管理対象エグゼキューターサービス (javax.enterprise.concurrent.ManagedExecutorService) を使用すると、Jakarta EE アプリケーションで非同期実行向けタスクを送信できます。JBoss EAP は管理対象エグゼキューターサービスインスタンスを処理するため、Jakarta EE アプリケーションはライフサイクル関連メソッドを呼び出すことができません。

管理対象エグゼキューターサービスコンカレンシーユーティリティーの属性には以下のものがあります。

  • context-service: オプション。既存のコンテキストサービスをその名前で参照します。指定された場合は、参照されたコンテキストサービスがタスクをエグゼキューターに送信したときに存在する呼び出しコンテキストを取得します (このコンテキストはタスクの実行時に使用されます)。
  • jndi-name: JNDI で管理対象スレッドファクトリーを配置する場所を定義します。
  • max-threads: エグゼキューターによって使用されるスレッドの最大数を定義します。未定義の場合は、core-threads からの値が使用されます。
  • thread-factory: 既存の管理対象スレッドファクトリーをその名前で参照して内部スレッドの作成を処理します。指定されない場合は、デフォルト設定の管理対象スレッドファクトリーが作成され、内部で使用されます。
  • core-threads: エクゼキューターによって使用されるスレッドの最小数。この属性を定義しないと、プロセッサーの数を基にしてデフォルトが算出されます。0 を値として指定することは推奨されません。キューイングストラテジーの決定にこの値がどのように使用されるかは、queue-length 属性を参照してください。
  • keepalive-time: 内部スレッドをアイドル状態にできる時間 (ミリ秒単位) を定義します。属性のデフォルト値は 60000 です。
  • queue-length: エクゼキューターのタスクキューの容量を示します。長さが 0 の場合は直接ハンドオフを意味し、拒否される可能性があります。この属性が定義されていない場合または Integer.MAX_VALUE に設定された場合は、非有界のキューが使用されるべきであることを示します。他のすべての値は正確なキューのサイズを指定します。非有界のキューまたは直接ハンドオフが使用される場合は、0 よりも大きな core-threads の値が必要になります。
  • hung-task-threshold: この属性は今後使用するためのものです。
  • long-running-tasks: この属性は今後使用するためのものです。
  • reject-policy: タスクがエグゼキューターによって拒否されたときに使用するポリシーを定義します。属性値は、デフォルト値で、例外が発生する ABORT、または例外を発生する前にエグゼキューターがもう 1 度送信を試みる RETRY_ABORT のいずれかになります。

例: 新しい管理対象エグゼキューターサービスの追加

/subsystem=ee/managed-executor-service=newManagedExecutorService:add(jndi-name=java:jboss/ee/concurrency/executor/newManagedExecutorService, core-threads=7, thread-factory=default)

例: 管理対象エグゼキューターサービスの変更

/subsystem=ee/managed-executor-service=newManagedExecutorService:write-attribute(name=core-threads,value=10)

この操作にはリロードが必要です。同様に、他の属性を変更することもできます。

例: 管理対象エグゼキューターサービスの削除

/subsystem=ee/managed-executor-service=newManagedExecutorService:remove()

この操作にはリロードが必要です。