2011-10-26 2 views
0

私はSpring-Batchの初心者です。これを使用して、従来のライブラリを使用するジョブをバッチ処理したいとします。このライブラリには欠点があります。スプリングバッチを使用する場合のJVMのフォーク

  • はない、スレッドセーフであることが
  • (原因囲まれたシングルトンの静的インスタンスへの)行に複数のジョブを処理することはできません、ライブラリ内のいくつかのオブジェクトのインスタンス。

したがって、唯一の解決策は、ジョブごとにJVMをフォークすることです。

私の質問は、どうすればよいのですか?ドキュメントのソリューションのほとんどはスレッド指向です。

+0

どのように春のバッチ管理でジョブを実行しますか?コマンドライン? –

+0

@MichaelLange私は私のメインプログラムであるSpring Batch APIフォームを使用しています。 – Kartoch

答えて

2

「fork the JVM」 - あなたはどうしますか?新しいプロセスを全部起動しますか?しかし、それは実際にJVMを "フォーク"することはありません。つまり、 "子" JVMにコピーする必要がある状態情報はすべて手動で行う必要があります。 どのようにして各ジョブに異なるClassloaderを使用するのですか?

+0

はい、あなたは正しいです:私は、JVMがフォークのために "libcのような"ものではないことを知らなかった。クラスローダーは良い解決策に思えますが、私はガベージコレクタによって消去されない複数の静的な要素のために、PermGenSpaceエラーに直面することを恐れています... – Kartoch

+0

開発中に、アプリケーションを再デプロイするときにTomcatで遭遇したことでしたサーバーを再起動することなく何度も実行できます。そして、これらのJVMフラグ "CMSClassUnloadingEnabled"と "CMSPermGenSweepingEnabled"を見ました。しかし今度は、レガシーライブラリを何か他のものに置き換えることを考えるかもしれません。 –

+0

悲しいことに私たちはそれに直面しなければなりません:現時点でこのライブラリを置き換えることはできません – Kartoch

関連する問題