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