2015-10-13 17 views
6

Ich entwickle auch eine Web-App-basierte ETL (mit Kettle-Engine), mit Java.Stop Kettle Job/Transformation mit Java

Ich habe Probleme, während ich versuche, einen laufenden Job zu stoppen. Ich bin mir nicht sicher, ob die CarteSingleton.java korrekt ist. Ich verwende eine benutzerdefinierte Singleton Map.

Mein Code ist wie unten

Job job = new Job(null, jobMeta); 
job.setLogLevel(LogLevel.DETAILED); 
job.setGatheringMetrics(true); 
job.start(); 

Sobald job.start() aufgerufen wird, ich versuche, in einer benutzerdefinierten Singleton Karte, dass Job-Objekt zu speichern und das genaue Job-Objekt abzurufen, die in der Karte gespeichert wurden und beim Aufruf von stopAll() (siehe Code unten) mit einem anderen REST-Aufruf, während der Status des Jobs RUNNING lautet, um ihn zu stoppen. Aber das hält den laufenden Job nicht auf. Kettle Engine wird davon nicht benachrichtigt! Die Jobausführung wird fortgesetzt. Das .kjb/.ktr erstellt mit SPOON, obwohl ich SPOON nicht zum Ausführen/Stoppen der Ausführung verwende.

Gibt es ein Kettle API Config Ich habe, ändern zu können, auf dem API und Beispiel Beispiel verwenden

same job object 
    job.stopAll(); 

Könnten Sie bitte aufklären, wenn überhaupt einen laufenden JOB oder Transformation zu stoppen Java unter Verwendung von ?

Alle Hinweise oder Hilfe hier wäre super! Danke noch einmal.

Grüße, Sanjeev

Antwort

5

Ihr Ansatz scheint korrekt zu sein. Beachten Sie jedoch, dass der sofortige Stopp nicht garantiert werden kann - er setzt einfach ein Flag, das angibt, dass die Ausführung nicht fortgesetzt werden soll.

Job.stopAll() sets the flag und es ist checked before the execution starts, aber wenn es sie es begonnen hat, wird nicht an Ort und Stelle zu stoppen

Trans.stopAll() ähnlich verhält. It asks each step to stop und diese Flagge is checked inside Schritte.

+0

Danke. Aber, was ist der Ansatz, um es zu garantieren? Bietet Pentaho eine Probe? Ich habe auch auf ihrer Seite gepostet - aber noch keine Antwort gefunden. stackoverflow ist viel entwicklerfreundlicher! –

+1

Eigentlich sind mir irgendwelche Garantien kaum möglich. In Java gibt es keine _legal_ Möglichkeit, Threads manuell zu stoppen. Da 'Job' von' Thread' abgeleitet ist und Transformationen'Schritte normalerweise in separaten Threads ausgeführt werden, gibt es keine Möglichkeit, sie sofort zu stoppen. –