第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 よりも大きい値を常に設定してください。

  1. スレッドプールを追加します。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:add(max-threads=10)
  2. 必要な場合は keepalive-time の値を設定します。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=keepalive-time,value={time=60,unit=SECONDS})
スレッドファクトリーの使用
  1. スレッドファクトリーを追加します。

    /subsystem=batch-jberet/thread-factory=THREAD_FACTORY_NAME:add
  2. スレッドファクトリーの属性を設定します。

    • group-name - このスレッドファクトリーに作成するスレッドグループの名前。
    • priority - 作成されたスレッドの優先度。
    • thread-name-pattern - スレッドの名前の作成に使用されるテンプレート。以下のパターンを使用できます。

      • %% - パーセント記号
      • %t - ファクトリーごとのスレッドシーケンス番号
      • %g - グローバルスレッドシーケンス番号
      • %f - ファクトリーシーケンス番号
      • %i - スレッド ID
  3. スレッドファクトリーをスレッドプールに割り当てます。

    /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 タブに移動してサーバーを選択し、 SubsystemsBatchView と選択します。 その後、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 に対応する startstoprestartabandonおよび read を提供します。default-permission-mapper マッパーは org.wildfly.extension.batch.jberet.deployment.BatchPermission パーミッションを提供します。