2015-10-13 19 views
6

Javaを使用してWebアプリケーションベースのETLも(ケトルエンジンを使用して)開発しています。Javaを使用してケトルジョブ/変換を実行しないでください

実行中のジョブを停止しようとしているときに、問題が発生しています。 CarteSingleton.javaを使用するのが正しいかどうかはわかりません。私はカスタムシングルマップを使用しています。 、私はマップに格納された正確なジョブオブジェクトをカスタムシングルトンマップでそのジョブオブジェクトを格納および取得しようとしている

job.start()が呼び出されると
Job job = new Job(null, jobMeta); 
job.setLogLevel(LogLevel.DETAILED); 
job.setGatheringMetrics(true); 
job.start(); 

以下のよう

私のコードです、ジョブのステータスがRUNNINGの間にstopAll()(以下のコードを参照)を呼び出して別のREST呼び出しを呼び出すと、停止します。 しかし、これは実行中のジョブを停止しません。ケトルエンジンはこれを知らされていません!ジョブの実行が続行されます。 .kjb/.ktrはSPOONを使用して作成していましたが、私は実行を停止/実行するためにSPOONを使用していません。

は、私が変更したすべてケトルAPIの設定は、任意のJavaを使用して実行中のジョブまたは変換を停止する場合は、APIおよびサンプルの例に啓発してもらえ

same job object 
    job.stopAll(); 

を使用できるようにするために、あります?

ここでの指針やヘルプは素晴らしいでしょう!再度、感謝します。

よろしく、 サンジーブ

答えて

5

あなたのアプローチが正しいように思えます。ただし、即時停止は保証されないことに注意してください。実行を続行してはならないことを示すフラグを設定するだけです。

Job.stopAll() sets the flagは、それがchecked before the execution startsですが、それが始まっている場合、それは

Trans.stopAll()は同様の振る舞い場でそれを止めることはありません。 It asks each step to stopとそのフラグis checked insideのステップ。

+0

ありがとうございました。しかし、それを保証するアプローチは何ですか? Pentahoはサンプルを提供していますか?自分のサイトにも投稿しましたが、まだ応答がありませんでした。 stackoverflowは開発者にとってははるかに優れています! –

+1

実際、保証はほとんどありません。 Javaでは、スレッドを手動で停止する_legal_方法はありません。 'Job'は' Thread'から派生し、変換のステップは通常別々のスレッドで実行されるので、それらを直ちに停止する方法はありません。 –

関連する問題