[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 メーリングリストの案内