- はじめに
- JobOperator の CDI インジェクションサポート
- @BatchProperty のメソッドインジェクションサポート
- @BatchProperty の プリミティブ・ラッパー型への自動変換
- job listeners 要素のプロパティ定義がドキュメント化された
- JPMS 用 module-info.java の追加
はじめに
Jakarta EE 10 で Jakarta Batch は 2.0 から 2.1 へバージョンアップします。
Spring Batch の流れから策定された Jakarta Batch は、特定のDI技術について、中立的な立場で仕様が定義されていました。
javax.inject.Inject
による依存性注入は定義されているものの、その実装については規定せず、すなわち CDI でも、他の依存性注入でも、それは実装次第という立場です。
しかし、CDI をベースとして改定されてきた Jakarta EE に合わせる形で、依存性注入には CDI を規定することで、プラットフォームとしての一貫性と、より良い統合を可能とするように方針が転換されたのが、このバージョンになります。
この方針転換で、実装レベルでは大きく影響するものがあるかも知れませんが、API としての変更はありません。
よって、Jakarta Batch 2.1 仕様の変更としては、一部のJavaDoc と仕様書(並びにTCK)の変更に限られます。
CDI による依存性注入の変更に合わせて、以下に示す変更が入っています。
JobOperator の CDI インジェクションサポート
ランタイムから取得する他、
JobOperator jobOper = BatchRuntime.getJobOperator();
CDI にてインスタンスを取得できるようになります。
@Inject
JobOperator jobOper;
アプリケーション側で、CDI エクステンションなどにより JobOperator CDI Bean を提供している場合は、そちらが優先されます。 つまり、アプリケーション側で JobOperator CDI Bean が提供されない場合に限り、コンテナが JobOperator CDI Bean を提供することになります。
@BatchProperty のメソッドインジェクションサポート
フィールドインジェクションに加え、バッチプロパティのメソッド/コンストラクタ・インジェクションが可能になりました。 このインジェクションも CDI をベースに実現されることになります。
@Inject public void setMethod1(@BatchProperty(name="m1") String m1) { // ... }
メソッド/コンストラクタ・インジェクションの場合には、(フィールドインジェクションと異なり)プロパティ名を明示する必要が有る点に注意してください。
プロパティ値は、従来通り、JSL(Job Specification Language) に定義されるものです。
@BatchProperty の プリミティブ・ラッパー型への自動変換
旧来は、バッチプロパティの値は、String 型であり、型変換を自身で行う必要がありました。
Jakarta Batch 2.1 からは、プリミティブ・ラッパー型への自動変換が行われるようになりました。
対象の型は Boolean
、Double
、Float
、Integer
、Long
、Short
で、 valueOf()
を使った型変換が自動で行われます。
以下のようにプリミティブ・ラッパ型で受けることができます。
@Inject @BatchProperty private Integer propertyName;
job listeners 要素のプロパティ定義がドキュメント化された
仕様書上で記載されていなかった job listeners 要素のプロパティについて明記されました。
プロパティは以下のように定義します。
<listener ref="{name}"> <properties> <property name="Property1" value="Property1-Value"/> </properties> </listener>
JPMS 用 module-info.java の追加
JPMS (Java Platform Module System) 用の module-info.java
は以下の定義で追加されています。
module jakarta.batch { requires static jakarta.cdi; requires transitive static jakarta.inject; exports jakarta.batch.api; exports jakarta.batch.api.chunk; exports jakarta.batch.api.chunk.listener; exports jakarta.batch.api.listener; exports jakarta.batch.api.partition; exports jakarta.batch.operations; exports jakarta.batch.runtime; exports jakarta.batch.runtime.context; uses jakarta.batch.operations.JobOperator; }