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>
例: アーティファクトクラス
@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 = '#';