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 ); 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処理が割り込まれました。DBTableModel は登録しません。" ); 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 * 初期値は、2重登録禁止にしています。 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】24時間制(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】24時間制(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}