Red Hat Training
A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform
第21章 バッチアプリケーションの設定
JBoss EAP 7 には JSR-352 に定義されている Java バッチアプリケーションのサポートが導入されました。バッチアプリケーションを実行するための環境を設定し、batch-jberet
サブシステムを使用してバッチジョブを管理できます。
バッチアプリケーションの開発に関する詳細は、JBoss EAP『 開発ガイド』の「Java バッチアプリケーション開発」を参照してください。
21.1. batch ジョブの設定
JBeret 実装を基にした batch-jberet
サブシステムを使用してバッチジョブを設定できます。
デフォルトの batch-jberet
サブシステム設定は、インメモリージョブリポジトリーとデフォルトのスレッドプールの設定を定義します。
<subsystem xmlns="urn:jboss:domain:batch-jberet:2.0"> <default-job-repository name="in-memory"/> <default-thread-pool name="batch"/> <job-repository name="in-memory"> <in-memory/> </job-repository> <thread-pool name="batch"> <max-threads count="10"/> <keepalive-time time="30" unit="seconds"/> </thread-pool> </subsystem>
デフォルトでは、サーバーの一時停止中に停止したバッチジョブはサーバーの再開時に再度開始されます。restart-jobs-on-resume
プロパティーを false
に設定すると STOPPED
状態のジョブをそのままにすることができます。
/subsystem=batch-jberet:write-attribute(name=restart-jobs-on-resume,value=false)
バッチジョブリポジトリーおよびスレッドプールを設定することもできます。
21.1.1. バッチジョブリポジトリーの設定
本項では、管理 CLI を使用してバッチジョブ情報を保存するインメモリーおよび JDBC ジョブリポジトリーを設定する方法を説明します。管理コンソールを使用してジョブリポジトリーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Batch サブシステムを選択し、左側のメニューから In Memory または JDBC を選択します。
インメモリージョブリポジトリーの追加
バッチジョブ情報をメモリーに保存するジョブリポジトリーを追加できます。
/subsystem=batch-jberet/in-memory-job-repository=REPOSITORY_NAME:add
JDBC ジョブリポジトリー
バッチジョブ情報をデータベースに保存するジョブリポジトリーを追加できます。データソースの名前を指定してデータベースに接続する必要があります。
/subsystem=batch-jberet/jdbc-job-repository=REPOSITORY_NAME:add(data-source=DATASOURCE)
デフォルトのジョブリポジトリーの設定
インメモリーまたは JDBC ジョブリポジトリーをバッチアプリケーションのデフォルトのジョブリポジトリーとして設定できます。
/subsystem=batch-jberet:write-attribute(name=default-job-repository,value=REPOSITORY_NAME)
サーバーをリロードする必要があります。
reload
21.1.2. バッチスレッドプールの設定
本項では、管理 CLI を使用を使用してバッチジョブに使用されるスレッドプールおよびスレッドファクトリーを設定する方法を説明します。管理コンソールを使用してスレッドプールおよびスレッドファクトリーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Batch サブシステムを選択し、左側のメニューから Thread Pools または Thread Factories を選択します。
スレッドプールの設定
スレッドプールを追加するときに max-threads
を指定する必要があります。パーティションのジョブが想定どおりに実行されるように 2 つのスレッドが予約されているため、3
よりも大きい値を常に設定してください。
スレッドプールを追加します。
/subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:add(max-threads=10)
必要な場合は
keepalive-time
の値を設定します。/subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=keepalive-time,value={time=60,unit=SECONDS})
スレッドファクトリーの使用
スレッドファクトリーを追加します。
/subsystem=batch-jberet/thread-factory=THREAD_FACTORY_NAME:add
スレッドファクトリーの属性を設定します。
-
group-name
- このスレッドファクトリーに作成するスレッドグループの名前。 -
priority
- 作成されたスレッドの優先度。 thread-name-pattern
- スレッドの名前の作成に使用されるテンプレート。以下のパターンを使用できます。-
%%
- パーセント記号 -
%t
- ファクトリーごとのスレッドシーケンス番号 -
%g
- グローバルスレッドシーケンス番号 -
%f
- ファクトリーシーケンス番号 -
%i
- スレッド ID
-
-
スレッドファクトリーをスレッドプールに割り当てます。
/subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=thread-factory,value=THREAD_FACTORY_NAME)
サーバーをリロードする必要があります。
reload
デフォルトスレッドプールの設定
別のスレッドプールをデフォルトのスレッドプールとして設定できます。
/subsystem=batch-jberet:write-attribute(name=default-thread-pool,value=THREAD_POOL_NAME)
サーバーをリロードする必要があります。
reload
スレッドプールの統計表示
read-resource
管理 CLI 操作を使用するとバッチスレッドプールのランタイム情報を表示できます。このランタイム情報を表示するには include-runtime=true
パラメーターを使用する必要があります。
/subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:read-resource(include-runtime=true) { "outcome" => "success", "result" => { "active-count" => 0, "completed-task-count" => 0L, "current-thread-count" => 0, "keepalive-time" => undefined, "largest-thread-count" => 0, "max-threads" => 15, "name" => "THREAD_POOL_NAME", "queue-size" => 0, "rejected-count" => 0, "task-count" => 0L, "thread-factory" => "THREAD_FACTORY_NAME" } }
管理コンソールの Runtime タブで Batch サブシステムを選択して、バッチスレッドプールのランタイム情報を表示することもできます。
21.2. バッチジョブの管理
デプロイメントの batch-jberet
サブシステムリソースを使用すると、バッチジョブを起動、停止、および再起動でき、実行詳細を表示することもできます。バッチジョブは 管理 CLI または 管理コンソール から管理できます。
管理 CLI からのバッチジョブの管理
バッチジョブの再開
STOPPED
または FAILED
状態のジョブを再開するには、実行 ID を指定し、任意でバッチジョブの再開時に使用するプロパティーを指定します。
/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:restart-job(execution-id=EXECUTION_ID,properties={PROPERTY=VALUE})
実行 ID はジョブインスタンスが最後に実行された ID である必要があります。
バッチジョブの開始
バッチジョブを開始するには、ジョブ XML ファイルを指定し、任意でバッチジョブの再開時に使用するプロパティーを指定します。
/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:start-job(job-xml-name=JOB_XML_NAME,properties={PROPERTY=VALUE})
バッチジョブの停止
実行中のバッチジョブを停止するには、実行 ID を指定します。
/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:stop-job(execution-id=EXECUTION_ID)
バッチジョブ実行詳細の表示
バッチジョブ実行の詳細を表示することができます。このランタイム情報を表示するには、 read-resource
操作で include-runtime=true
パラメーターを使用する必要があります。
/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:read-resource(recursive=true,include-runtime=true)
{
"outcome" => "success",
"result" => {"job" => {"import-file" => {
"instance-count" => 2,
"running-executions" => 0,
"execution" => {
"2" => {
"batch-status" => "COMPLETED",
"create-time" => "2016-04-11T22:03:12.708-0400",
"end-time" => "2016-04-11T22:03:12.718-0400",
"exit-status" => "COMPLETED",
"instance-id" => 58L,
"last-updated-time" => "2016-04-11T22:03:12.719-0400",
"start-time" => "2016-04-11T22:03:12.708-0400"
},
"1" => {
"batch-status" => "FAILED",
"create-time" => "2016-04-11T21:57:17.567-0400",
"end-time" => "2016-04-11T21:57:17.596-0400",
"exit-status" => "Error : org.hibernate.exception.ConstraintViolationException: could not execute statement",
"instance-id" => 15L,
"last-updated-time" => "2016-04-11T21:57:17.597-0400",
"start-time" => "2016-04-11T21:57:17.567-0400"
}
}
}}}
}
管理コンソールからのバッチジョブの管理
管理コンソールからバッチジョブを管理するには Runtime タブに移動してサーバーを選択し、 Subsystems → Batch → View と選択します。 その後、Jobs タブを開きます。
バッチジョブの再開
表から最後に実行したジョブインスタンスを選択して Restart
をクリックし、STOPPED
または FAILED
のジョブを再起動します。
バッチジョブの開始
表からジョブを選択して Start
をクリックし、バッチジョブの実行を新たに開始します。
バッチジョブの停止
表で実行を選択して Stop
をクリックし、実行中のバッチジョブを停止します。
バッチジョブ実行詳細の表示
表で実行が選択されると、ジョブ実行の詳細が Job Status の部分に表示されます。
21.3. バッチジョブのセキュリティー設定
batch-jberet
サブシステムを設定すると、Elytron セキュリティードメインで バッチジョブを実行することができます。これにより、バッチジョブをセキュアに一時停止でき、同じセキュアなアイデンティティーで再開できます。たとえば、batch-jberet
サブシステムを使用して、バッチジョブを開始するためにセキュアな RESTful エンドポイントが作成されます。RESTful エンドポイントと batch-jberet
サブシステムの両方が同じセキュリティードメインを使用してセキュア化された場合、または batch-jberet
セキュリティードメインが RESTful エンドポイントのセキュリティードメインドメインを信頼した場合、このように開始されたバッチジョブはセキュアに一時停止され、同じセキュアなアイデンティティーによって再開されます。
以下の管理 CLI コマンドを使用して security-domain
属性を更新し、バッチジョブのセキュリティーを設定します。
/subsystem=batch-jberet:write-attribute(name=security-domain, value=ExampleDomain) reload
バッチジョブには、org.wildfly.extension.batch.jberet.deployment.BatchPermission
パーミッションが必要です。これは、javax.batch.operations.JobOperator
に対応する start
、stop
、restart
、abandon
および read
を提供します。default-permission-mapper
マッパーは org.wildfly.extension.batch.jberet.deployment.BatchPermission
パーミッションを提供します。