[Seasar-user:15126] =?iso-2022-jp?B?UmU6IFtTZWFzYXItdXNlcjoxNTEyNV0gUmU6W1MyQ2hybw==?= =?iso-2022-jp?B?bm9zXSAbJEJlYxsoQoAbJEJlYiEiZWM0ZSYhZWMhJiQxZWMwZSYsGyhC?= =?iso-2022-jp?B?GyRCZWIlYyEmGyhC?=

Tetsuya Anzawa [E-MAIL ADDRESS DELETED]
2008年 7月 23日 (水) 18:24:51 JST


安澤です。
いつもお世話になっております。

ご回答ありがとうございました。
文中にコメント致します。

----- 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など)によって動的にディレイタイムを設定できない、ということになりますか。

タスクのトリガ及び、トリガのプロパティを外部情報(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 メーリングリストの案内