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

Junichi Kato [E-MAIL ADDRESS DELETED]
2008年 7月 23日 (水) 19:06:57 JST


2008/07/23 18:24 Tetsuya Anzawa <[E-MAIL ADDRESS DELETED]>:
> 安澤です。
> いつもお世話になっております。
>
> ご回答ありがとうございました。
> 文中にコメント致します。
>
> ----- Original Message ----- From: "Junichi Kato" <[E-MAIL ADDRESS DELETED]>
> To: <[E-MAIL ADDRESS DELETED]>
> Sent: Wednesday, July 23, 2008 6:02 PM
> Subject: [Seasar-user:15125] Re:[S2Chronos] 繝�繧、繝翫Α繝・け繝医Μ繧ャ・
>
>
>> 安藤さん,
>> コミッタの加藤(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で毎回設定されても問題は発生しません)
>> よろしくお願いします.
>>
>
> 了解です。
> 現時点では、CDelayTriggerは外部情報(DBなど)によって動的にディレイタイムを設定できない、ということになりますか。

たとえば,

CDelayTrigger#setDelayを,

if ( delayTrigger.getDelay() != bcDto.getDelay() ){
     delayTrigger.setDelay(bcDto.getDelay() );
}

とするのはどうでしょうか?

無条件に毎回setDelayされるのが問題ですので,それを回避できればと思います.
よろしくお願いいたします.

>
> タスクのトリガ及び、トリガのプロパティを外部情報(DBなど)によって動的に切り替えるには、
> 私のサンプルの方法で基本的に問題はないが、期待どおりに動作するかどうかはトリガの実装による、
> といったところでしょうか。
>
> また宜しくお願い致します。
>
>>
>> 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 mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
> _______________________________________________
> 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 メーリングリストの案内