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.resource; 017 018import org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.fukurou.db.ApplicationInfo; 020import org.opengion.fukurou.db.DBUtil; 021// import org.opengion.hayabusa.db.DBColumnConfig; // 7.0.7.0 (2019/12/13) 022// import org.opengion.fukurou.util.StringUtil; // 7.2.6.0 (2020/06/30) 023 024import java.util.Map; 025import java.util.WeakHashMap; 026import java.util.Collections ; 027 028/** 029 * systemId に対応したカラムデータを作成するデータロードクラスです。 030 * 031 * カラムデータは、項目(CLM)に対して、各種カラム情報を持っています。 032 * エンジン内部で使用している DBColumn オブジェクトは、RENDERER や EDITOR など 033 * 実際にはオブジェクトで管理していますが、この ColumnData では、それらのキーとなる 034 * 文字列を持っています。実際に DBColumn オブジェクトの構築時に、各属性オブジェクトを 035 * 生成(または、キャッシュから取り出し)ます。 036 * 037 * カラムデータを作成する場合は、同一カラムで、作成区分(KBSAKU)違いの場合は、 038 * 最も大きな作成区分を持つコードを使用します。 039 * 作成区分(KBSAKU)='0' のデータは、マスタリソースとして、エンジンとともに 040 * 配布されるリソースになります。 041 * 042 * カラムデータには、3つのレベルのオブジェクト作成方法が適用されます。 043 * エンジン内部のカラムリソースファイル(org.opengion.hayabusa.common.data.ColumnResource)は、 044 * 初期作成されるカラムリソースです。エンジンの更新に対応して、このリソースも同時に 045 * 更新されます。このカラムは、最も優先順位の低いリソースで、同一キー情報で他の形式の 046 * カラムがあれば、そちらが使用されます。 047 * 048 * 読込フラグ(FGLOAD)='1'のカラムリソースは、すべて初期起動時に一括読み込みされます。 049 * 読込フラグが、'1' 以外のデータは、初期起動時には、メモリにキャッシュされず 050 * 実際に使用されるまで、オブジェクトが作成されません。 051 * これは、使用されるかどうか判らないカラムデータを、予め作成しないことで、メモリの 052 * 節約を図っています。 053 * 054 * SYSTEM_ID='**' は、共通リソースです。 055 * これは、システム間で共通に使用されるリソース情報を登録しておきます。 056 * 057 * @og.rev 4.0.0.0 (2004/12/31) 新規作成 058 * @og.group リソース管理 059 * 060 * @version 4.0 061 * @author Kazuhiko Hasegawa 062 * @since JDK5.0, 063 */ 064final class ColumnDataLoader { 065 // リソースの接続先を、取得します。 066 private final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); 067 068 // DBリソースの初期一括読込のクエリー 069// private static final String QUERY = "select CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH," 070// + "RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM," 071// + "CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES" 072// + " from GEA03 where SYSTEM_ID in ( ?,'**')" 073// + " and FGJ='1' and FGLOAD = '1'" 074// + " order by SYSTEM_ID,CLM,KBSAKU" ; 075 076// // 4.3.5.7 (2009/03/22) FGLOADの影響で個別システムのリソースが読まれない問題の対応 077// // 6.2.0.0 (2015/02/27) フィールドサイズ(FIELD_SIZE) 追加 078// private static final String QUERY = "select CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH," 079// + "RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM," 080// + "CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES,'' AS FIELD_SIZE" // 6.4.9.5 (2016/09/09) javaDB対応 081// + ",FGLOAD" 082// + " from GEA03 where SYSTEM_ID in ( ?,'**')" 083// + " and FGJ='1'" 084// + " order by SYSTEM_ID,CLM,KBSAKU" ; 085 086// // 7.2.6.0 (2020/06/30) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応 087// private static final String QUERY = "select CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH," 088// + "RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM," 089// + "CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES" 090// + ",'' AS FIELD_SIZE,FGLOAD,UNIQ,SYSTEM_ID" 091// + ",1 as SNO,KBSAKU" 092// + " from GEA03 where SYSTEM_ID in ( ?,'**') and FGJ='1'" // RESOURCE_BASE_SYSTEM_ID 093// + " union all" 094// + " select CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH," 095// + "RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM," 096// + "CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES" 097// + ",'' AS FIELD_SIZE,FGLOAD,UNIQ,SYSTEM_ID" 098// + ",2 as SNO,KBSAKU" 099// + " from GEA03 where SYSTEM_ID = ? and FGJ='1'" // 従来のSYSTEM_ID 100// + " order by SNO,SYSTEM_ID,CLM,KBSAKU" ; 101 102// // 7.2.6.1 (2020/07/17) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応 103// private static final String QUERY = "select CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH," 104// + "RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM," 105// + "CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES" 106// + ",'' AS FIELD_SIZE,FGLOAD,UNIQ,SYSTEM_ID" 107// + ",SNO,KBSAKU" 108// + " from (" 109// + " select 0 as SNO,B.* from GEA03 B where SYSTEM_ID='**' and FGJ='1'" // エンジン共通 110// + " union all" 111// + " select 1 as SNO,B.* from GEA03 B where SYSTEM_ID=? and FGJ='1'" // RESOURCE_BASE_SYSTEM_ID 112// + " union all" 113// + " select 2 as SNO,B.* from GEA03 B where SYSTEM_ID=? and FGJ='1'" // 最上位ののSYSTEM_ID 114// + " ) A" 115// + " order by SNO,SYSTEM_ID,KBSAKU,CLM" ; 116 117// // 7.2.8.0 (2020/09/04) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応。SQL文手直し 118// private static final String QUERY = "select A.CLM,A.CLS_NAME,A.USE_LENGTH,A.VIEW_LENGTH" 119// + ",A.RENDERER,A.EDITOR,A.DBTYPE,A.DATA_DEFAULT,A.LABEL_CLM,A.CODE_CLM" 120// + ",A.CLM_PARAM,A.RENDERER_PARAM,A.EDITOR_PARAM,A.TYPE_PARAM,A.ROLES" 121// + ",'' AS FIELD_SIZE,A.FGLOAD,A.UNIQ,A.SYSTEM_ID" 122// + ",A.SNO,A.KBSAKU" 123// + " from (" 124// + " select 0 as SNO,B.* from GEA03 B where B.SYSTEM_ID='**'" // エンジン共通 125// + " union all" 126// + " select 1 as SNO,B.* from GEA03 B where B.SYSTEM_ID=?" // RESOURCE_BASE_SYSTEM_ID 127// + " union all" 128// + " select 2 as SNO,B.* from GEA03 B where B.SYSTEM_ID=?" // 最上位ののSYSTEM_ID 129// + " ) A" 130// + " where A.FGJ='1'" 131// + " order by A.SNO,A.KBSAKU,A.CLM" ; 132 133 // 7.3.1.3 (2021/03/09) 134 private static final String SEL_CLM = "select CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH" 135 + ",RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM" 136 + ",CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES" 137 + ",'' AS FIELD_SIZE,FGLOAD,UNIQ,SYSTEM_ID" 138 + ",KBSAKU" ; 139 140 // 7.3.1.3 (2021/03/09) 141 private static final String QUERY = SEL_CLM + ",0 as SNO" 142 + " from GEA03 where SYSTEM_ID='**' and FGJ='1'" // エンジン共通 143 + " union all " 144 + SEL_CLM + ",1 as SNO" 145 + " from GEA03 where SYSTEM_ID=? and FGJ='1'" // RESOURCE_BASE_SYSTEM_ID 146 + " union all " 147 + SEL_CLM + ",2 as SNO" 148 + " from GEA03 where SYSTEM_ID=? and FGJ='1'" // 最上位ののSYSTEM_ID 149 + " order by SNO,KBSAKU,CLM" ; 150 151// // DBリソースの個別読込時のクエリー 152// // 6.2.0.0 (2015/02/27) フィールドサイズ(FIELD_SIZE) 追加 153// // 6.3.1.1 (2015/07/10) FGLOAD,UNIQ 追加 154// private static final String QUERY2 = "select CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH," 155// + "RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM," 156// + "CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES,'' AS FIELD_SIZE" // 6.4.9.5 (2016/09/09) javaDB対応 157// + ",FGLOAD,UNIQ,SYSTEM_ID" // 6.3.1.1 (2015/07/10) 158// + " from GEA03 where SYSTEM_ID in ( ?,'**')" 159// + " and CLM=? and FGJ='1'" 160// + " order by SYSTEM_ID,KBSAKU" ; 161 162// // 7.2.6.0 (2020/06/30) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応 163// private static final String QUERY2 = "select CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH," 164// + "RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM," 165// + "CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES" // 6.4.9.5 (2016/09/09) javaDB対応 166// + ",'' AS FIELD_SIZE,FGLOAD,UNIQ,SYSTEM_ID" // 6.3.1.1 (2015/07/10) 167// + ",1 as SNO,KBSAKU" 168// + " from GEA03 where SYSTEM_ID in ( ?,'**') and CLM=? and FGJ='1'" // RESOURCE_BASE_SYSTEM_ID 169// + " union all" 170// + " select CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH," 171// + "RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM," 172// + "CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES" // 6.4.9.5 (2016/09/09) javaDB対応 173// + ",'' AS FIELD_SIZE,FGLOAD,UNIQ,SYSTEM_ID" // 6.3.1.1 (2015/07/10) 174// + ",2 as SNO,KBSAKU" 175// + " from GEA03 where SYSTEM_ID = ? and CLM=? and FGJ='1'" // 従来のSYSTEM_ID 176// + " order by SNO,SYSTEM_ID,KBSAKU" ; 177 178// // 7.2.6.0 (2020/06/30) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応 179// private static final String QUERY2 = "select CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH," 180// + "RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM," 181// + "CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES" // 6.4.9.5 (2016/09/09) javaDB対応 182// + ",'' AS FIELD_SIZE,FGLOAD,UNIQ,SYSTEM_ID" // 6.3.1.1 (2015/07/10) 183// + ",1 as SNO,KBSAKU" 184// + " from (" 185// + " select 0 as SNO,B.* from GEA03 B where SYSTEM_ID='**' and CLM=? and FGJ='1'" // エンジン共通 186// + " union all" 187// + " select 1 as SNO,B.* from GEA03 B where SYSTEM_ID=? and CLM=? and FGJ='1'" // RESOURCE_BASE_SYSTEM_ID 188// + " union all" 189// + " select 2 as SNO,B.* from GEA03 B where SYSTEM_ID=? and CLM=? and FGJ='1'" // 最上位ののSYSTEM_ID 190// + " ) A" 191// + " order by SNO,SYSTEM_ID,KBSAKU" ; 192 193// // 7.2.8.0 (2020/09/04) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応。SQL文手直し 194// private static final String QUERY2 = "select A.CLM,A.CLS_NAME,A.USE_LENGTH,A.VIEW_LENGTH," 195// + "A.RENDERER,A.EDITOR,A.DBTYPE,A.DATA_DEFAULT,A.LABEL_CLM,A.CODE_CLM" 196// + ",A.CLM_PARAM,A.RENDERER_PARAM,A.EDITOR_PARAM,A.TYPE_PARAM,A.ROLES" // 6.4.9.5 (2016/09/09) javaDB対応(null AS エラー) 197// + ",'' AS FIELD_SIZE,A.FGLOAD,A.UNIQ,A.SYSTEM_ID" // 6.3.1.1 (2015/07/10) 198// + ",A.SNO,A.KBSAKU" 199// + " from (" 200// + " select 0 as SNO,B.* from GEA03 B where B.SYSTEM_ID='**'" // エンジン共通 201// + " union all" 202// + " select 1 as SNO,B.* from GEA03 B where B.SYSTEM_ID=?" // RESOURCE_BASE_SYSTEM_ID 203// + " union all" 204// + " select 2 as SNO,B.* from GEA03 B where B.SYSTEM_ID=?" // 最上位ののSYSTEM_ID 205// + " ) A" 206// + " where A.CLM=? and A.FGJ='1'" 207// + " order by A.SNO,A.KBSAKU" ; 208 209 // 注意:CLMを unionする前に条件として入れたのでパラメータの順番が変わる。 210 // 7.3.1.3 (2021/03/09) 211 private static final String QUERY2 = SEL_CLM + ",0 as SNO" 212 + " from GEA03 where SYSTEM_ID='**' and CLM=? and FGJ='1'" // エンジン共通 213 + " union all " 214 + SEL_CLM + ",1 as SNO" 215 + " from GEA03 where SYSTEM_ID=? and CLM=? and FGJ='1'" // RESOURCE_BASE_SYSTEM_ID 216 + " union all " 217 + SEL_CLM + ",2 as SNO" 218 + " from GEA03 where SYSTEM_ID=? and CLM=? and FGJ='1'" // 最上位ののSYSTEM_ID 219 + " order by SNO,KBSAKU,CLM" ; 220 221 // 6.3.1.1 (2015/07/10) 読込フラグ(FGLOAD) のマーカー設定追加。 222 private static final boolean IS_FGLOAD_AUTOSET = HybsSystem.sysBool( "USE_FGLOAD_AUTOSET" ); // 6.4.1.1 (2016/01/16) useFgloadAutoset → IS_FGLOAD_AUTOSET refactoring 223 224 // 6.3.1.1 (2015/07/10) FGLOAD更新(UNIQ だけで指定可能だが、万一を想定して、SYSTEM_IDとCLMを条件に追記) 225 // 7.2.6.0 (2020/06/30) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応したため、where条件から、SYSTEM_ID は削除します。 226// private static final String UPDATE2 = "update GEA03 set FGLOAD='2' where UNIQ=? and SYSTEM_ID=? and CLM=?"; 227 private static final String UPDATE2 = "update GEA03 set FGLOAD='2' where UNIQ=? and CLM=?"; 228 229 /** 6.4.3.1 (2016/02/12) Collections.synchronizedMap で同期処理を行います。 */ 230 private final Map<String,ColumnData> columnMap = Collections.synchronizedMap( new WeakHashMap<>() ); // キャッシュ用プール 231 private final String SYSTEM_ID ; // システムID 232// private String BASE_SYS_ID = "**" ; // 7.2.6.0 (2020/06/30) ベースシステムID 233// private final String BASE_SYS_ID = StringUtil.nval( HybsSystem.sys( "RESOURCE_BASE_SYSTEM_ID", false ),"**" ) ; // 7.2.9.1 (2020/10/23) ベースシステムID 234 private final String BASE_SYS_ID ; // 7.2.9.2 (2020/10/30) ベースシステムID 235 236 /** コネクションにアプリケーション情報を追記するかどうか指定 */ 237 public static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ; 238 239 // 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 240 private final ApplicationInfo appInfo; 241 242 /** 243 * SystemId 毎に ファクトリオブジェクトを作成します。 244 * 245 * @og.rev 7.2.9.2 (2020/10/30) ベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)の取得 246 * 247 * @param systemId システムID 248 * @param baseSys ベースとなるSYSTEM_ID 249 * @param initLoad リソースデータの先読み可否(true:先読みする) 250 */ 251// ColumnDataLoader( final String systemId,final boolean initLoad ) { 252 ColumnDataLoader( final String systemId,final String baseSys,final boolean initLoad ) { 253 SYSTEM_ID = systemId; 254 BASE_SYS_ID = baseSys ; // 7.2.9.2 (2020/10/30) 255 256 // 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 257 if( USE_DB_APPLICATION_INFO ) { 258 appInfo = new ApplicationInfo(); 259 // ユーザーID,IPアドレス,ホスト名 260 appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME ); 261 // 画面ID,操作,プログラムID 262 appInfo.setModuleInfo( "ColumnDataLoader",null,null ); 263 } 264 else { 265 appInfo = null; 266 } 267 268 // ApplicationInfo の設定が終わってから実行します。 269 if( initLoad ) { loadDBResource(); } 270 } 271 272 /** 273 * DBリソースより カラムデータを取得、設定します。 274 * 同一キー(CLM)に対して、複数の作成区分(KBSAKU)を持つデータが 275 * 検索される場合は、作成区分(KBSAKU)の大きな値が使用されます。 276 * つまり、より、ローカライズなキーほど、作成区分(KBSAKU)に大きな値を 277 * 使用するようにします。 278 * 279 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 280 * @og.rev 4.3.5.7 (2009/03/22) FGLOADの影響でシステム個別リソースが読まれない問題対応 281 * @og.rev 7.0.7.0 (2019/12/13) 読み取り件数の評価を、破棄分も考慮する。 282 * @og.rev 7.2.6.0 (2020/06/30) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応 283 * 284 */ 285 private void loadDBResource() { 286// // 7.2.6.0 (2020/06/30) 287// final String baseSystemId = HybsSystem.sys( "RESOURCE_BASE_SYSTEM_ID", false ); 288// BASE_SYS_ID = StringUtil.isEmpty( baseSystemId ) ? "**" : baseSystemId; 289 290// final String[] args = new String[] { SYSTEM_ID }; 291 final String[] args = new String[] { BASE_SYS_ID,SYSTEM_ID }; // 7.2.6.1 (2020/07/17) 292 293 final String[][] vals = DBUtil.dbExecute( QUERY,args,appInfo,DBID ); 294 final int[] cnt = new int[3]; // **,BASE_SYS_ID,SYSTEM_ID の個数 295 296 final int len = vals.length; 297 for( int i=0; i<len; i++ ) { 298 final String clm = vals[i][0]; 299 final int idx = Integer.parseInt( vals[i][ColumnData.SNO] ); 300// final String sys = vals[i][ColumnData.SYSTEM_ID]; 301// final int idx = "**".equals( sys ) ? 0 : BASE_SYS_ID.equals( sys ) ? 1 : 2 ; 302 303 if( "1".equals( vals[i][ColumnData.FG_LOAD] ) ) { // 4.3.5.7 (2009/03/22) 1:一括読込 304 columnMap.put( clm,new ColumnData( vals[i] ) ); 305 cnt[idx]++ ; 306 } 307 // より上の作成区分で、FGLOAD='1'(一括読込)以外の場合は、破棄する。 308 // order by SYSTEM_ID,CLM,KBSAKU 309 else if( columnMap.get( clm ) != null ){ 310 columnMap.remove( clm ); 311 } 312 } 313 314 // 7.0.7.0 (2019/12/13) 読み取り件数の評価を、破棄分も考慮する。 315// System.out.println( " ColumnDataLoader [" + len + "] loaded" ); 316 System.out.println( " ColumnDataLoader [" + len + "] select [" + columnMap.size() + "] " 317 + " ** [" + cnt[0] + "] " + BASE_SYS_ID + " [" + cnt[1] + "] " + SYSTEM_ID + " [" + cnt[2] + "] loaded" ); 318 } 319 320 /** 321 * ColumnDataオブジェクトを取得します。 322 * 作成したColumnDataオブジェクトは,内部にプールしておき,同じリソース要求が 323 * あったときは,プールの ColumnDataを返します。 324 * 読込フラグ(FGLOAD)が '1' のデータは、起動時に先読みします。 325 * それ以外のデータは、ここでキー要求が発生した時点で読み込みます。 326 * 読込フラグ(FGLOAD) のマーカー設定モード(USE_FGLOAD_AUTOSET)を使用する(true)場合は、 327 * 追加読み込み(先読みされていないカラム)に対して、読込フラグ(FGLOAD)を 2:使用実績 に 328 * 設定します。(次回起動時の、初期読み込みは行いません。) 329 * 330 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 331 * @og.rev 6.3.1.1 (2015/07/10) 読込フラグ(FGLOAD) のマーカー設定追加。 332// * @og.rev 7.0.7.0 (2019/12/13) FG_LOADが、3:使用確認 , 8:未使用 の場合に使用されると、2:使用実績 をセットする。 7.0.7.2 元に戻す 333 * @og.rev 7.0.7.0 (2019/12/13) キーだけからリソース無しのColumnDataを作成します。 334 * @og.rev 7.0.7.2 (2019/12/28) リソース無しのキャッシュは行わない。(DBからSELECTした際、スキーマから自動で文字か数字を判定しているから) 335 * @og.rev 7.2.6.0 (2020/06/30) "**"以外にベースとなるSYSTEM_ID(RESOURCE_BASE_SYSTEM_ID)設定の対応 336 * @og.rev 7.3.1.3 (2021/03/09) QUERY文字列を変更。それに伴って、引数の並び順を変更。 337 * 338 * @param key カラムのキー 339 * 340 * @return ColumnDataオブジェクト 341 */ 342 public ColumnData getColumnData( final String key ) { 343 ColumnData column = columnMap.get( key ) ; 344 if( column == null ) { 345// final String[] args = new String[] { SYSTEM_ID,key }; 346// final String[] args = new String[] { key,BASE_SYS_ID,key,SYSTEM_ID,key }; // 7.2.6.1 (2020/07/17) 347// final String[] args = new String[] { BASE_SYS_ID,SYSTEM_ID,key }; // 7.2.8.0 (2020/09/04) 348 final String[] args = new String[] { key,BASE_SYS_ID,key,SYSTEM_ID,key }; // 7.3.1.3 (2021/03/09) 349 final String[][] vals = DBUtil.dbExecute( QUERY2,args,appInfo,DBID ); // SYSTEM_ID='**' も含む 350 if( vals.length > 0 ) { 351 final int row=vals.length-1; // 最後の検索結果 352 column = new ColumnData( vals[row] ); // 最後の検索結果が有効 353 columnMap.put( key,column ); 354 355 // 6.3.1.1 (2015/07/10) 読込フラグ(FGLOAD) のマーカー設定追加。 356 if( IS_FGLOAD_AUTOSET ) { 357 // 1:一括読込 と、2:使用実績 以外のリソースは、2:使用実績 をセットする。(SYSTEM_ID='**'は含まない) 358 final String fgld = vals[row][ColumnData.FG_LOAD]; 359 final String sysld = vals[row][ColumnData.SYSTEM_ID]; 360 if( !"1".equals( fgld ) && !"2".equals( fgld ) && !"**".equals( sysld ) ) { 361 // // 7.0.7.0 (2019/12/13) FG_LOADが、3:使用確認 , 8:未使用 の場合に使用されると、2:使用実績 をセットする。 362 // if( "3".equals( fgld ) || "8".equals( fgld ) ) { 363 // 7.2.6.0 (2020/06/30) RESOURCE_BASE_SYSTEM_ID 追加したため、where条件から、SYSTEM_ID は削除します。 364// final String[] args2 = new String[] { vals[row][ColumnData.UNIQ],SYSTEM_ID,key }; 365 final String[] args2 = new String[] { vals[row][ColumnData.UNIQ],key }; 366 DBUtil.dbExecute( UPDATE2,args2,appInfo,DBID ); // FGLOAD を、2:使用実績 にセット 367 } 368 } 369 } 370 371// // 372// // 7.0.7.0 (2019/12/13) キーだけからリソース無しのColumnDataを作成します。 373// else { 374// final DBColumnConfig config = new DBColumnConfig( key ); 375// column = config.getColumnData(); 376// columnMap.put( key,column ); 377// } 378 } 379 return column ; 380 } 381 382 /** 383 * ColumnData オブジェクトのキャッシュを個別にクリアします。 384 * リソースデータの更新など、一部分の更新時に、すべてのキャッシュを 385 * 破棄するのではなく、指定の分のみ破棄できる機能です。 386 * 387 * @og.rev 6.9.0.1 (2018/02/05) どのシステムIDのリソースがクリアされたかを表示します。 388 * 389 * @param key カラムのキー 390 */ 391 public void clear( final String key ) { 392 System.out.println( "SYSTEM_ID=[" + SYSTEM_ID + "] , Key=[" + key + "] の部分リソースクリアを実施しました。" ); 393 columnMap.remove( key ); 394 } 395 396 /** 397 * ColumnData オブジェクトのキャッシュをクリアします。 398 * 399 * @og.rev 6.9.0.1 (2018/02/05) どのシステムIDのリソースがクリアされたかを表示します。 400 * 401 */ 402 public void clear() { 403 System.out.println( "SYSTEM_ID=[" + SYSTEM_ID + "] の全リソースをクリアしました。" ); 404 columnMap.clear(); 405 } 406}