2015-10-13 1 views
6

Я также разрабатываю ETL, основанный на веб-приложении (с движком Kettle), используя Java.Остановить работу Чайник Работа/преобразование с использованием Java

У меня проблемы, при попытке остановить работу Job. Я не уверен, правильно ли используется CarteSingleton.java. Я использую пользовательскую карту одноэлементной.

Мой код ниже

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

После job.start() вызывается, я пытаюсь сохранить этот объект задания на карте пользовательских одноплодной и получить точный объект работы, который был сохранен на карте , и при вызове stopAll() (см. код ниже) с другим вызовом REST, в то время как статус Job является RUNNING, чтобы остановить его. Но это не останавливает работу. Двигатель Kettle не получает уведомление об этом! Выполнение задания продолжается. Файл .kjb/.ktr создавал с помощью SPOON, хотя я не использую SPOON для запуска/остановки выполнения.

Есть ли API конфигурации чайник Я изменить, чтобы иметь возможность использовать

same job object 
    job.stopAll(); 

Не могли бы вы просветить на API и пример образца, если остановить выполняемое задание или преобразование с помощью Java ?

Любые указатели или помощь здесь были бы замечательными! Еще раз спасибо.

С уважением, Санджив

ответ

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 »и« transformations », как правило, выполняется в отдельных потоках, и их также невозможно остановить. –

 Смежные вопросы

  • Нет связанных вопросов^_^