第17章 Java バッチアプリケーション開発
JBoss EAP 7 以降、JBoss EAP では JSR-352 で定義された Java バッチアプリケーションがサポートされます。JBoss EAP の batch-jberet サブシステムにより、バッチ設定と監視が行えるようになります。
JBoss EAP でバッチ処理を使用するようアプリケーションを設定するには、必要な依存関係を指定する必要があります。バッチ処理向けの追加の JBoss EAP 機能には、Job Specification Language (JSL) 継承とバッチプロパティーインジェクションが含まれます。
17.1. 必要なバッチ依存関係 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP にバッチアプリケーションをデプロイするには、バッチ処理に必要な追加の依存関係をアプリケーションの pom.xml で宣言する必要があります。必要なこれらの依存関係の例を以下に示します。ほとんどの依存関係は JBoss EAP にすでに含まれているため、スコープは provided に設定されます。
例: pom.xml バッチ依存関係
17.2. Job Specification Language (JSL) 継承 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP batch-jberet サブシステムの機能を使用すると、Job Specification Language (JSL) 継承を使用してジョブ定義の共通の部分を抽象化できます。JSL 継承は JSR-352 1.0 仕様に含まれていないため、JBoss EAP batch-jberet サブシステムは JSL Inheritance v1 のドラフト版に基づいて JSL 継承を実装します。
同じジョブ XML ファイル内の step および flow の継承
step や flow などの親要素は、直接的な実行から除外するために属性 abstract="true" でマークされます。子要素には、親要素を参照する parent 属性が含まれます。
異なるジョブ XML ファイルからのステップの継承
step や job などの子要素には以下が含まれます。
-
jsl-name属性。親要素を含むジョブ XML ファイルの名前 (.xml拡張子なし) を指定します。 -
parent属性。jsl-nameで指定されたジョブ XML ファイルの親要素を参照します。
親要素は、直接的な実行から除外するために属性 abstract="true" でマークされます。
例: chunk-child.xml
<job id="chunk-child" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
<step id="chunk-child-step" parent="chunk-parent-step" jsl-name="chunk-parent">
</step>
</job>
<job id="chunk-child" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
<step id="chunk-child-step" parent="chunk-parent-step" jsl-name="chunk-parent">
</step>
</job>
例: chunk-parent.xml
17.3. バッチプロパティーインジェクション リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP batch-jberet サブシステムの機能を使用すると、ジョブ XML ファイルで定義されたプロパティーをバッチアーティファクトクラスのフィールドにインジェクトできます。ジョブ XML ファイルで定義されたプロパティーは @Inject アノテーションと @BatchProperty アノテーションを使用してフィールドにインジェクトできます。
インジェクトフィールドは以下のいずれかの Java タイプになります。
-
java.lang.String -
java.lang.StringBuilder -
java.lang.StringBuffer 以下のいずれかのプリミティブタイプおよびラッパータイプ:
-
boolean、Boolean -
int、Integer -
double、Double -
long、Long -
char、Character -
float、Float -
short、Short -
byte、Byte
-
-
java.math.BigInteger -
java.math.BigDecimal -
java.net.URL -
java.net.URI -
java.io.File -
java.util.jar.JarFile -
java.util.Date -
java.lang.Class -
java.net.Inet4Address -
java.net.Inet6Address -
java.util.List、List<?>、List<String> -
java.util.Set、Set<?>、Set<String> -
java.util.Map、Map<?, ?>、Map<String, String>、Map<String, ?> -
java.util.logging.Logger -
java.util.regex.Pattern -
javax.management.ObjectName
以下のアレイタイプもサポートされています。
-
java.lang.String[] 以下のいずれかのプリミティブタイプおよびラッパータイプ:
-
boolean[]、Boolean[] -
int[]、Integer[] -
double[]、Double[] -
long[]、Long[] -
char[]、Character[] -
float[]、Float[] -
short[]、Short[] -
byte[]、Byte[]
-
-
java.math.BigInteger[] -
java.math.BigDecimal[] -
java.net.URL[] -
java.net.URI[] -
java.io.File[] -
java.util.jar.JarFile[] -
java.util.zip.ZipFile[] -
java.util.Date[] -
java.lang.Class[]
以下に、バッチプロパティーインジェクションの使用例をいくつか示します。
数字を Batchlet クラスにさまざまなタイプとしてインジェクトする
例: Job XML ファイル
<batchlet ref="myBatchlet">
<properties>
<property name="number" value="10"/>
</properties>
</batchlet>
<batchlet ref="myBatchlet">
<properties>
<property name="number" value="10"/>
</properties>
</batchlet>
例: アーティファクトクラス
数字シーケンスを Batchlet クラスにさまざまなアレイとしてインジェクトする
例: Job XML ファイル
<batchlet ref="myBatchlet">
<properties>
<property name="weekDays" value="1,2,3,4,5,6,7"/>
</properties>
</batchlet>
<batchlet ref="myBatchlet">
<properties>
<property name="weekDays" value="1,2,3,4,5,6,7"/>
</properties>
</batchlet>
例: アーティファクトクラス
クラスプロパティーを Batchlet クラスにインジェクトする
例: Job XML ファイル
<batchlet ref="myBatchlet">
<properties>
<property name="myClass" value="org.jberet.support.io.Person"/>
</properties>
</batchlet>
<batchlet ref="myBatchlet">
<properties>
<property name="myClass" value="org.jberet.support.io.Person"/>
</properties>
</batchlet>
例: アーティファクトクラス
プロパティーインジェクションに対してアノテーション付けされたフィールドにデフォルト値を割り当てる
ターゲットバッチプロパティーがジョブ XML ファイルで定義されていない場合は、アーティファクト Java クラスのフィールドにデフォルト値を割り当てることができます。ターゲットプロパティーが有効な値に解決される場合は、その値がそのフィールドにインジェクトされます。解決されない場合は、値がインジェクトされず、デフォルトのフィールド値が使用されます。
例: アーティファクトクラス