[Seasar-user:16186] Re: 【S2Chronos】CronTriggerを安全に停止する方法について

Satoru Ogura [E-MAIL ADDRESS DELETED]
2008年 10月 30日 (木) 14:35:27 JST


お世話になっております。
小椋と申します。

加藤さん
さっそくの回答、ありがとうございます。

CCronTriggerを継承してstartTaskをオーバーライドする方向でやります。

現在、Linuxのcrontabで動かしているのをS2Chronosで動作するように移行中です。
大変助かっております。

ありがごうございました。

  -----Original Message-----
  From: [E-MAIL ADDRESS DELETED] [mailto:[E-MAIL ADDRESS DELETED]]On Behalf Of Junichi Kato
  Sent: Thursday, October 30, 2008 2:08 PM
  To: [E-MAIL ADDRESS DELETED]
  Subject: [Seasar-user:16185] Re:【S2Chronos】CronTriggerを安全に停止する方法について


  小椋さん、
  加藤です。

  お世話になります。


  2008/10/30 11:41 Satoru Ogura <[E-MAIL ADDRESS DELETED]>:

    お世話になっております。
    小椋と申します。

    現在、CronTriggerを5分おきに実行しております。
    システムのメンテナンス等で計画停止する場合に確実にタスクが
    実行されていない状態で停止したいと思っております。

    setEndTask(true)で次の実行を行わないようにしようとしましたが、
    CCronTriggerにはsetEndTaskが実装されていないため、停止できません。
    setEndTaskをオーバーライドして実装しても問題ないのでしょうか?
    どのような方法が推奨される方法でしょうか? 


  endTaskプロパティは、doから始まるタスクメソッドが複数あり、そのタスクを遷移する間に実行中の当該タスクメソッドの終了を待ってから終了する場合に使います。つまり、実行中のタスクメソッドは実行し、後続のタスクメソッドは実行されません。

  また、shudownTaskプロパティをtrueした場合は、タスクメソッドのスレッドにInterruptedExceptionを発生させます。タスクメソッドでInterruptedExceptionを適切に処理していれば、即座にタスクを終了できます。スケジューリングの対象からも外れますので再度実行されることはありません。doExecuteひとつののみでしたら、endTaskは意味をなさないでので、shutdownTaskのほうがよいと思います。
  ちなみに、Scheulder#shutdownメソッドは登録されているすべてのタスクをシャットダウンします。

  割り込みによるタスクの中断を採用できない場合は、startTaskプロパティをオーバーライドしてfalseを返すようにすればタスクメソッドは実行されません。その上で、シャットダウンを実行すればよいと思います。

  よろしくお願いします。


   


    以下、テストで使用したソースです。
    タスククラス
    @Task
    public class TestTask {

       private TriggerChain trigger = new TriggerChain();

       public TaskTrigger getTrigger() {
           return trigger;
       }

       // 初期化
       public void initialize() {
           CCronTrigger cron = new CCronTrigger();
           cron.setExpression("0 */1 * * * ?");
           trigger.addTrigger(cron);
       }

       // タスク処理
       public void doExecute() throws Exception {
       }
    }

    タスクを停止しようとしているクラス
    public class SchedulerServiceImpl implements SchedulerService {

       public TestTask testTask;

       public void end() throws Exception {
           testTask.getTrigger().setEndTask(true);
       }
    }

    以上、よろしくお願い致します。


    _______________________________________________
    Seasar-user mailing list
    [E-MAIL ADDRESS DELETED]
    https://ml.seasar.org/mailman/listinfo/seasar-user




  -- 
  /**
  * name  : Junichi Kato
  * email : [E-MAIL ADDRESS DELETED]
  *
  * blog  : http://d.hatena.ne.jp/j5ik2o/
  *
  * commiting projects :
  * http://jiemamy.org/
  * http://s2chronos.sandbox.seasar.org/
  * http://s2config.sandbox.seasar.org/
  */
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20081030/62492542/attachment-0001.html>


Seasar-user メーリングリストの案内