18.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>
例: アーティファクトクラス
@Named
public class MyBatchlet extends AbstractBatchlet {
@Inject
@BatchProperty
int number; // Field name is the same as batch property name.
@Inject
@BatchProperty (name = "number") // Use the name attribute to locate the batch property.
long asLong; // Inject it as a specific data type.
@Inject
@BatchProperty (name = "number")
Double asDouble;
@Inject
@BatchProperty (name = "number")
private String asString;
@Inject
@BatchProperty (name = "number")
BigInteger asBigInteger;
@Inject
@BatchProperty (name = "number")
BigDecimal asBigDecimal;
}
数字シーケンスを Batchlet クラスにさまざまなアレイとしてインジェクトする
例: Job XML ファイル
<batchlet ref="myBatchlet">
<properties>
<property name="weekDays" value="1,2,3,4,5,6,7"/>
</properties>
</batchlet>
例: アーティファクトクラス
@Named
public class MyBatchlet extends AbstractBatchlet {
@Inject
@BatchProperty
int[] weekDays; // Array name is the same as batch property name.
@Inject
@BatchProperty (name = "weekDays") // Use the name attribute to locate the batch property.
Integer[] asIntegers; // Inject it as a specific array type.
@Inject
@BatchProperty (name = "weekDays")
String[] asStrings;
@Inject
@BatchProperty (name = "weekDays")
byte[] asBytes;
@Inject
@BatchProperty (name = "weekDays")
BigInteger[] asBigIntegers;
@Inject
@BatchProperty (name = "weekDays")
BigDecimal[] asBigDecimals;
@Inject
@BatchProperty (name = "weekDays")
List asList;
@Inject
@BatchProperty (name = "weekDays")
List<String> asListString;
@Inject
@BatchProperty (name = "weekDays")
Set asSet;
@Inject
@BatchProperty (name = "weekDays")
Set<String> asSetString;
}
Batchlet クラスにクラスプロパティーをインジェクトする
例: Job XML ファイル
<batchlet ref="myBatchlet">
<properties>
<property name="myClass" value="org.jberet.support.io.Person"/>
</properties>
</batchlet>
例: アーティファクトクラス
@Named
public class MyBatchlet extends AbstractBatchlet {
@Inject
@BatchProperty
private Class myClass;
}
プロパティーインジェクションに対してアノテーション付けされたフィールドにデフォルト値を割り当てる
ターゲットバッチプロパティーがジョブ XML ファイルで定義されていない場合は、アーティファクト Java クラスのフィールドにデフォルト値を割り当てることができます。ターゲットプロパティーが有効な値に解決される場合は、その値がそのフィールドにインジェクトされます。 解決されない場合は、値がインジェクトされず、デフォルトのフィールド値が使用されます。
例: アーティファクトクラス
/** Comment character. If commentChar batch property is not specified in job XML file, use the default value '#'. */ @Inject @BatchProperty private char commentChar = '#';