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.fukurou.db.ConnectionFactory; 019import org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17) 020import org.opengion.hayabusa.resource.UserInfo; 021import org.opengion.hayabusa.resource.ResourceFactory; 022import org.opengion.hayabusa.resource.CalendarFactory; 023import org.opengion.hayabusa.db.SelectionFactory; 024 025import static org.opengion.fukurou.util.StringUtil.nval ; 026import static org.opengion.fukurou.system.HybsConst.BR; // 6.1.0.0 (2014/12/26) refactoring 027 028/** 029 * キャッシュしている各種データを初期化(クリア)します。 030 * 031 * データベースリソースを使用している場合は、キャッシュをクリアすることで、再度 032 * 読み込みなおしますので、データベースの値を変更した後には、クリアが必要です。 033 * 034 * クリアする対象は、connection,resource,gui,query,calendar があります。 035 * all という キーワードは、下記のすべてのリソースキャッシュをクリアします。 036 * <table border="1" frame="box" rules="all" > 037 * <caption>初期化(クリア)対象のキーワード</caption> 038 * <tr><th>対象 </th><th>説明</th></tr> 039 * <tr><td>connection </td><td>コネクションプーリングのコネクションを開放します。</td></tr> 040 * <tr><td>resource </td><td>ユーザー、システムを除くリソースキャッシュをクリアします。</td></tr> 041 * <tr><td>gui </td><td>GUI情報のキャッシュをクリアします。</td></tr> 042 * <tr><td>calendar </td><td>事業所カレンダを含むカレンダオブジェクトキャッシュをクリアします。</td></tr> 043 * </table> 044 * 045 * @og.formSample 046 * ●形式:<og:engine connectionClear="[true|false]" ・・・ /> 047 * ●body:なし 048 * 049 * ●Tag定義: 050 * <og:engine 051 * allClear 【TAG】すべてのキャッシュデータをクリアします(初期値:false) 052 * connectionClear 【TAG】データベースコネクションプールのコネクションを削除(開放)します(初期値:false) 053 * resourceClear 【TAG】リソースデータをクリアします(初期値:false) 054 * guiClear 【TAG】GUI情報のキャッシュをクリアします(初期値:false) 055 * userClear 【TAG】User情報のパラメータデータをクリアします(初期値:false) 056 * calendarClear 【TAG】カレンダオブジェクトのキャッシュをクリアします(初期値:false) 057 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 058 * /> 059 * 060 * ●使用例 061 * <og:engine 062 * connectionClear = "true" 初期値:false 063 * resourceClear = "true" 初期値:false 064 * guiClear = "true" 初期値:false 065 * userClear = "true" 初期値:false 066 * calendarClear = "true" 初期値:false 067 * /> 068 * 069 * <og:engine 070 * allClear = "true" 071 * /> 072 * 073 * @og.rev 3.6.0.0 (2004/09/17) 新規作成 074 * @og.group ログイン制御 075 * 076 * @version 4.0 077 * @author Kazuhiko Hasegawa 078 * @since JDK5.0, 079 */ 080public class EngineTag extends CommonTagSupport { 081 /** このプログラムのVERSION文字列を設定します。 {@value} */ 082 private static final String VERSION = "6.4.2.0 (2016/01/29)" ; 083 private static final long serialVersionUID = 642020160129L ; 084 085 private static final Object LOCK = new Object(); // 6.4.1.1 (2016/01/16) lock → LOCK refactoring 086 087 private boolean allClear ; 088 private boolean connectionClear ; 089 private boolean resourceClear ; 090 private boolean guiClear ; 091 private boolean userClear ; 092 private boolean calendarClear ; 093 094 /** 095 * デフォルトコンストラクター 096 * 097 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 098 */ 099 public EngineTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 100 101 /** 102 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 103 * 104 * @return 後続処理の指示 105 */ 106 @Override 107 public int doEndTag() { 108 debugPrint(); // 4.0.0 (2005/02/28) 109 final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ); 110 111 synchronized( LOCK ) { 112 if( connectionClear ) { 113 ConnectionFactory.realClose(); 114 buf.append( "Connection Factory Real Closed" ).append( BR ); 115 System.out.println( "Connection Factory Real Closed" ); 116 } 117 118 if( calendarClear ) { 119 CalendarFactory.clear(); // 3.6.0.0 (2004/09/17) 120 buf.append( "Calendar Factory Cleared" ).append( BR ); 121 System.out.println( "Calendar Factory Cleared" ); 122 } 123 124 if( guiClear ) { 125 ResourceFactory.guiClear(); 126 final UserInfo userInfo = getUser(); 127 userInfo.clear(); 128 getResource().makeGUIInfos( userInfo ); 129 buf.append( "GUIInfo Data Cleared" ).append( BR ); 130 System.out.println( "GUIInfo Data Cleared" ); 131 } 132 133 if( userClear ) { 134 final UserInfo userInfo = getUser(); 135 userInfo.clear(); 136 buf.append( "UserInfo Parameter Data Cleared" ).append( BR ); 137 System.out.println( "UserInfo Parameter Data Cleared" ); 138 } 139 140 if( resourceClear ) { 141 ResourceFactory.clear(); 142 SelectionFactory.clear(); // 4.0.0 (2006/11/17) 143 buf.append( "Resource Factory Cleared" ).append( BR ); 144 System.out.println( "Resource Factory Cleared" ); 145 } 146 } 147 148 return EVAL_PAGE ; 149 } 150 151 /** 152 * タグリブオブジェクトをリリースします。 153 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 154 * 155 */ 156 @Override 157 protected void release2() { 158 super.release2(); 159 allClear = false; 160 connectionClear = false; 161 resourceClear = false; 162 guiClear = false; 163 userClear = false; 164 calendarClear = false; 165 } 166 167 /** 168 * 【TAG】すべてのキャッシュデータをクリアします(初期値:false)。 169 * 170 * @og.tag 171 * connectionClear,resourceClear,guiClear,calendarClearの 172 * すべてを、true に設定することと同じです。 173 * 174 * @param flag キャッシュクリア [true:すべて/false:個別] 175 */ 176 public void setAllClear( final String flag ) { 177 allClear = nval( getRequestParameter( flag ),allClear ); 178 179 connectionClear = connectionClear || allClear ; 180 resourceClear = resourceClear || allClear ; 181 guiClear = guiClear || allClear ; 182 userClear = userClear || allClear ; 183 calendarClear = calendarClear || allClear ; 184 } 185 186 /** 187 * 【TAG】データベースコネクションプールのコネクションを削除(開放)します(初期値:false)。 188 * 189 * @og.tag データベース操作がおかしい場合は、クリアしてみてください。 190 * 191 * @param flag コネクション削除可否 [true:する/false:しない] 192 */ 193 public void setConnectionClear( final String flag ) { 194 connectionClear = nval( getRequestParameter( flag ),connectionClear ); 195 } 196 197 /** 198 * 【TAG】リソースデータをクリアします(初期値:false)。 199 * 200 * @og.tag 201 * ユーザーリソースとシステムリソースを除くリソースキャッシュ 202 * データをクリアします。 203 * 204 * @param flag リソースデータのクリア可否 [true:する/false:しない] 205 */ 206 public void setResourceClear( final String flag ) { 207 resourceClear = nval( getRequestParameter( flag ),resourceClear ); 208 } 209 210 /** 211 * 【TAG】User情報のパラメータデータをクリアします(初期値:false)。 212 * 213 * @og.tag 214 * User情報のパラメータデータ(GE16から読み込み)に追加/更新/削除が発生したときは、 215 * キャッシュをクリアする必要があります。 216 * User情報のパラメータデータは、{@USER.XXXX}でアクセスできる値ではなく、 217 * システムパラメータ {@SYS.XXXX}としてアクセスできるユーザー個別情報のことです。 218 * 219 * @param flag パラメータデータのクリア可否 [true:する/false:しない] 220 */ 221 public void setUserClear( final String flag ) { 222 userClear = nval( getRequestParameter( flag ),userClear ); 223 } 224 225 /** 226 * 【TAG】GUI情報のキャッシュをクリアします(初期値:false)。 227 * 228 * @og.tag 229 * GUI情報の追加/更新/削除が発生したときは、キャッシュをクリアする必要があります。 230 * 231 * @param flag GUI情報キャッシュのクリア可否 [true:する/false:しない] 232 */ 233 public void setGuiClear( final String flag ) { 234 guiClear = nval( getRequestParameter( flag ),guiClear ); 235 } 236 237 /** 238 * 【TAG】カレンダオブジェクトのキャッシュをクリアします(初期値:false)。 239 * 240 * @og.tag 241 * カレンダオブジェクトは、事業所カレンダ(例:GE13)毎にオブジェクトを 242 * 作成します。キャッシュに持っているため、データベースを更新するたびに、 243 * キャッシュをクリアしなおす必要があります。 244 * 245 * @param flag カレンダのキャッシュのクリア可否 [true:する/false:しない] 246 */ 247 public void setCalendarClear( final String flag ) { 248 calendarClear = nval( getRequestParameter( flag ),calendarClear ); 249 } 250 251 /** 252 * このオブジェクトの文字列表現を返します。 253 * 基本的にデバッグ目的に使用します。 254 * 255 * @return このクラスの文字列表現 256 * @og.rtnNotNull 257 */ 258 @Override 259 public String toString() { 260 return ToString.title( this.getClass().getName() ) 261 .println( "VERSION" ,VERSION ) 262 .println( "allClear" ,allClear ) 263 .println( "connectionClear" ,connectionClear) 264 .println( "resourceClear" ,resourceClear ) 265 .println( "guiClear" ,guiClear ) 266 .println( "userClear" ,userClear ) 267 .println( "calendarClear" ,calendarClear ) 268 .println( "Other..." ,getAttributes().getAttribute() ) 269 .fixForm().toString() ; 270 } 271}