001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.hayabusa.taglib;
017
018 import org.opengion.hayabusa.common.HybsSystem;
019 import org.opengion.hayabusa.common.SystemManager;
020 import org.opengion.hayabusa.db.DBColumn;
021 import org.opengion.hayabusa.db.DBTableModel;
022 import org.opengion.hayabusa.db.DBTableModelUtil;
023 import org.opengion.hayabusa.html.ViewForm;
024 import org.opengion.hayabusa.html.ViewFormFactory;
025 import org.opengion.hayabusa.resource.ResourceManager;
026
027 import static org.opengion.fukurou.util.StringUtil.nval ;
028
029 import org.opengion.fukurou.util.HybsTimerTask;
030 import org.opengion.fukurou.util.HybsTimerTaskManager;
031
032 import java.util.Timer;
033 import java.util.Map;
034 import java.util.HashMap;
035 import java.util.Iterator;
036
037 /**
038 * アプリケーション共有ã?タイマã?機è?を用ã�?�¦、繰り返しスケジュールを設定するタグですã?
039 *
040 * タイマã?スケジュールは、帳票ãƒ??モンã‚??再編成å?ç�??定期çš?ƒ�ãƒ?ƒ�処ç�?�ªど、エンジン上ã?
041 * スレãƒ?ƒ‰で動作するスケジュールを登録しますã?
042 * スケジュールすべきクラスは、HybsTimerTask を拡張(extends)しておくå¿?¦�がありますã?
043 *
044 * @og.formSample
045 * ●形式ï¼?lt;og:schedule timerTask="?¥?¥?¥" name="?¥?¥?¥" command="[SET|VIEW|REMOVE|CANCEL]" ?¥?¥?¥ />
046 * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
047 *
048 * ●Tag定義??
049 * <og:schedule
050 * command 【TAG】コマンãƒ?SET,VIEW,REMOVE,CANCEL)をセãƒ?ƒˆしまã�?初期値:SET)
051 * timerTask ○ã?TAG】å?ç�?‚’実行するクラスå�?HybsTimerTask のサブクラス)を指定しまã�?å¿??)ã€?
052 * name ○ã?TAG】名称(ユニã?クキー)を設定しまã�?å¿??)ã€?
053 * comment 【TAG】タイマã?タスクの説明を設定しまã�?
054 * singleton 【TAG】Name属æ?が同ä¸??タスクを2重登録出来なã�?‚ˆã�?true/false]にしまã�?初期値:true[出来ない])
055 * delay 【TAG】ミリ秒単位ã?é�?»¶時間を設定しまã�?初期値:0)
056 * period 【TAG】ミリ秒単位ã?繰り返し間隔を設定しまã�?初期値:60000)
057 * fixedDelay 【TAG】固定遅延実行をæŒ?®šするかどã�?�‹[true:固定遅延実è¡?false:固定é?度実行]を設定しまã�?初期値:true)
058 * keys 【TAG】HybsTimerTask に渡す為のキーæƒ??、CSV形式でè¤?•°æŒ?®šしまã�?
059 * vals 【TAG】HybsTimerTask に渡す為の値をã?CSV形式でè¤?•°æŒ?®šしまã�?
060 * startTime 【TAGã€?4時間制(YYMMDD)の開始時刻を設定しまã�?初期値:000000)
061 * stopTime 【TAGã€?4時間制(YYMMDD)の終äº?™‚刻を設定しまã�?初期値:000000)
062 * scope 【TAG】キャãƒ?‚·ュする場合ã?スコーãƒ?local,request,page,session,applicaton)を指定しまã�?初期値:local)
063 * tableId 【TAGã€?通常は使ã�?�¾せん)結果をDBTableModelに書き込んで、sessionに登録するときã?キーを指定しまã�?
064 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
065 * > ... Body ...
066 * </og:schedule>
067 *
068 * ●使用ä¾?
069 * 帳票ãƒ??モンスケジュール登録
070 * period はã€?½�s単位でæŒ?®šするå¿?¦�があるためã€?¼‘000å?してã�?�¾すã?
071 * <og:schedule
072 * command = "{@CMD}"
073 * scope = "request"
074 * timerTask = "org.opengion.hayabusa.report.ReportDaemon"
075 * name = "{@NAME}"
076 * comment = "Start-up By {@USER.INFO}"
077 * singleton = "true"
078 * delay = "0"
079 * period = "{@PERIOD}000"
080 * fixedDelay = "true"
081 * keys = "SYSTEM_ID,DMN_GRP"
082 * vals = "{@SYSTEM_ID},{@DMN_GRP}"
083 * />
084 *
085 * @og.group そã?他部å“?
086 *
087 * @version 4.0
088 * @author Kazuhiko Hasegawa
089 * @since JDK5.0,
090 */
091 public class ScheduleTag extends CommonTagSupport {
092 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
093 private static final String VERSION = "4.0.0.0 (2007/10/18)" ;
094
095 private static final long serialVersionUID = 400020071018L ;
096
097 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? セãƒ?ƒˆ {@value} */
098 public static final String CMD_SET = "SET";
099 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? ビュー {@value} */
100 public static final String CMD_VIEW = "VIEW";
101 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? リãƒ??ãƒ?{@value} */
102 public static final String CMD_REMOVE = "REMOVE";
103 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? キャンセル {@value} */
104 public static final String CMD_CANCEL = "CANCEL";
105
106 /** command 引数に渡す事ã?出来ã‚?コマンãƒ?リスãƒ? */
107 private static final String[] COMMAND_LIST = new String[] {
108 CMD_SET , CMD_VIEW , CMD_REMOVE , CMD_CANCEL };
109
110 // 3.5.2.0 (2003/10/20) 結果ã‚?DBTableModel として、scope 属æ?に登録するã€?
111 private String tableId = HybsSystem.TBL_MDL_KEY;
112
113 private String command = CMD_SET;
114 private String timerTask = null; // 処ç�?‚’実行すã‚?HybsTimerTask のクラス名をæŒ?®šしますã?
115 private String name = null; // タイマã?タスクの名称(ユニã?クキー)
116 private String comment = null; // タイマã?タスクの説æ˜?
117 private long delay = 0l; // タスクが実行される前ã?ミリ秒単位ã?é�?»¶(初期値:0)
118 private long period = 60000l; // 連続するタスク実行ã?ミリ秒単位ã?時間(初期値:60000 mS)
119 private boolean fixedDelay = true; // 固定遅延実è¡?true)/固定é?度実è¡?false) (初期値:true)
120 private int uniqKey = -1; // ありえなã�??をå?期設定しておくã€?
121 private boolean singleton = true; // Name属æ?が同ä¸??タスクを2重登録出来なã�?‚ˆã�?�«する(初期値:true)
122
123 private static final long FIXED_RATE_MIN_TIME = 1000; // 固定é?度実行時のæœ?°�繰り返し時間
124
125 private static final String TIMER_KEY = HybsSystem.SCEDULE_KEY;
126 private static final String TIMERTASK_KEY = HybsSystem.SCEDULE_TASK_KEY;
127
128 // 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定å?を渡せるように変更ã€?
129 private String[] keys = null; // タイマã?タスクへ渡すキー配å?
130 private String[] vals = null; // タイマã?タスクへ渡すバリュー配å?
131 private String body = null; // タイマã?タスクへ渡すã?ãƒ?‚£ー要ç´?
132 private String startTime = "000000"; // 24時間制の開始時刻
133 private String stopTime = "000000"; // 24時間制の終äº?™‚刻
134
135 // 3.5.2.0 (2003/10/20) 結果ã‚?DBTableModel として、scope 属æ?に登録するã€?
136 private String scope = "local"; // local は互換性のためã€?request","page","session","applicaton"
137
138 // 3.7.0.4 (2005/03/14) 帳票ãƒ??モンに、エラー時にスリープしてå¾?©Ÿする機è?を追åŠ?
139 private final int ERROR_SLEEP_TIME = HybsSystem.sysInt( "REPORT_DAEMON_ERROR_SLEEP_TIME" );
140
141 // 4.0.0 (2006/11/17) HybsTimerTaskManager ã‚?static クラスから通常オブジェクトとして管ç�??
142 private static final HybsTimerTaskManager taskManager ;
143
144 // 4.0.0 (2005/01/31) Cleanable インターフェースによる初期化å?ç�?
145 // 4.3.6.2 (2009/04/15) コンãƒ?‚スト終äº?™‚のみclear()されるよã�?�«対å¿?
146 static {
147 taskManager = new HybsTimerTaskManager();
148 // 4.3.6.2 (2009/04/15)
149 // SystemManager.addCleanable( taskManager );
150 SystemManager.addCleanable( taskManager, true );
151 }
152
153 /**
154 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
155 *
156 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定å?を渡せるように変更ã€?
157 *
158 * @return 後続å?ç�??æŒ?¤º( EVAL_BODY_BUFFERED )
159 */
160 @Override
161 public int doStartTag() {
162 return( EVAL_BODY_BUFFERED ); // Body を評価するã€? extends BodyTagSupport æ™?
163 }
164
165 /**
166 * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
167 *
168 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定å?を渡せるように変更ã€?
169 *
170 * @return 後続å?ç�??æŒ?¤º(SKIP_BODY)
171 */
172 @Override
173 public int doAfterBody() {
174 body = getBodyString();
175
176 return(SKIP_BODY);
177 }
178
179 /**
180 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
181 *
182 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
183 * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェãƒ?‚¯を行いますã?
184 *
185 * @return 後続å?ç�??æŒ?¤º
186 */
187 @Override
188 public int doEndTag() {
189 debugPrint(); // 4.0.0 (2005/02/28)
190 if( !check( command, COMMAND_LIST ) ) { return( EVAL_PAGE ); }
191
192 if( "session".equals( scope ) ) {
193 startQueryTransaction( tableId ); // 3.6.0.8 (2004/11/19)
194 }
195
196 // 3.6.0.8 (2004/11/19) トランザクションチェãƒ?‚¯を行いますã?
197 if( commandExec( command ) ) {
198 return(EVAL_PAGE); // ペã?ジの残りを評価するã€?
199 }
200 else {
201 jspPrint( "ScheduleTag Query処ç�?�Œ割り込まれましたã€?BTableModel は登録しませんã€? );
202 return (SKIP_PAGE);
203 }
204 }
205
206 /**
207 * タグリブオブジェクトをリリースしますã?
208 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
209 *
210 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
211 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定å?を渡せるように変更ã€?
212 * @og.rev 3.5.2.0 (2003/10/20) 結果ã‚?DBTableModel として、scope 属æ?に登録するã€?
213 */
214 @Override
215 protected void release2() {
216 super.release2();
217 command = CMD_SET;
218 timerTask = null; // 処ç�?‚’実行すã‚?HybsTimerTask のクラス名をæŒ?®šしますã?
219 name = null; // タイマã?タスクの名称(ユニã?クキー)
220 comment = null; // タイマã?タスクの説æ˜?
221 delay = 0; // タスクが実行される前ã?ミリ秒単位ã?é�?»¶(初期値:0)
222 period = 60000; // 連続するタスク実行ã?ミリ秒単位ã?時間(初期値:60000 mS)
223 fixedDelay = true; // 固定遅延実è¡?true)/固定é?度実è¡?false) (初期値:true)
224 uniqKey = -1; // ありえなã�??をå?期設定しておくã€?
225 singleton = true; // Name属æ?が同ä¸??タスクを2重登録出来なã�?‚ˆã�?�«する(初期値:true)
226 keys = null; // タイマã?タスクへ渡すキー配å?
227 vals = null; // タイマã?タスクへ渡すバリュー配å?
228 startTime = "000000"; // 24時間制の開始時刻
229 stopTime = "000000"; // 24時間制の終äº?™‚刻
230 tableId = HybsSystem.TBL_MDL_KEY; //
231 scope = "local"; // local は互換性のためã€?request","page","session","applicaton"
232 }
233
234 /**
235 * コマンドを実行しますã?
236 *
237 * コマンドã?,HTMLから(SET/VIEW/REMOVE/CANCEL)æŒ?®šされますã?で,setCommand()メソãƒ?ƒ‰で
238 * 登録しますã?
239 * コマンドを登録すると同時に,実行も行なã�?�¾すã?
240 *
241 * @og.rev 3.5.2.0 (2003/10/20) viewAttribute()メソãƒ?ƒ‰をã?全てで実行しますã?
242 * @og.rev 3.6.0.8 (2004/11/19) 正常に登録できたかどã�?�‹をã?返しますã?
243 * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ージリソース統å�? setMsg() â‡?setLbl )
244 *
245 * @param command コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?—å?)
246 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ScheduleTag.CMD_SET">コマンド定数</a>
247 *
248 * @return 正常かどã�?�‹(true:正常/false:異常)
249 */
250 protected boolean commandExec( final String command ) {
251 if( CMD_SET.equals( command ) ) {
252 setAttribute();
253 // setMsg( "MSG0059" ); // 登録しましたã€?
254 setLbl( "MSG0059" ); // 登録しましたã€?
255 jspPrint( getMsglbl() );
256 }
257 else if( CMD_VIEW.equals( command ) ) {
258 jspPrint( String.valueOf( taskManager.size() ) );
259 // setMsg( "MSG0033" ); // ã€?»¶検索しましたã€?
260 setLbl( "MSG0033" ); // ã€?»¶検索しましたã€?
261 jspPrint( getMsglbl() );
262 }
263 else if( CMD_REMOVE.equals( command ) ) {
264 removeAttribute();
265 // setMsg( "MSG0061" ); // 削除しましたã€?
266 setLbl( "MSG0061" ); // 削除しましたã€?
267 jspPrint( getMsglbl() );
268 }
269 else if( CMD_CANCEL.equals( command ) ) {
270 cancelAttribute();
271 // setMsg( "MSG0063" ); // 完äº?�—ましたã€?
272 setLbl( "MSG0063" ); // 完äº?�—ましたã€?
273 jspPrint( getMsglbl() );
274 }
275 return viewAttribute();
276 }
277
278 /**
279 * HybsTimerTask を登録しますã?
280 *
281 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定å?を渡せるように変更ã€?
282 * @og.rev 3.6.0.7 (2004/11/06) パラメータをMapで渡すよã�?�«変更ã€?
283 * @og.rev 3.7.0.4 (2005/03/14) HybsTimerTask に setErrorSleepSec メソãƒ?ƒ‰の追åŠ?
284 */
285 @SuppressWarnings(value={"unchecked"})
286 private void setAttribute() {
287 // シングルトンで、かつ、すでに、同ä¸?��称のタスクã�?
288 // 含まれてã�?‚‹場合ã?、セãƒ?ƒˆしなã�??
289 if( singleton && taskManager.contains( name ) ) { return ; }
290
291 // 3.6.0.7 (2004/11/06) パラメータをMapで渡すよã�?�«変更
292 Map<String,String> param = null;
293 if( keys != null ) {
294 param = new HashMap<String,String>();
295 for( int i=0; i<keys.length; i++ ) {
296 param.put( keys[i],vals[i] );
297 }
298 }
299
300 HybsTimerTask task = (HybsTimerTask)HybsSystem.newInstance( timerTask );
301 taskManager.addTask( task );
302
303 task.setName( name );
304 task.setComment( comment );
305 task.setParameter( param ); // 3.6.0.7 (2004/11/06)
306 task.setBody( body );
307 task.setStartTime( startTime );
308 task.setStopTime( stopTime );
309 task.setErrorSleepSec( ERROR_SLEEP_TIME ); // 3.7.0.4 (2005/03/14)
310 task.initDaemon();
311
312 // 3.6.1.0 (2005/01/05) Timer 同ä¸?‚¹レãƒ?ƒ‰のため、å?別に作æ?するã€?
313 Map<String,Timer> timerMap = (Map<String,Timer>)getContextAttribute( TIMER_KEY );
314 if( timerMap == null ) { timerMap = new HashMap<String,Timer>(); }
315
316 Timer timer = timerMap.get( name );
317 if( timer == null ) { timer = new Timer( true ); }
318
319 if( fixedDelay ) {
320 if( period > 0 ) { timer.schedule( task,delay,period ); }
321 else { timer.schedule( task,delay ); }
322 }
323 else {
324 if( period < FIXED_RATE_MIN_TIME ) { period = FIXED_RATE_MIN_TIME; }
325 timer.scheduleAtFixedRate( task,delay,period );
326 }
327
328 // 3.6.1.0 (2005/01/05) Timer 同ä¸?‚¹レãƒ?ƒ‰のため、å?別に作æ?するã€?
329 timerMap.put( name,timer );
330 setContextAttribute( TIMER_KEY,timerMap );
331 }
332
333 /**
334 * HybsTimerTask をä¸?¦§表示しますã?
335 *
336 * @og.rev 3.5.2.0 (2003/10/20) 結果ã‚?DBTableModel として、scope 属æ?に登録するã€?
337 * @og.rev 3.5.6.1 (2004/06/25) lang è¨?ªžコーãƒ?属æ?を削除しますã?
338 * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェãƒ?‚¯を行いますã?
339 * @og.rev 3.6.0.8 (2004/11/19) 正常に登録できたかどã�?�‹をã?返しますã?
340 *
341 * @return 正常かどã�?�‹(true:正常/false:異常)
342 */
343 private boolean viewAttribute() {
344 HybsTimerTask[] tasks = taskManager.toArray();
345 DBTableModel table = makeDBTable( tasks );
346
347 if( "local".equals( scope ) ) {
348 if( table != null ) {
349 ViewForm form = ViewFormFactory.newInstance( "HTMLTable" );
350 form.clear();
351 form.init( table );
352 jspPrint( form.create() );
353 }
354 }
355 else {
356 super.setScope( scope ); // 3.6.0.9 (2004/12/03)
357 // 3.6.0.8 (2004/11/19) トランザクションチェãƒ?‚¯を行いますã?
358 return commitTableObject( tableId, table );
359 }
360 return true;
361 }
362
363 /**
364 * HybsTimerTask を削除しますã?
365 *
366 * @og.rev 3.2.2.0 (2003/05/31) キャンセルを名前でもできる様にロジãƒ?‚¯追åŠ??
367 *
368 */
369 private void removeAttribute() {
370 if( uniqKey >= 0 ) {
371 taskManager.cancelTask( uniqKey );
372 }
373 else {
374 taskManager.cancelTask( name );
375 }
376 }
377
378 /**
379 * Timer そã?もã?をキャンセルしますã?
380 *
381 * すべての、HybsTimerTask は、削除されますã?
382 *
383 * @og.rev 3.6.1.0 (2005/01/05) Timer 同ä¸?‚¹レãƒ?ƒ‰のため、å?別に作æ?するã€?
384 */
385 @SuppressWarnings(value={"unchecked"})
386 private void cancelAttribute() {
387 taskManager.clear();
388
389 // 3.6.1.0 (2005/01/05)
390 Map<String,Timer> timerMap = (Map<String,Timer>)getContextAttribute( TIMER_KEY );
391 if( timerMap != null ) {
392 Iterator<Timer> iterator = timerMap.values().iterator(); // 4.3.3.6 (2008/11/15) Generics警告対å¿?
393 while( iterator.hasNext() ) {
394 // ((Timer)iterator.next()).cancel();
395 (iterator.next()).cancel(); // 4.3.3.6 (2008/11/15) Generics警告対å¿?
396 }
397 timerMap.clear();
398 }
399 removeContextAttribute( TIMER_KEY );
400 }
401
402 /**
403 * 【TAG】コマンãƒ?SET,VIEW,REMOVE,CANCEL)をセãƒ?ƒˆしまã�?初期値:SET)ã€?
404 *
405 * @og.tag
406 * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
407 * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
408 * 何も設定されなã�??またã?、null の場合ã?ã€?SET" がå?期å?にセãƒ?ƒˆされますã?
409 *
410 * @param cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?—å?)
411 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ScheduleTag.CMD_SET">コマンド定数</a>
412 */
413 public void setCommand( final String cmd ) {
414 command = nval( getRequestParameter( cmd ),command );
415 }
416
417 /**
418 * 【TAG】å?ç�?‚’実行するクラスå�?HybsTimerTask のサブクラス)を指定しますã?
419 *
420 * @og.tag 処ç�?‚’実行すã‚?HybsTimerTask のクラス名をæŒ?®šしますã?
421 *
422 * @param val クラスå�?
423 */
424 public void setTimerTask( final String val ) {
425 timerTask = getRequestParameter( val );
426 }
427
428 /**
429 * 【TAG】名称(ユニã?クキー)を設定しますã?
430 *
431 * @og.tag タイマã?タスクの名称(ユニã?クキー)を設定しますã?
432 *
433 * @param nm タイマã?タスクの名称
434 */
435 public void setName( final String nm ) {
436 name = getRequestParameter( nm );
437 }
438
439 /**
440 * 【TAG】タイマã?タスクの説明を設定しますã?
441 *
442 * @og.tag タイマã?タスクの説明を設定しますã?
443 *
444 * @param cmt タイマã?タスクの説æ˜?
445 */
446 public void setComment( final String cmt ) {
447 comment = getRequestParameter( cmt );
448 }
449
450 /**
451 * 【TAG】ミリ秒単位ã?é�?»¶時間を設定しまã�?初期値:0)ã€?
452 *
453 * @og.tag タスクが実行される前ã?ミリ秒単位ã?é�?»¶を設定しまã�?初期値:0)
454 *
455 * @param val é�?»¶時間(ms)
456 */
457 public void setDelay( final String val ) {
458 delay = nval( getRequestParameter( val ),delay );
459 }
460
461 /**
462 * 【TAG】ミリ秒単位ã?繰り返し間隔を設定しまã�?初期値:60000)ã€?
463 *
464 * @og.tag 連続するタスク実行ã?ミリ秒単位ã?時間を設定しまã�?初期値:60000 mS)
465 *
466 * @param val 繰り返し間隔(ms)
467 */
468 public void setPeriod( final String val ) {
469 period = nval( getRequestParameter( val ),period );
470 }
471
472 /**
473 * 【TAG】固定遅延実行をæŒ?®šするかどã�?�‹[true:固定遅延実è¡?false:固定é?度実行]を設定しまã�?初期値:true)ã€?
474 *
475 * @og.tag
476 * 固定遅延実行では、前の実行ã?実際の実行時間を基準にしてそれぞれの実行がスケジュールされますã?
477 * 何らかã?ç�?”±で実行がé�?»¶した場å�?そã?あとの実行もé�?»¶されますã?
478 * æœ?µ‚的に、実行ã?頻度は通常、指定した期間ã?対応するé?度よりも若干é�?��なりまã�?
479 *
480 * 固定é?度実行では、最初ã?実行ã?スケジュールされた実行時間を基準にしてそれぞれの実行が
481 * スケジュールされますã?何らかã?ç�?”±で実行がé�?»¶した場合ã?「遅れを取り戻すã?ために
482 * 2 つ以上ã?実行が連続して行われますã?æœ?µ‚的に実行ã?頻度は、指定した期間ã?対応するé?度と
483 * 同じになりまã�?
484 * 初期値は、true:固定遅延実è¡?ですã?
485 *
486 * @param flag [true:固定遅延実è¡?false:固定é?度実行]
487 */
488 public void setFixedDelay( final String flag ) {
489 fixedDelay = nval( getRequestParameter( flag ),fixedDelay );
490 }
491
492 /**
493 * 【TAG】スケジュールをä¸?„�に決めるためのユニã?ク番号を指定しまã�?初期値:-1)ã€?
494 *
495 * @og.tag
496 * スケジュールを削除したりするå?合に、å¿?¦�なユニã?ク番号を指定しますã?
497 * 初期値はã€?1:あり得なã�?? ですã?
498 *
499 * @param no ユニã?ク番号
500 */
501 public void setUniqKey( final String no ) {
502 uniqKey = nval( getRequestParameter( no ),uniqKey );
503 }
504
505 /**
506 * 【TAG】Name属æ?が同ä¸??タスクを2重登録出来なã�?‚ˆã�?true/false]にしまã�?初期値:true[出来ない])ã€?
507 *
508 * @og.tag
509 * 同ä¸?¨®類ã?タスクをè¤?•°同時立上げしたくなã�??合に、利用しますã?
510 * ä¸?ˆ¬に、タイマã?タスクそã?もã?がã?繰り返し実行されますã?でã€?
511 * 初期値はã€?¼’重登録禁止にしてã�?�¾すã?
512 *
513 * @param flag Name属æ?が同ä¸??タスクを2重登録出来なã�?‚ˆã�?�«する(初期値:true)
514 */
515 public void setSingleton( final String flag ) {
516 singleton = nval( getRequestParameter( flag ),singleton );
517 }
518
519 /**
520 * 【TAG】HybsTimerTask に渡す為のキーæƒ??、CSV形式でè¤?•°æŒ?®šしますã?
521 *
522 * @og.tag
523 * HybsTimerTask に渡す為の、キーæƒ??をカンマ区åˆ?‚Šでè¤?•°æŒ?®šできますã?
524 * vals 属æ?には、キーに対応するå?をã?設定してくださいã€?
525 * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
526 * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
527 *
528 * @og.rev 3.2.2.0 (2003/05/31) 新規追åŠ?
529 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
530 *
531 * @param key キーæƒ??(CSV形å¼?
532 */
533 public void setKeys( final String key ) {
534 keys = getCSVParameter( key );
535 }
536
537 /**
538 * 【TAG】HybsTimerTask に渡す為の値をã?CSV形式でè¤?•°æŒ?®šしますã?
539 *
540 * @og.tag
541 * キーに設定したå?をã?カンマ区åˆ?‚Šæ–?—でè¤?•°して出来ますã?
542 * æŒ?®šé?序ã?、キーと同じにしておいて下さã�??
543 * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
544 * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
545 *
546 * @og.rev 3.2.2.0 (2003/05/31) 新規追åŠ?
547 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
548 *
549 * @param val 値(CSV形å¼?
550 */
551 public void setVals( final String val ) {
552 vals = getCSVParameter( val );
553 }
554
555 /**
556 * 【TAGã€?4時間制(YYMMDD)の開始時刻を設定しまã�?初期値:000000)ã€?
557 *
558 * @og.tag
559 * æŒ?®š時刻ç¯?›²å†?�§の実行ã?み許可するように開始時刻を設定しますã?
560 * これは、タイマã?でæŒ?®šした間隔ごとにチェãƒ?‚¯をå?れるので、チェãƒ?‚¯時間ã�?
561 * 長ã�??合ã?、正確に開始時刻から始まるとã�?�†もã?ではありませんã€?
562 * 初期値はã€?000000" ですã?
563 *
564 * @og.rev 3.2.2.0 (2003/05/31) 新規追åŠ?
565 *
566 * @param st 開始時刻
567 */
568 public void setStartTime( final String st ) {
569 startTime = nval( getRequestParameter( st ),startTime ) ;
570 }
571
572 /**
573 * 【TAGã€?4時間制(YYMMDD)の終äº?™‚刻を設定しまã�?初期値:000000)ã€?
574 *
575 * @og.tag
576 * æŒ?®š時刻ç¯?›²å†?�§の実行ã?み許可するように終äº?™‚刻を設定しますã?
577 * これは、タイマã?でæŒ?®šした間隔ごとにチェãƒ?‚¯をå?れるので、チェãƒ?‚¯時間ã�?
578 * 長ã�??合ã?、正確に終äº?™‚刻で終äº?�™るとã�?�†もã?ではありませんã€?
579 * (終äº?™‚刻を越えてからの新規実行ã?ありませんã€?
580 * 初期値はã€?000000" ですã?
581 *
582 * @og.rev 3.2.2.0 (2003/05/31) 新規追åŠ?
583 *
584 * @param st 終äº?™‚刻
585 */
586 public void setStopTime( final String st ) {
587 stopTime = nval( getRequestParameter( st ),stopTime ) ;
588 }
589
590 /**
591 * HybsTimerTask オブジェクトé?列よりã?DBTableModel を作æ?して返しますã?
592 * カラãƒ?��はã€?TaskName","UniqKey","Comment","CreateTime","scheduledTime" ですã?
593 *
594 * @param tasks タイマã?タスクオブジェクトé?åˆ?
595 *
596 * @return タイマã?タスクオブジェクトã?ãƒ??ブルモãƒ?ƒ«ã€?無ければ null
597 */
598 private DBTableModel makeDBTable( final HybsTimerTask[] tasks ) {
599 if( tasks == null || tasks.length == 0 ) { return null; }
600
601 ResourceManager resource = getResource();
602
603 String[] names = new String[] {
604 "TaskName","UniqKey","Comment","CreateTime","scheduledTime"
605 };
606
607 DBTableModel table = DBTableModelUtil.newDBTable();
608 table.init( names.length );
609 for( int i=0; i<names.length; i++ ) {
610 DBColumn dbColumn = resource.makeDBColumn( names[i] );
611 table.setDBColumn( i,dbColumn );
612 }
613
614 for( int i=0; i<tasks.length; i++ ) {
615 String[] clmVals = new String[names.length];
616 clmVals[0] = tasks[i].getName() ;
617 clmVals[1] = String.valueOf( tasks[i].getUniqKey() );
618 clmVals[2] = tasks[i].getComment() ;
619 clmVals[3] = HybsSystem.getDate( tasks[i].getCreateTime() );
620 clmVals[4] = HybsSystem.getDate( tasks[i].scheduledExecutionTime() );
621 table.addColumnValues( clmVals );
622 }
623
624 return table ;
625 }
626
627 /**
628 * 【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しまã�?
629 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
630 *
631 * @og.tag
632 * 検索結果より、DBTableModelオブジェクトを作æ?しますã?これをã?下流ã?viewタグ等に
633 * 渡すå?合にã€??常は、session を利用しますã?そã?場合ã?登録キーですã?
634 * query タグを同時に実行して、結果を求めるå?合ã?同ä¸?ƒ¡モリに配置される為ã€?
635 * こã? tableId 属æ?を利用して、メモリ空間をåˆ?�‘ますã?
636 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
637 *
638 * @param id sessionに登録する時ã? ID
639 */
640 public void setTableId( final String id ) {
641 tableId = nval( getRequestParameter( id ),tableId );
642 }
643
644 /**
645 * 【TAG】キャãƒ?‚·ュする場合ã?スコーãƒ?local,request,page,session,applicaton)を指定しまã�?初期値:local)ã€?
646 *
647 * @og.tag
648 * "local","request","page","session","applicaton" が指定できますã?
649 * "local" はã€?�Ž去のバã?ジョンとの互換性を保つ為の特殊な値ですã?
650 * 初期値はã€?local" ですã?
651 *
652 * @og.rev 3.5.2.0 (2003/10/20) 新規作æ?
653 *
654 * @param scp スコーãƒ?
655 */
656 @Override
657 public void setScope( final String scp ) {
658 scope = nval( getRequestParameter( scp ),scope );
659 }
660
661 /**
662 * こã?オブジェクトã?æ–?—å?表現を返しますã?
663 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
664 *
665 * @return こã?クラスのæ–?—å?表現
666 */
667 @Override
668 public String toString() {
669 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
670 .println( "VERSION" ,VERSION )
671 .println( "tableId" ,tableId )
672 .println( "command" ,command )
673 .println( "timerTask" ,timerTask )
674 .println( "name" ,name )
675 .println( "comment" ,comment )
676 .println( "delay" ,delay )
677 .println( "period" ,period )
678 .println( "fixedDelay" ,fixedDelay )
679 .println( "uniqKey" ,uniqKey )
680 .println( "singleton" ,singleton )
681 .println( "FIXED_RATE_MIN_TIME" ,FIXED_RATE_MIN_TIME)
682 .println( "TIMER_KEY" ,TIMER_KEY )
683 .println( "TIMERTASK_KEY" ,TIMERTASK_KEY )
684 .println( "keys" ,keys )
685 .println( "vals" ,vals )
686 .println( "body" ,body )
687 .println( "startTime" ,startTime )
688 .println( "stopTime" ,stopTime )
689 .println( "scope" ,scope )
690 .println( "ERROR_SLEEP_TIME" ,ERROR_SLEEP_TIME)
691 .println( "COMMAND_LIST" ,COMMAND_LIST )
692 .println( "Other..." ,getAttributes().getAttribute() )
693 .fixForm().toString() ;
694 }
695 }