0

Java SE 7 および Guice で javax.batch 1.0 を使用してバッチを作成しようとしています。

JSR-352 に関する JavaEE 7 ドキュメントを読むと、Glassfish 内で実行されるコードが明らかに設定されており、外部で実行する方法については言及されていません。

私の問題は、CDIを介して自動的に注入される JobContext インターフェースに関するものです:Guiceでそれを作成する方法は? 次のようなものを試してください:

@Provides
@Inject
JobContext providesJobContext(Provider<JobContext> provider) {
    return provider.get()
}

は概念的に間違っており、StackOverflowError につながります (だからここにいます :>)。本当に必要ですか?例では、それを注入して Job プロパティに到達します。たぶん、私は彼らに連絡できますか

jobOperator.getParameters(<executionID>)

?

ありがとうございました。

私は Weld を使用したことがないので (私が理解しているように、Java SE で CDI を提供します)、唯一の代替手段は Spring Batch です。

4

2 に答える 2

2

APIの説明

まず、「ジョブ プロパティ」と「ジョブ パラメータ」を明確にします。

「ジョブ パラメータ」は、および に 渡されるプロパティです。 JobOperator#start(String,Properties)JobOperator#restart(long,Properties)

経由でアクセスできる「ジョブ プロパティ」JobContext#getProperties()は、/job/properties要素の子です。

たとえば、このジョブには、次のオブジェクトで返される 2 つのプロパティがあります。JobContext#getProperties()

<job>
   <properties>
    <property name="initialAmount" value="100" />
    <property name="bonusAmount" value="#{jobParameters['bonusAmount']}?:100;" />
   </properties>
</job>

したがって、ジョブ パラメータは、ジョブ プロパティ定義の値の可能なソースの 1 つにすぎません。

パラメーターにアクセスする限りJobOperator.getParameters(long executionId)、これはおそらくあまり役​​に立ちません。現在の実行 ID を取得する最も自然な方法は、注入に問題があるのとまったく同じコンテキストからであるからです。

SE with Guice

JSR 352 参照実装 ( Glassfishに含まれる jbatch ) を参照しているようです。

確かに、私たちは Guice 依存性注入を使用した SE についてあまり考えていませんでした。私は、それが言及するのに役立つかどうかを知るのに十分な専門家ではありません。

Weld では、Glassfish で実際にこのような手法を使用して、バッチ ランタイムがバッチで定義された注入ポイントを入力できるようにします。

public class BatchProducerBean {
...
@Produces
@Dependent
public JobContext getJobContext() {
    ...
        return JobContextImpl;
    }
}

Guice と jbatch の統合について詳しく教えていただければ幸いです。GitHubのプロジェクト ソース (実際の Wiki はまだありません) のホームでフォローアップできます。

于 2014-12-17T17:43:35.060 に答える