小椋さん、<br>加藤です。<br><br>お世話になります。<br><br><div class="gmail_quote">2008/10/30 11:41 Satoru Ogura <span dir="ltr">&lt;<a href="mailto:ogura@sanotec.co.jp" target="_blank">ogura@sanotec.co.jp</a>&gt;</span>:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

お世話になっております。<br>
小椋と申します。<br>
<br>
現在、CronTriggerを5分おきに実行しております。<br>
システムのメンテナンス等で計画停止する場合に確実にタスクが<br>
実行されていない状態で停止したいと思っております。<br>
<br>
setEndTask(true)で次の実行を行わないようにしようとしましたが、<br>
CCronTriggerにはsetEndTaskが実装されていないため、停止できません。<br>
setEndTaskをオーバーライドして実装しても問題ないのでしょうか?<br>
どのような方法が推奨される方法でしょうか?&nbsp;</blockquote><div><br><br>endTaskプロパティは、doから始まるタスクメソッドが複数あり、そのタスクを遷移する間に実行中の当該タスクメソッドの終了を待ってから終了する場合に使います。つまり、実行中のタスクメソッドは実行し、後続のタスクメソッドは実行されません。<br><br>また、shudownTaskプロパティをtrueした場合は、タスクメソッドのスレッドにInterruptedExceptionを発生させます。タスクメソッドでInterruptedExceptionを適切に処理していれば、即座にタスクを終了できます。スケジューリングの対象からも外れますので再度実行されることはありません。doExecuteひとつののみでしたら、endTaskは意味をなさないでので、shutdownTaskのほうがよいと思います。<br>
ちなみに、Scheulder#shutdownメソッドは登録されているすべてのタスクをシャットダウンします。<br><br>割り込みによるタスクの中断を採用できない場合は、startTaskプロパティをオーバーライドしてfalseを返すようにすればタスクメソッドは実行されません。その上で、シャットダウンを実行すればよいと思います。<br><br>よろしくお願いします。<br><br><br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<br>
以下、テストで使用したソースです。<br>
タスククラス<br>
@Task<br>
public class TestTask {<br>
<br>
 &nbsp; &nbsp;private TriggerChain trigger = new TriggerChain();<br>
<br>
 &nbsp; &nbsp;public TaskTrigger getTrigger() {<br>
 &nbsp; &nbsp; &nbsp; &nbsp;return trigger;<br>
 &nbsp; &nbsp;}<br>
<br>
 &nbsp; &nbsp;// 初期化<br>
 &nbsp; &nbsp;public void initialize() {<br>
 &nbsp; &nbsp; &nbsp; &nbsp;CCronTrigger cron = new CCronTrigger();<br>
 &nbsp; &nbsp; &nbsp; &nbsp;cron.setExpression(&quot;0 */1 * * * ?&quot;);<br>
 &nbsp; &nbsp; &nbsp; &nbsp;trigger.addTrigger(cron);<br>
 &nbsp; &nbsp;}<br>
<br>
 &nbsp; &nbsp;// タスク処理<br>
 &nbsp; &nbsp;public void doExecute() throws Exception {<br>
 &nbsp; &nbsp;}<br>
}<br>
<br>
タスクを停止しようとしているクラス<br>
public class SchedulerServiceImpl implements SchedulerService {<br>
<br>
 &nbsp; &nbsp;public TestTask testTask;<br>
<br>
 &nbsp; &nbsp;public void end() throws Exception {<br>
 &nbsp; &nbsp; &nbsp; &nbsp;testTask.getTrigger().setEndTask(true);<br>
 &nbsp; &nbsp;}<br>
}<br>
<br>
以上、よろしくお願い致します。<br>
<br>
<br>
_______________________________________________<br>
Seasar-user mailing list<br>
<a href="mailto:Seasar-user@ml.seasar.org" target="_blank">Seasar-user@ml.seasar.org</a><br>
<a href="https://ml.seasar.org/mailman/listinfo/seasar-user" target="_blank">https://ml.seasar.org/mailman/listinfo/seasar-user</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>/**<br> * name &nbsp;: Junichi Kato<br> * email : <a href="mailto:j5ik2o@gmail.com" target="_blank">j5ik2o@gmail.com</a><br> *<br> * blog &nbsp;: <a href="http://d.hatena.ne.jp/j5ik2o/" target="_blank">http://d.hatena.ne.jp/j5ik2o/</a><br>

 *<br> * commiting projects :<br> * <a href="http://jiemamy.org/" target="_blank">http://jiemamy.org/</a><br> * <a href="http://s2chronos.sandbox.seasar.org/" target="_blank">http://s2chronos.sandbox.seasar.org/</a><br> * <a href="http://s2config.sandbox.seasar.org/" target="_blank">http://s2config.sandbox.seasar.org/</a><br>

 */<br>