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 */ 016package org.opengion.hayabusa.taglib; 017 018import org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.common.SystemManager; 020import org.opengion.hayabusa.db.DBColumn; 021import org.opengion.hayabusa.db.DBTableModel; 022import org.opengion.hayabusa.db.DBTableModelUtil; 023import org.opengion.hayabusa.html.ViewForm; 024import org.opengion.hayabusa.html.ViewFormFactory; 025import org.opengion.hayabusa.resource.ResourceManager; 026 027import static org.opengion.fukurou.util.StringUtil.nval ; 028 029import org.opengion.fukurou.util.HybsTimerTask; 030import org.opengion.fukurou.util.HybsTimerTaskManager; 031 032import java.util.Timer; 033import java.util.Map; 034import java.util.HashMap; 035import java.util.Iterator; 036 037/** 038 * アプリケーション共有のタイマー機能を用いて、繰り返しスケジュールを設定するタグです。 039 * 040 * タイマースケジュールは、帳票デーモンや、再編成処理、定期的バッチ処理など、エンジン上の 041 * スレッドで動作するスケジュールを登録します。 042 * スケジュールすべきクラスは、HybsTimerTask を拡張(extends)しておく必要があります。 043 * 044 * @og.formSample 045 * ●形式:<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】24時間制(YYMMDD)の開始時刻を設定します(初期値:000000) 061 * stopTime 【TAG】24時間制(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 は、ms単位で指定する必要があるため、1000倍しています。 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 */ 091public 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, true ); 150 } 151 152 /** 153 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 154 * 155 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定値を渡せるように変更。 156 * 157 * @return 後続処理の指示( EVAL_BODY_BUFFERED ) 158 */ 159 @Override 160 public int doStartTag() { 161 return EVAL_BODY_BUFFERED ; // Body を評価する。( extends BodyTagSupport 時) 162 } 163 164 /** 165 * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。 166 * 167 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定値を渡せるように変更。 168 * 169 * @return 後続処理の指示(SKIP_BODY) 170 */ 171 @Override 172 public int doAfterBody() { 173 body = getBodyString(); 174 175 return SKIP_BODY ; 176 } 177 178 /** 179 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 180 * 181 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 182 * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェックを行います。 183 * 184 * @return 後続処理の指示 185 */ 186 @Override 187 public int doEndTag() { 188 debugPrint(); // 4.0.0 (2005/02/28) 189 if( !check( command, COMMAND_LIST ) ) { return EVAL_PAGE ; } 190 191 if( "session".equals( scope ) ) { 192 startQueryTransaction( tableId ); // 3.6.0.8 (2004/11/19) 193 } 194 195 // 3.6.0.8 (2004/11/19) トランザクションチェックを行います。 196 if( commandExec( command ) ) { 197 return EVAL_PAGE ; // ページの残りを評価する。 198 } 199 else { 200 jspPrint( "ScheduleTag Query処理が割り込まれました。DBTableModel は登録しません。" ); 201 return SKIP_PAGE; 202 } 203 } 204 205 /** 206 * タグリブオブジェクトをリリースします。 207 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 208 * 209 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 210 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定値を渡せるように変更。 211 * @og.rev 3.5.2.0 (2003/10/20) 結果を DBTableModel として、scope 属性に登録する。 212 */ 213 @Override 214 protected void release2() { 215 super.release2(); 216 command = CMD_SET; 217 timerTask = null; // 処理を実行する HybsTimerTask のクラス名を指定します。 218 name = null; // タイマータスクの名称(ユニークキー) 219 comment = null; // タイマータスクの説明 220 delay = 0; // タスクが実行される前のミリ秒単位の遅延(初期値:0) 221 period = 60000; // 連続するタスク実行のミリ秒単位の時間(初期値:60000 mS) 222 fixedDelay = true; // 固定遅延実行(true)/固定頻度実行(false) (初期値:true) 223 uniqKey = -1; // ありえない値を初期設定しておく。 224 singleton = true; // Name属性が同一のタスクを2重登録出来ないようにする(初期値:true) 225 keys = null; // タイマータスクへ渡すキー配列 226 vals = null; // タイマータスクへ渡すバリュー配列 227 startTime = "000000"; // 24時間制の開始時刻 228 stopTime = "000000"; // 24時間制の終了時刻 229 tableId = HybsSystem.TBL_MDL_KEY; // 230 scope = "local"; // local は互換性のため。"request","page","session","applicaton" 231 } 232 233 /** 234 * コマンドを実行します。 235 * 236 * コマンドは,HTMLから(SET/VIEW/REMOVE/CANCEL)指定されますので,setCommand()メソッドで 237 * 登録します。 238 * コマンドを登録すると同時に,実行も行ないます。 239 * 240 * @og.rev 3.5.2.0 (2003/10/20) viewAttribute()メソッドを、全てで実行します。 241 * @og.rev 3.6.0.8 (2004/11/19) 正常に登録できたかどうかを、返します。 242 * @og.rev 4.0.0.0 (2007/10/18) メッセージリソース統合( setMsg() ⇒ setLbl ) 243 * 244 * @param command コマンド(public static final 宣言されている文字列) 245 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ScheduleTag.CMD_SET">コマンド定数</a> 246 * 247 * @return 正常かどうか(true:正常/false:異常) 248 */ 249 protected boolean commandExec( final String command ) { 250 if( CMD_SET.equals( command ) ) { 251 setAttribute(); 252 setLbl( "MSG0059" ); // 登録しました。 253 jspPrint( getMsglbl() ); 254 } 255 else if( CMD_VIEW.equals( command ) ) { 256 jspPrint( String.valueOf( taskManager.size() ) ); 257 setLbl( "MSG0033" ); // 件検索しました。 258 jspPrint( getMsglbl() ); 259 } 260 else if( CMD_REMOVE.equals( command ) ) { 261 removeAttribute(); 262 setLbl( "MSG0061" ); // 削除しました。 263 jspPrint( getMsglbl() ); 264 } 265 else if( CMD_CANCEL.equals( command ) ) { 266 cancelAttribute(); 267 setLbl( "MSG0063" ); // 完了しました。 268 jspPrint( getMsglbl() ); 269 } 270 return viewAttribute(); 271 } 272 273 /** 274 * HybsTimerTask を登録します。 275 * 276 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定値を渡せるように変更。 277 * @og.rev 3.6.0.7 (2004/11/06) パラメータをMapで渡すように変更。 278 * @og.rev 3.7.0.4 (2005/03/14) HybsTimerTask に setErrorSleepSec メソッドの追加 279 */ 280 @SuppressWarnings(value={"unchecked"}) 281 private void setAttribute() { 282 // シングルトンで、かつ、すでに、同一名称のタスクが 283 // 含まれている場合は、セットしない。 284 if( singleton && taskManager.contains( name ) ) { return ; } 285 286 // 3.6.0.7 (2004/11/06) パラメータをMapで渡すように変更 287 Map<String,String> param = null; 288 if( keys != null ) { 289 param = new HashMap<String,String>(); 290 for( int i=0; i<keys.length; i++ ) { 291 param.put( keys[i],vals[i] ); 292 } 293 } 294 295 HybsTimerTask task = (HybsTimerTask)HybsSystem.newInstance( timerTask ); 296 taskManager.addTask( task ); 297 298 task.setName( name ); 299 task.setComment( comment ); 300 task.setParameter( param ); // 3.6.0.7 (2004/11/06) 301 task.setBody( body ); 302 task.setStartTime( startTime ); 303 task.setStopTime( stopTime ); 304 task.setErrorSleepSec( ERROR_SLEEP_TIME ); // 3.7.0.4 (2005/03/14) 305 task.initDaemon(); 306 307 // 3.6.1.0 (2005/01/05) Timer 同一スレッドのため、個別に作成する。 308 Map<String,Timer> timerMap = (Map<String,Timer>)getContextAttribute( TIMER_KEY ); 309 if( timerMap == null ) { timerMap = new HashMap<String,Timer>(); } 310 311 Timer timer = timerMap.get( name ); 312 if( timer == null ) { timer = new Timer( true ); } 313 314 if( fixedDelay ) { 315 if( period > 0 ) { timer.schedule( task,delay,period ); } 316 else { timer.schedule( task,delay ); } 317 } 318 else { 319 if( period < FIXED_RATE_MIN_TIME ) { period = FIXED_RATE_MIN_TIME; } 320 timer.scheduleAtFixedRate( task,delay,period ); 321 } 322 323 // 3.6.1.0 (2005/01/05) Timer 同一スレッドのため、個別に作成する。 324 timerMap.put( name,timer ); 325 setContextAttribute( TIMER_KEY,timerMap ); 326 } 327 328 /** 329 * HybsTimerTask を一覧表示します。 330 * 331 * @og.rev 3.5.2.0 (2003/10/20) 結果を DBTableModel として、scope 属性に登録する。 332 * @og.rev 3.5.6.1 (2004/06/25) lang 言語コード 属性を削除します。 333 * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェックを行います。 334 * @og.rev 3.6.0.8 (2004/11/19) 正常に登録できたかどうかを、返します。 335 * 336 * @return 正常かどうか(true:正常/false:異常) 337 */ 338 private boolean viewAttribute() { 339 HybsTimerTask[] tasks = taskManager.toArray(); 340 DBTableModel table = makeDBTable( tasks ); 341 342 if( "local".equals( scope ) ) { 343 if( table != null ) { 344 ViewForm form = ViewFormFactory.newInstance( "HTMLTable" ); 345 form.clear(); 346 form.init( table ); 347 jspPrint( form.create() ); 348 } 349 } 350 else { 351 super.setScope( scope ); // 3.6.0.9 (2004/12/03) 352 // 3.6.0.8 (2004/11/19) トランザクションチェックを行います。 353 return commitTableObject( tableId, table ); 354 } 355 return true; 356 } 357 358 /** 359 * HybsTimerTask を削除します。 360 * 361 * @og.rev 3.2.2.0 (2003/05/31) キャンセルを名前でもできる様にロジック追加。 362 * 363 */ 364 private void removeAttribute() { 365 if( uniqKey >= 0 ) { 366 taskManager.cancelTask( uniqKey ); 367 } 368 else { 369 taskManager.cancelTask( name ); 370 } 371 } 372 373 /** 374 * Timer そのものをキャンセルします。 375 * 376 * すべての、HybsTimerTask は、削除されます。 377 * 378 * @og.rev 3.6.1.0 (2005/01/05) Timer 同一スレッドのため、個別に作成する。 379 */ 380 @SuppressWarnings(value={"unchecked"}) 381 private void cancelAttribute() { 382 taskManager.clear(); 383 384 // 3.6.1.0 (2005/01/05) 385 Map<String,Timer> timerMap = (Map<String,Timer>)getContextAttribute( TIMER_KEY ); 386 if( timerMap != null ) { 387 Iterator<Timer> iterator = timerMap.values().iterator(); // 4.3.3.6 (2008/11/15) Generics警告対応 388 while( iterator.hasNext() ) { 389 (iterator.next()).cancel(); // 4.3.3.6 (2008/11/15) Generics警告対応 390 } 391 timerMap.clear(); 392 } 393 removeContextAttribute( TIMER_KEY ); 394 } 395 396 /** 397 * 【TAG】コマンド(SET,VIEW,REMOVE,CANCEL)をセットします(初期値:SET)。 398 * 399 * @og.tag 400 * コマンドは,HTMLから(get/post)指定されますので,CMD_xxx で設定される 401 * フィールド定数値のいづれかを、指定できます。 402 * 何も設定されない、または、null の場合は、"SET" が初期値にセットされます。 403 * 404 * @param cmd コマンド(public static final 宣言されている文字列) 405 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ScheduleTag.CMD_SET">コマンド定数</a> 406 */ 407 public void setCommand( final String cmd ) { 408 command = nval( getRequestParameter( cmd ),command ); 409 } 410 411 /** 412 * 【TAG】処理を実行するクラス名(HybsTimerTask のサブクラス)を指定します。 413 * 414 * @og.tag 処理を実行する HybsTimerTask のクラス名を指定します。 415 * 416 * @param val クラス名 417 */ 418 public void setTimerTask( final String val ) { 419 timerTask = getRequestParameter( val ); 420 } 421 422 /** 423 * 【TAG】名称(ユニークキー)を設定します。 424 * 425 * @og.tag タイマータスクの名称(ユニークキー)を設定します。 426 * 427 * @param nm タイマータスクの名称 428 */ 429 public void setName( final String nm ) { 430 name = getRequestParameter( nm ); 431 } 432 433 /** 434 * 【TAG】タイマータスクの説明を設定します。 435 * 436 * @og.tag タイマータスクの説明を設定します。 437 * 438 * @param cmt タイマータスクの説明 439 */ 440 public void setComment( final String cmt ) { 441 comment = getRequestParameter( cmt ); 442 } 443 444 /** 445 * 【TAG】ミリ秒単位の遅延時間を設定します(初期値:0)。 446 * 447 * @og.tag タスクが実行される前のミリ秒単位の遅延を設定します(初期値:0) 448 * 449 * @param val 遅延時間(ms) 450 */ 451 public void setDelay( final String val ) { 452 delay = nval( getRequestParameter( val ),delay ); 453 } 454 455 /** 456 * 【TAG】ミリ秒単位の繰り返し間隔を設定します(初期値:60000)。 457 * 458 * @og.tag 連続するタスク実行のミリ秒単位の時間を設定します(初期値:60000 mS) 459 * 460 * @param val 繰り返し間隔(ms) 461 */ 462 public void setPeriod( final String val ) { 463 period = nval( getRequestParameter( val ),period ); 464 } 465 466 /** 467 * 【TAG】固定遅延実行を指定するかどうか[true:固定遅延実行/false:固定頻度実行]を設定します(初期値:true)。 468 * 469 * @og.tag 470 * 固定遅延実行では、前の実行の実際の実行時間を基準にしてそれぞれの実行がスケジュールされます。 471 * 何らかの理由で実行が遅延した場合 そのあとの実行も遅延されます。 472 * 最終的に、実行の頻度は通常、指定した期間の対応する頻度よりも若干遅くなります 473 * 474 * 固定頻度実行では、最初の実行のスケジュールされた実行時間を基準にしてそれぞれの実行が 475 * スケジュールされます。何らかの理由で実行が遅延した場合、「遅れを取り戻す」ために 476 * 2 つ以上の実行が連続して行われます。最終的に実行の頻度は、指定した期間の対応する頻度と 477 * 同じになります 478 * 初期値は、true:固定遅延実行 です。 479 * 480 * @param flag [true:固定遅延実行/false:固定頻度実行] 481 */ 482 public void setFixedDelay( final String flag ) { 483 fixedDelay = nval( getRequestParameter( flag ),fixedDelay ); 484 } 485 486 /** 487 * 【TAG】スケジュールを一意に決めるためのユニーク番号を指定します(初期値:-1)。 488 * 489 * @og.tag 490 * スケジュールを削除したりする場合に、必要なユニーク番号を指定します。 491 * 初期値は、-1:あり得ない値 です。 492 * 493 * @param no ユニーク番号 494 */ 495 public void setUniqKey( final String no ) { 496 uniqKey = nval( getRequestParameter( no ),uniqKey ); 497 } 498 499 /** 500 * 【TAG】Name属性が同一のタスクを2重登録出来ないよう[true/false]にします(初期値:true[出来ない])。 501 * 502 * @og.tag 503 * 同一種類のタスクを複数同時立上げしたくない場合に、利用します。 504 * 一般に、タイマータスクそのものが、繰り返し実行されますので、 505 * 初期値は、2重登録禁止にしています。 506 * 507 * @param flag Name属性が同一のタスクを2重登録出来ないようにする(初期値:true) 508 */ 509 public void setSingleton( final String flag ) { 510 singleton = nval( getRequestParameter( flag ),singleton ); 511 } 512 513 /** 514 * 【TAG】HybsTimerTask に渡す為のキー情報、CSV形式で複数指定します。 515 * 516 * @og.tag 517 * HybsTimerTask に渡す為の、キー情報をカンマ区切りで複数指定できます。 518 * vals 属性には、キーに対応する値を、設定してください。 519 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 520 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 521 * 522 * @og.rev 3.2.2.0 (2003/05/31) 新規追加 523 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 524 * 525 * @param key キー情報(CSV形式) 526 */ 527 public void setKeys( final String key ) { 528 keys = getCSVParameter( key ); 529 } 530 531 /** 532 * 【TAG】HybsTimerTask に渡す為の値を、CSV形式で複数指定します。 533 * 534 * @og.tag 535 * キーに設定した値を、カンマ区切り文字で複数して出来ます。 536 * 指定順序は、キーと同じにしておいて下さい。 537 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 538 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 539 * 540 * @og.rev 3.2.2.0 (2003/05/31) 新規追加 541 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 542 * 543 * @param val 値(CSV形式) 544 */ 545 public void setVals( final String val ) { 546 vals = getCSVParameter( val ); 547 } 548 549 /** 550 * 【TAG】24時間制(YYMMDD)の開始時刻を設定します(初期値:000000)。 551 * 552 * @og.tag 553 * 指定時刻範囲内での実行のみ許可するように開始時刻を設定します。 554 * これは、タイマーで指定した間隔ごとにチェックを入れるので、チェック時間が 555 * 長い場合は、正確に開始時刻から始まるというものではありません。 556 * 初期値は、"000000" です。 557 * 558 * @og.rev 3.2.2.0 (2003/05/31) 新規追加 559 * 560 * @param st 開始時刻 561 */ 562 public void setStartTime( final String st ) { 563 startTime = nval( getRequestParameter( st ),startTime ) ; 564 } 565 566 /** 567 * 【TAG】24時間制(YYMMDD)の終了時刻を設定します(初期値:000000)。 568 * 569 * @og.tag 570 * 指定時刻範囲内での実行のみ許可するように終了時刻を設定します。 571 * これは、タイマーで指定した間隔ごとにチェックを入れるので、チェック時間が 572 * 長い場合は、正確に終了時刻で終了するというものではありません。 573 * (終了時刻を越えてからの新規実行はありません。) 574 * 初期値は、"000000" です。 575 * 576 * @og.rev 3.2.2.0 (2003/05/31) 新規追加 577 * 578 * @param st 終了時刻 579 */ 580 public void setStopTime( final String st ) { 581 stopTime = nval( getRequestParameter( st ),stopTime ) ; 582 } 583 584 /** 585 * HybsTimerTask オブジェクト配列より、DBTableModel を作成して返します。 586 * カラム名は、"TaskName","UniqKey","Comment","CreateTime","scheduledTime" です。 587 * 588 * @param tasks タイマータスクオブジェクト配列 589 * 590 * @return タイマータスクオブジェクトのテーブルモデル。 無ければ null 591 */ 592 private DBTableModel makeDBTable( final HybsTimerTask[] tasks ) { 593 if( tasks == null || tasks.length == 0 ) { return null; } 594 595 ResourceManager resource = getResource(); 596 597 String[] names = new String[] { 598 "TaskName","UniqKey","Comment","CreateTime","scheduledTime" 599 }; 600 601 DBTableModel table = DBTableModelUtil.newDBTable(); 602 table.init( names.length ); 603 for( int i=0; i<names.length; i++ ) { 604 DBColumn dbColumn = resource.makeDBColumn( names[i] ); 605 table.setDBColumn( i,dbColumn ); 606 } 607 608 for( int i=0; i<tasks.length; i++ ) { 609 String[] clmVals = new String[names.length]; 610 clmVals[0] = tasks[i].getName() ; 611 clmVals[1] = String.valueOf( tasks[i].getUniqKey() ); 612 clmVals[2] = tasks[i].getComment() ; 613 clmVals[3] = HybsSystem.getDate( tasks[i].getCreateTime() ); 614 clmVals[4] = HybsSystem.getDate( tasks[i].scheduledExecutionTime() ); 615 table.addColumnValues( clmVals ); 616 } 617 618 return table ; 619 } 620 621 /** 622 * 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します 623 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])。 624 * 625 * @og.tag 626 * 検索結果より、DBTableModelオブジェクトを作成します。これを、下流のviewタグ等に 627 * 渡す場合に、通常は、session を利用します。その場合の登録キーです。 628 * query タグを同時に実行して、結果を求める場合、同一メモリに配置される為、 629 * この tableId 属性を利用して、メモリ空間を分けます。 630 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])。 631 * 632 * @param id sessionに登録する時の ID 633 */ 634 public void setTableId( final String id ) { 635 tableId = nval( getRequestParameter( id ),tableId ); 636 } 637 638 /** 639 * 【TAG】キャッシュする場合のスコープ(local,request,page,session,applicaton)を指定します(初期値:local)。 640 * 641 * @og.tag 642 * "local","request","page","session","applicaton" が指定できます。 643 * "local" は、過去のバージョンとの互換性を保つ為の特殊な値です。 644 * 初期値は、"local" です。 645 * 646 * @og.rev 3.5.2.0 (2003/10/20) 新規作成 647 * 648 * @param scp スコープ 649 */ 650 @Override 651 public void setScope( final String scp ) { 652 scope = nval( getRequestParameter( scp ),scope ); 653 } 654 655 /** 656 * このオブジェクトの文字列表現を返します。 657 * 基本的にデバッグ目的に使用します。 658 * 659 * @return このクラスの文字列表現 660 */ 661 @Override 662 public String toString() { 663 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 664 .println( "VERSION" ,VERSION ) 665 .println( "tableId" ,tableId ) 666 .println( "command" ,command ) 667 .println( "timerTask" ,timerTask ) 668 .println( "name" ,name ) 669 .println( "comment" ,comment ) 670 .println( "delay" ,delay ) 671 .println( "period" ,period ) 672 .println( "fixedDelay" ,fixedDelay ) 673 .println( "uniqKey" ,uniqKey ) 674 .println( "singleton" ,singleton ) 675 .println( "FIXED_RATE_MIN_TIME" ,FIXED_RATE_MIN_TIME) 676 .println( "TIMER_KEY" ,TIMER_KEY ) 677 .println( "TIMERTASK_KEY" ,TIMERTASK_KEY ) 678 .println( "keys" ,keys ) 679 .println( "vals" ,vals ) 680 .println( "body" ,body ) 681 .println( "startTime" ,startTime ) 682 .println( "stopTime" ,stopTime ) 683 .println( "scope" ,scope ) 684 .println( "ERROR_SLEEP_TIME" ,ERROR_SLEEP_TIME) 685 .println( "COMMAND_LIST" ,COMMAND_LIST ) 686 .println( "Other..." ,getAttributes().getAttribute() ) 687 .fixForm().toString() ; 688 } 689}