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