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