問題タブ [jsr352]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jsr352 - JSR 352 :分割されたステップの各パーティションのライターからデータを収集する方法は?
したがって、データベースに書き込むステップに 2 つのパーティションがあります。各パーティションに書き込まれた行数を記録し、合計を取得してログに出力したいと考えています。
Writer で変数を使用し、static
Step Context/Job Context を使用してそれをafterStep()
Step Listener に取り込むことを考えていました。しかし、私がそれを試したとき、私は得null
ました。close()
Reader でこれらの値を取得できます。
これは正しい方法ですか?または、Partition Collector/Reducer/Analyzer を使用する必要がありますか?
Websphere Liberty で Java バッチを使用しています。そして、私はEclipseで開発しています。
java - JSR 352:ステップコンテキスト/ジョブコンテキストを使用して複数の変数を渡しますか?
Step Listener と Writer の間で複数の変数を渡す必要があります。StepCtx.setTransientUserData() を使用すると、1 つの変数しか渡すことができません。
複数の変数を渡すには、マップ/クラスを作成して渡す必要がありますか、それともより良い方法がありますか?
java - JSR352: アノテーション @Named が Java SE で機能しない
JBoss 実装JBeretを使用して、Java SE でJSR352 (Java プラットフォーム用のバッチ アプリケーション)のデモを作成しています。そして、このジョブの統合テストを実行したいと思います。このバッチ ジョブには、次の 3 つのコンポーネントがあります。
io.mincong.batch.MyItemReader
io.mincong.batch.MyItemProcessor
io.mincong.batch.MyItemWriter
それらはすべて注釈付きの名前付き Bean です@Named
。
この注釈のおかげio.mincong.batch
で、ジョブ ファイルにパッケージ名のプレフィックスを入力しなくても、ジョブ クラスを使用できますmyJob.xml
。これは、WildFly 10 などの Java EE コンテナーでは正常に機能します。ただし、Java SE では機能しなくなりました。パッケージ プレフィックスを追加する必要があります。ここでジョブ xml myJob.xml
:
また、別紙に 2 つの mvn install ログがあり、パッケージ プレフィックスありとなしがあります。つまり、使用と不使用@Named
です。このエラーが発生する理由 いくつかの依存関係がありませんか? 何か案が ?
以下の pom.xml も見ることができます。追加情報:
- JBERET: JBERET のセットアップ
- JBERET: 最小限のアプリケーション依存性
- JBERET: Java SE バッチ アプリケーションの追加の依存関係
- JBERET: GitHub の jberet/jsr352/test-apps
@Named を使用すると Maven のインストールが失敗する
@Named が使用されていない場合の Maven インストールの成功
pom.xml
file-io - JSR 352 : Java バッチ プログラムから MVS データセットに書き込むにはどうすればよいですか?
メインフレームの非 VSAM データセットに書き込む必要があります。それを行うには ZFile ライブラリを使用する必要があることを知っています。その方法はこちらで見つけました。
zOS 上の WebSphere Liberty で Java バッチ ジョブを実行しています。データセットを指定するにはどうすればよいですか? DataSet にこのような名前を直接付けることはできますか?
dsnFile = new ZFile("X.Y.Z", "wb,type=record,noseek");
Java のファイル ライターを使用してサーバー自体のテキスト ファイルに書き込むことはできますが、mvs データセットにアクセスする方法がわかりません。
私は zOS とメインフレームの世界に比較的慣れていません。
spring-batch - ItemReader の中間結果セット
Spring Batch メカニズムはかなり新しいものです。なんとか起動して実行することはできましたが、私のビジネス ロジックは Spring Batch ジョブとして適合していないようです。説明させてください:
ジョブは、次のようにユーザーに電子メールを送信する責任があります。
- 特定の基準を満たすニュース項目のセットを取得します (
Set<News>
) - ニュース項目のいずれかをまだ受け取っていないユーザーのセットを取得します (
Set<User>
) - ユーザーごとに、ユーザーが受信していないニュースごとに電子メールを送信します。
- ニュースが受信されたことをユーザーに「タグ付け」します。
エンティティ Bean の定義は次のとおりです。
間に 1 対多の関係はないため、未受信のニュースを取得するには、次のように取得できます。
私のユーザーベースは現在 28,000 人であり、ステップ 1 と 2 を として、ItemReader
ステップ 3 と 4 を として設定しているため、Spring Batch を使用することにしましたItemWriter
。
問題は、最初の 2 つのステップにあります。JpaPagingItemReader<T>
リーダーとして使用することにしましたが、残念ながら、結果セットを別のものにマッピングする変更なしでクエリを指定することしかできないため、非常に厳格です。この例では、最初に一連のニュースをフェッチし、次にデータベースにクエリを実行して、受信したニュースに基づいて一連のユーザーをフェッチする必要があります ( Tuple<User, Set<News>>
)。
リーダーがユーザーのタプルと未受信のニュースのセットを返せるようにするにはどうすればよいですか? 私は何が欠けていますか?
とても有難い。さらに情報が必要な場合はお知らせください。
java - JSR 352: 複数の JVM で同じジョブの同じステップの異なるパーティションを実行することは可能ですか?
もしそうなら、どのように?
WebSphere Liberty で IBM の JSR 352 実装を使用しています。
multithreading - JSR 352 で CPU バランスを確保するために適切なパーティション計画を定義する方法は?
JSR 352 - Java プラットフォームのバッチ アプリケーションは、パーティションを使用した並列処理機能を提供します。バッチ ランタイムは、進行を加速するために、異なるパーティションでステップを実行できます。JSR 352 では定義も導入されていthreads
ます。次のように、使用するスレッドの数を定義できます。
それから私は混乱します: 各スレッドが占有され、CPU バランスが確保されるように、適切なパーティション計画をどのように与えるのですか?
たとえば、To do テーブル A、B、C があり、それらの行はそれぞれ 10 億、100 万、1,000 です。このステップの目的は、これらのエンティティをドキュメントに処理することです。1 つのエンティティが 1 つのドキュメントに移動します。ドキュメント作成の順序は重要ではありません。これらのテーブルのエンティティの CPU 時間は、それぞれ 1 秒、2 秒、5 秒です。スレッド数は 4 です。
テーブル タイプごとに 1 つずつ、3 つのパーティションがある場合、次の1 * 10^9
理由により、手順が完了するまでに数秒かかります。
- パーティション Aは
1 * 10^9 * 1s = 1 * 10^9s
、スレッド 2 で実行されます - パーティション Bは
1 * 10^6 * 2s = 2 * 10^6s
、スレッド 3 で実行されます - パーティション Cは
1 * 10^3 * 5s = 5 * 10^3s
、スレッド 4 で実行されます
ただし、スレッド 2 が占有されている間、スレッド 3 は から解放され2 * 10^6s
、スレッド 4 は から解放され5 * 10^3s
ます。したがって、明らかに、これは適切な分割計画ではありません。
私の質問は次のとおりです。
- 上記の例で完成させるより良いパーティション計画はありますか?
- 私は考えることができます:パーティションは消費するキューであり、スレッドはこのキューを消費しますか?
- 一般的に、いくつのスレッドを使用できますか / 使用する必要がありますか? それはCPUコアの数と同じですか?
- 一般に、各スレッドが占有され、CPU バランスが確保されるように、適切なパーティション プランを設定するにはどうすればよいでしょうか。