Google GuiceのJSR-352スタンドアロンバッチで
-
21-12-2019 - |
質問
Java SE 7とGuice 。
でjavax.batch 1.0を使用してバッチを作ろうとしています。Javaee 7の読み取りJSR-352に関するドキュメントGlassFish内で実行されるコードを明らかに設定し、私は外でそれを実行する方法について言及していないことがわかりませんでした。
今私の問題は、CDI を通じて自動的に注入されるべきJobContextインターフェースに関するものです。
のようなことを試みる@Provides
@Inject
JobContext providesJobContext(Provider<JobContext> provider) {
return provider.get()
}
.
は概念的に間違っており、StackOverflowerRor(ここでは私は:>)につながります。 それは本当に必要ですか?例では、ジョブプロパティに到達するように注意してください。私は彼らに到達することができます、多分、
jobOperator.getParameters(<executionID>)
.
?
ありがとうございました。
私は溶接を使用しなかった(私が理解するように、Java SE上にCDIを提供するだろう)ので、唯一の代替案はスプリングバッチになるでしょう。
解決
API説明
まず、「ジョブプロパティ」と「ジョブパラメータ」を明確にします。
「ジョブパラメータ」は、JobOperator#start(String,Properties)
とJobOperator#restart(long,Properties)
に渡されたプロパティです。
JobContext#getProperties()
を介してアクセス可能な「ジョブプロパティ」は、 / job / properties 要素の子です。
e.g。このジョブには、JobContext#getProperties()
<job>
<properties>
<property name="initialAmount" value="100" />
<property name="bonusAmount" value="#{jobParameters['bonusAmount']}?:100;" />
</properties>
</job>
.
すなわちジョブパラメータは、ジョブプロパティ定義のための1つの値の1つの可能な原因です。
現在の実行IDを取得するための最も自然な方法は、注入に問題がある非常に同じコンテキストからの最も自然な方法があるため、これはおそらくあなたを助けません。
あなたがJSR 352の参照実装(GlassFishに含まれる JBatch )を参照しているように聞こえます。
私たちがガス依存の注射によく考えられていないことは本当です。
溶接部付きガスメで、バッチランタイムがバッチ定義の射出点に移入できるように、実際にこのような手法を使用しています。
public class BatchProducerBean {
...
@Produces
@Dependent
public JobContext getJobContext() {
...
return JobContextImpl;
}
}
.
JBATCHとのガス統合についてもっと聞いてうれしいです。あなたはプロジェクトソースのホームでフォローアップすることができました(現実のウィキなし)
他のヒント
溶接はJSR-299の基準実装です。これはJavaEE 6でCDIをもたらします。 この基準実装はGlassFishに含まれているので、効果的に使用できるようにします。
Oracleからの例こちら:
@Named
public class SimpleItemReader
extends AbstractItemReader {
@Inject
private JobContext jobContext;
...
}
.
引用:
私は溶接
を使ったことがない
ここでは実装は問題にならないため、JSRの仕様を実装しています。