[Seasar-user:15125] Re: [S2Chronos] ダイナミックトリガ?

Junichi Kato [E-MAIL ADDRESS DELETED]
2008年 7月 23日 (水) 18:02:52 JST


安藤さん,
コミッタの加藤(j5ik2o)です.

お世話になっております.

CDelayTriggerとしては,
public void setDelay(long delay) {
	this.delay = System.currentTimeMillis() + delay;
}
で,現在時刻にディレイさせる秒数を足しdelayを作成し,

public boolean isStartTask() {
// snip
	return (System.currentTimeMillis() >= delay);
}
で,現在時刻がdelayを超えているかチェックしているだけになります.

タスククラスのgetTriggerは,スケジューラから定期的に呼び出されるのでそのたびにCDelayTrigger#setDelayを呼び出していると,いつまでたってもタスクが起動しないことになります.
そのような状況にはなっていないでしょうか?(CCronTriggerはsetExpressionで毎回設定されても問題は発生しません)
よろしくお願いします.


2008/07/23 17:11 Tetsuya Anzawa <[E-MAIL ADDRESS DELETED]>:
> 安澤です。
> いつもお世話になっております。
>
> タスクのトリガ及びトリガのプロパティを外部情報(DBなど)によって動的に切り替えたいと
> 考えています。
> 例えば、クーロントリガとディレイトリガを外部情報(DBなど)によって動的に切り替える場合、
> 以下のような手法でよいのでしょうか?
> ほかに正しいやり方がありましたらご教授願います。
>
> ちなみに、以下のサンプルではクーロントリガはそれなりに動きましたが、
> ディレイトリガはタスク起動されませんでした。
> サンプルの動作詳細は、以下の手法がありだった場合に別途質問させて頂きます。
>
>
> @Task
> public class TestTask {
>
>   private static Logger log = Logger.getLogger(TestTask.class);
>
>   /**
>    * ダイナミックトリガー
>    */
>   private TaskTrigger trigger;
>   /**
>    * クーロントリガー
>    */
>   private CCronTrigger cron_trigger = new CCronTrigger();
>   /**
>    * ディレイトリガー
>    */
>   private CDelayTrigger delay_trigger = new CDelayTrigger();
>   /**
>    * ノンディレイトリガー
>    */
>   private CNonDelayTrigger nondelay_trigger = new CNonDelayTrigger();
>
>
>   /**
>    * バッチ制御テーブルの共通DAO
>    */
>   public BatchControlDao batchControlDao;
>
>
>   /**
>    * 初期化処理
>    */
>   @NextTask("taskA")
>   public void initialize() {
>       log.info("[initialize()]" + this.getClass().getSimpleName());
>   }
>
>   /**
>    * タスク処理
>    */
>   public void doTaskA() {
>       log.info("[doTaskA()]" + this.getClass().getSimpleName());
>   }
>
>   /**
>    * 終了処理
>    */
>   public void destroy() {
>       log.info("[destroy()]" + this.getClass().getSimpleName());
>   }
>
>
>   /**
>    * ダイナミックトリガー
>    * @return
>    */
>   public TaskTrigger getTrigger() {
>
>       //DBより本タスクのバッチ制御データを取得
>       BatchControlDto bcDto = this.batchControlDao.selectById("hmma00790");
>
>       //ダイナミックトリガーの設定
>       if(null != bcDto.getExpression()){
>         //dbにexpressionが設定されていたら
>         this.cron_trigger.setExpression(bcDto.getExpression());
> //プロパティを動的にセット
>         this.trigger = this.cron_trigger;
>       }else if(null != bcDto.getDelay()){
>         //dbにdelayが設定されていたら
>         this.delay_trigger.setDelay(bcDto.getDelay); //プロパティを動的にセット
>         this.trigger = this.delay_trigger;
>       }else{
>         this.trigger = this.nondelay_trigger;
>       }
>
>   return this.trigger;
>  }
> }
>
> 以上、宜しくお願い致します。
>
> _______________________________________________
> 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/
 */


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