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 */
016 package org.opengion.fukurou.db;
017
018 import org.opengion.fukurou.util.AbstractObjectPool;
019 import org.opengion.fukurou.util.ApplicationInfo;
020 import org.opengion.fukurou.util.Closer;
021
022 import java.util.Map;
023 import java.util.HashMap;
024 import java.util.Locale;
025 import java.util.Properties;
026 import java.sql.Connection;
027 import java.sql.SQLException;
028 import java.sql.DriverManager;
029 import java.sql.DatabaseMetaData;
030
031 /**
032 * ??タベ?スのコネクションオブジェクトを取得する為に使用する?ファクトリクラスです?
033 *
034 * Connection.connection() メソ?で?Connectionオブジェクトを取得します?
035 * Connection#close() メソ?で??部? ConnectionFactory にオブジェクトを戻?
036 * 事によって,Connectionオブジェクト?プ?リングを行なって?す?
037 *
038 * コネクションオブジェクト???ールから貸し?します?
039 * つまり,貸し?し中には,プ?ルには?オブジェクト?残って?せん?
040 * そ?状態で,コネクションオブジェクトをclose()しな??合?,オブジェクトが破?れて,
041 * 貸し?し中カウントと実際のオブジェクト数が食い違い,リソースが不足します?
042 * ?,作?したオブジェクト?,close()メソ?を呼び出して,プ?ルに返して下さ??
043 *
044 * シス?リソースの USE_DB_APPLICATION_INFO=true の場合?コネクションにアプリケーション
045 * ??を追記するため?ApplicationInfoオブジェクトを使用します?
046 * こ?オブジェクト?、jsp/common/session-init.jsp にてユーザー??とアプリケーション
047 * ??を画面アクセスごとに設定します?
048 *
049 * @og.group ??/Shell制御
050 * @og.rev 4.0.0.0 (2007/10/16) パッケージ移?hayabusa/db > fukurou/db)
051 *
052 * @version 4.0
053 * @author Kazuhiko Hasegawa
054 * @since JDK5.0,
055 */
056 public final class ConnectionFactory {
057 private static final Map<String,ConnectionPool> map = new HashMap<String,ConnectionPool>();
058
059 // 4.0.0.0 (2007/10/10) キャ?ュされた?初期ConnectionPool を使用
060 // 4.0.0.0 (2007/10/29) 初期値をここでセ?する
061 private static String DBID = "DEFAULT";
062 private static ConnectionPool DEF_POOL ;
063
064 // 4.0.0.0 (2007/10/17) シス?依存?改行記号をセ?します?
065 private static final String CR = System.getProperty( "line.separator" );
066
067 // 4.0.0.0 (2007/10/25) hayabusa依存を?ために追?ま?
068 private static final int BUFFER_MIDDLE = 200;
069
070 private static DatabaseConfig dbc;
071
072 /**
073 * ?ォルトコンストラクターをprivateにして?
074 * オブジェクト?生?をさせな??する?
075 *
076 */
077 private ConnectionFactory() {
078 }
079
080 /**
081 * 初期化メソ?です?<BR/>
082 *
083 * ??第二引数にXMLファイルをクラスロー?底から?相対パスで?した?合?<BR/>
084 * ??そ?XMLを利用してDBConfigオブジェクトを作?します?例:ConnectionFactory.init( CONTEXT_NAME, "../DBConfig.xml")<BR/>
085 * ??nullの場合?WEB-INF/DBConfig.xmlを利用します?例:ConnectionFactory.init( CONTEXT_NAME, null)<BR/>
086 * ??キャ?ュ初期ConnectionPoolのキーを設定してキャ?ュプ?ルを作ります?<BR/>
087 * ??こ?値がnullの場合?"DEFAULT"が設定されます?
088 * <BR/>
089 * <strong>こ?クラスを利用する場合????にこ?メソ?を実行する?があります?</strong><BR/>
090 * キャ?ュとDBConfigオブジェクト?同期化?されて???で初期化以外での利用は避けて下さ??<BR/>
091 *
092 * @og.rev 4.0.0.0 (2007/11/05) 新規作?
093 *
094 * @param defPoolKey 初期DBID?nullの場合??DEFAULT")
095 * @param xmlFileName DBConfig.xmlファイルのファイル?nullの場合?、WEB-INF/DBConfig.xml)
096 */
097 public static void init( final String defPoolKey, final String xmlFileName ) {
098 // DBConfigオブジェクト?作?
099 if( xmlFileName == null || xmlFileName.length() == 0 ) {
100 dbc = new DatabaseConfig();
101 }
102 else {
103 dbc = new DatabaseConfig( xmlFileName );
104 }
105
106 if( defPoolKey == null || defPoolKey.length() == 0 || dbc.getDbid( defPoolKey ) == null ) {
107 DBID = "DEFAULT";
108 }
109 else {
110 DBID = defPoolKey;
111 }
112 EDbid edbid = dbc.getDbid( DBID );
113 if( edbid == null ) {
114 final String errMsg = "初期化時に、指定?DBIDキーが存在しません?
115 + "[Key ="
116 + DBID
117 + "]";
118 throw new RuntimeException( errMsg );
119 }
120
121 DEF_POOL = new ConnectionPool( edbid );
122 }
123
124 /**
125 * コネクションオブジェクトを取得します?
126 * ?初期化を行な?により,実際に?となるまでコネクションオブジェクト?
127 * 作?しません?
128 * ?プ?ル数に達して,なおかつ,すべてのConnectionが貸し?し中の場?
129 *
130 * @og.rev 2.1.1.3 (2002/11/22) コネクションID ?null の場合に DEFAULT から?するよ?変更?
131 * @og.rev 3.1.0.0 (2003/03/20) Hashtable を使用して??で?同期でも構わな??を?HashMap に置換え?
132 * @og.rev 3.5.6.2 (2004/07/05) ??の連結にStringBuilderを使用します?
133 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
134 * @og.rev 3.8.8.2 (2007/01/26) USE_DB_APPLICATION_INFO ?pool.useApplicationInfo() 変更
135 * @og.rev 4.0.0.0 (2007/10/10) キャ?ュされた?初期ConnectionPool を使用
136 * @og.rev 4.1.0.1 (2008/01/21) 登録時に、大?に変換する?
137 *
138 * @param dbid 接続?ID
139 * @param appInfo アプリ??オブジェク?
140 *
141 * @return コネクションオブジェク?
142 */
143 public static Connection connection( final String dbid , final ApplicationInfo appInfo ) {
144 ConnectionPool pool ;
145 if( dbid == null || dbid.length() == 0 || DBID.equalsIgnoreCase( dbid ) ) {
146 pool = DEF_POOL ;
147 }
148 else {
149 String udbid = dbid.toUpperCase( Locale.JAPAN ); // 大?化
150 synchronized( map ) {
151 pool = map.get( udbid );
152 // 接続IDが?map に存在しな???
153 if( pool == null ) {
154 EDbid edbid = dbc.getDbid( udbid );
155 if( edbid == null ) {
156 final String errMsg = "??DBIDキーが存在しません?
157 + "[Key ="
158 + udbid
159 + "]";
160 throw new RuntimeException( errMsg );
161 }
162 pool = new ConnectionPool( edbid );
163 map.put( udbid,pool );
164 }
165 }
166 }
167
168 Connection conn = pool.newInstance();
169
170 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを使用
171 // 3.8.8.2 (2007/01/26) ORACLE 以外?、使用しません?
172 // 4.0.0.0 (2007/11/29) 入れ子if の統?
173 if( appInfo != null && pool.useApplicationInfo() ) {
174 appInfo.callAppInfo( conn );
175 }
176 return conn;
177 }
178
179 /**
180 * コネクションオブジェクトをプ?ルに戻します?
181 * Connectionオブジェクト?,close()メソ?で,自??身?ConnectionFactory の
182 * プ?ルに戻します?
183 * それ以外? コネクションオブジェクトをプ?ルに戻す?合?,こ?メソ?を使用します?
184 *
185 * @og.rev 2.1.1.3 (2002/11/22) コネクションID ?null の場合に DEFAULT から?するよ?変更?
186 * @og.rev 4.0.0.0 (2007/10/10) キャ?ュされた?初期ConnectionPool を使用
187 * @og.rev 4.1.0.1 (2008/01/21) 登録時に、大?に変換する?
188 *
189 * @param conn コネクションオブジェク?
190 * @param dbid 接続?ID
191 */
192 public static void close( final Connection conn,final String dbid ) {
193 if( conn != null ) {
194 if( dbid == null || dbid.length() == 0 || DBID.equalsIgnoreCase( dbid ) ) {
195 DEF_POOL.release( conn ) ;
196 }
197 else {
198 String udbid = dbid.toUpperCase( Locale.JAPAN ); // 大?化
199 synchronized( map ) {
200 ConnectionPool pool = map.get( udbid );
201 if( pool != null ) {
202 pool.release( conn );
203 }
204 }
205 }
206 }
207 }
208
209 /**
210 * コネクションオブジェクトを物?に削除(クローズ)戻します?
211 * これは、コネクション等がエラーを起こした?合に、?ールに戻す?ではなく?
212 * 接続を閉じる?合に、使用されます?
213 *
214 * @og.rev 2.1.1.3 (2002/11/22) コネクションID ?null の場合に DEFAULT から?するよ?変更?
215 * @og.rev 4.0.0.0 (2007/10/10) キャ?ュされた?初期ConnectionPool を使用
216 * @og.rev 4.1.0.1 (2008/01/21) 登録時に、大?に変換する?
217 *
218 * @param conn コネクションオブジェク?
219 * @param dbid 接続?ID
220 */
221 public static void remove( final Connection conn,final String dbid ) {
222 if( conn != null ) {
223 if( dbid == null || dbid.length() == 0 || DBID.equalsIgnoreCase( dbid ) ) {
224 DEF_POOL.remove( conn ) ;
225 }
226 else {
227 String udbid = dbid.toUpperCase( Locale.JAPAN ); // 大?化
228 synchronized( map ) {
229 ConnectionPool pool = map.get( udbid );
230 if( pool != null ) {
231 pool.remove( conn );
232 // map.put( udbid,pool );
233 }
234 }
235 }
236 }
237 }
238
239 /**
240 * コネクションオブジェクトを実際にすべてクローズします?
241 * コネクションプ?ルの再編成や?管??による強制クローズに使用します?
242 *
243 * クローズに失?コネクションが貸し?し中)の場合?,??
244 * DB_CLOSE_RETRY_TIME ??して, DB_CLOSE_RETRY_COUNT 回数?,試行します?
245 * それでもクローズできな??合?, RuntimeException ?throw します?
246 *
247 * @og.rev 4.0.0.0 (2005/01/31) ロジ?見直し? pool.clear() で、基本?はすべて削除されます?
248 * @og.rev 4.0.0.0 (2007/10/10) キャ?ュされた?初期ConnectionPool を使用
249 */
250 public static void realClose() {
251 synchronized( DEF_POOL ) {
252 if( ! DEF_POOL.isEmpty() ) {
253 DEF_POOL.clear();
254 }
255 }
256
257 final ConnectionPool[] pools ;
258 synchronized( map ) {
259 if( map.isEmpty() ) { return; }
260
261 pools = map.values().toArray( new ConnectionPool[map.size()] ) ;
262 map.clear();
263 }
264
265 ConnectionPool pool ;
266 for( int i=0; i<pools.length ; i++ ) {
267 pool = pools[i];
268 if( pool != null && ! pool.isEmpty() ) {
269 pool.clear();
270 }
271 }
272 }
273
274 /**
275 * ConnectionFactory の現在の状?詳細メ?ージ)を返します?
276 * これは?コネクションプ?ルの数(?値?作?済み数など)を確認する為のも?です?
277 *
278 * @og.rev 4.0.0.0 (2007/10/10) キャ?ュされた?初期ConnectionPool を使用
279 *
280 * @return 現在の状態表示
281 */
282 public static String information() {
283 return information( true );
284 }
285
286 /**
287 * ConnectionFactory の現在の状況を返します?
288 * これは?コネクションプ?ルの数(?値?作?済み数など)を確認する為のも?です?
289 * 引数により詳細メ?ージかど?を指定できます?
290 *
291 * @og.rev 4.0.0.0 (2007/10/10) キャ?ュされた?初期ConnectionPool を使用
292 * @og.rev 5.3.4.0 (2011/04/01) 詳細メ?ージ用引数を追?
293 * @og.rev 5.6.7.3 (2013/08/23) 若干の修正
294 *
295 * @param isDetail 詳細メ?ージかど? [true:詳細メ?ージ/false:簡易メ?ージ]
296 *
297 * @return 現在の状態表示
298 */
299 public static String information(final boolean isDetail ) {
300 // 4.0.0.0 (2007/10/25) hybsとの依存関係を弱めるため?
301 final StringBuilder strBuf = new StringBuilder( BUFFER_MIDDLE );
302
303 // strBuf.append( "Connection Information :" ).append( CR );
304 strBuf.append( "<b>【Connection Information?/b>" ).append( CR ); // 5.6.7.3 (2013/08/23) 若干の修正
305
306 int rtnCnt = 0;
307 synchronized( DEF_POOL ) {
308 if( ! DEF_POOL.isEmpty() ) {
309 rtnCnt += DEF_POOL.size();
310 // 5.3.4.0 (2011/04/01) 詳細メ?ージ用引数を追?
311 if( isDetail ) {
312 strBuf.append( DEF_POOL.toString() );
313 strBuf.append( "<br /><hr />" );
314 }
315 else {
316 strBuf.append( DEF_POOL.dbidInfo() );
317 }
318 }
319 }
320
321 ConnectionPool[] pools = null;
322 synchronized( map ) {
323 if( !map.isEmpty() ) {
324 pools = map.values().toArray( new ConnectionPool[map.size()] ) ;
325 }
326 }
327
328 if( pools != null ) {
329 for( int i=0; i<pools.length ; i++ ) {
330 ConnectionPool pool = pools[i];
331 if( pool != null && ! pool.isEmpty() ) {
332 rtnCnt += pool.size();
333 // 5.3.4.0 (2011/04/01) 詳細メ?ージ用引数を追?
334 if( isDetail ) {
335 strBuf.append( pool.toString() );
336 strBuf.append( "<br /><hr />" );
337 }
338 else {
339 strBuf.append( pool.dbidInfo() );
340 }
341 }
342 }
343 }
344
345 strBuf.append( CR );
346
347 return strBuf.toString();
348 }
349
350 /**
351 * こ?接続が、PreparedStatement#getParameterMetaData() を使用するかど?を判定します?
352 *
353 * PreparedStatement に対して、String化された 数字など?setObject( int,String ) するとき?
354 * ORACLE と SQLServer は、そのまま設定すれ?、?動的に変換されます?
355 * postgreSQL では、ParameterMetaData#getParameterType(int) で、カラ?イプを取得し?
356 * setObject( int,String,int ) する?があります?
357 * そ?判定に、このメソ?を使用します?
358 * こ?結果は、あくまで、各種??タベ?ス毎?実地調査の結果を?に、判定結果?
359 * 返すようにして?す?
360 * ORACLE の場合?、使用しな?false)が返るように設定して?す?
361 * SQLServer では、ORACLEと同様に、false を返します?
362 *
363 * こ?メソ?は、???ApplicationInfo#useParameterMetaData(Connection) に有ったもの?
364 * EDbid から取得するよ?修正したも?です?
365 *
366 * @og.rev 5.3.8.0 (2011/08/01) 新規追?
367 *
368 * @param dbid 接続?ID
369 *
370 * @return [true:使用する/false:そ?他]
371 */
372 public static boolean useParameterMetaData( final String dbid ) {
373 final String udbid ;
374 if( dbid == null || dbid.length() == 0 ) {
375 udbid = DBID ;
376 }
377 else {
378 udbid = dbid.toUpperCase( Locale.JAPAN ); // 大?化
379 }
380
381 EDbid edbid = dbc.getDbid( udbid );
382
383 return edbid.useParamMetaData();
384 }
385
386 /**
387 * 接続?のDB名に対応した?enum (DBName) を返しま?toUpperCase)?
388 *
389 * @og.rev 5.1.4.0 (2010/03/01) getDBFullName の代わりに新規作?
390 *
391 * @param dbid 接続?ID
392 *
393 * @return 接続?のDB?
394 */
395 public static String getDBName( final String dbid ) {
396 final String dbName;
397
398 if( dbid == null || dbid.length() == 0 || DBID.equalsIgnoreCase( dbid ) ) {
399 dbName = DEF_POOL.getDBName();
400 }
401 else {
402 String udbid = dbid.toUpperCase( Locale.JAPAN ); // 大?化
403 ConnectionPool pool = null;
404 synchronized( map ) {
405 pool = map.get( udbid );
406 if( pool == null ) {
407 close( connection( dbid, null ), dbid );
408 }
409 }
410 if( pool != null ) {
411 dbName = pool.getDBName();
412 }
413 else {
414 final String errMsg = "??DBIDキーに対応するデータベ?ス名を取得?来ません?
415 + "[Key =" + dbid + "]";
416 throw new RuntimeException( errMsg );
417 }
418 }
419
420 return dbName.toUpperCase( Locale.JAPAN );
421 }
422
423 /**
424 * 接続?のDB名を返します?
425 *
426 * @og.rev 4.3.7.0 (2009/06/01) 新規作?
427 * @og.rev 5.1.4.0 (2010/03/01) ?
428 *
429 * @param dbid 接続?ID
430 *
431 * @return 接続?のDB?バ?ジョン
432 */
433 // public static String getDBFullName( final String dbid ) {
434 // String dbName = null;
435 //
436 // if( dbid == null || dbid.length() == 0 || DBID.equalsIgnoreCase( dbid ) ) {
437 // dbName = DEF_POOL.getDBName() + " " + DEF_POOL.getDBVersion();
438 // }
439 // else {
440 // String udbid = dbid.toUpperCase( Locale.JAPAN ); // 大?化
441 // ConnectionPool pool = null;
442 // synchronized( map ) {
443 // pool = map.get( udbid );
444 // if( pool == null ) {
445 // close( connection( dbid, null ), dbid );
446 // }
447 // }
448 // if( pool != null ) {
449 // dbName = pool.getDBName() + " " + pool.getDBVersion();
450 // }
451 // }
452 // return dbName;
453 // }
454 }
455
456 /**
457 * ConnectionPool は、AbstractObjectPool を継承した オブジェクト?ールです?
458 *
459 * コネクションオブジェクトをプ?ルすることにより、ConnectionFactory で
460 * 管??Map オブジェクト?実?として、各ID毎? コネクションをキープします?
461 *
462 * @og.group ??/Shell制御
463 *
464 * @version 4.0
465 * @author Kazuhiko Hasegawa
466 * @since JDK5.0,
467 */
468 class ConnectionPool extends AbstractObjectPool<Connection> {
469 private final transient EDbid edbid;
470
471 // 4.0.0.0 (2007/10/17) シス?依存?改行記号をセ?します?
472 private static final String CR = System.getProperty( "line.separator" );
473
474 /**
475 * DBID を指定して作?する コンストラクター
476 * DBID をキーに? HybsSystem.sys メソ?の??タベ?ス変数を取得します?
477 * 取得する?は? DBID + _DB_URL?_DB_USER?_DB_PASSWD?_DB_MINCOUNT?_DB_MAXCOUNT
478 * です?
479 * DBID ?null の場合???DEFAULT" が使用されます?
480 *
481 * @og.rev 3.5.4.3 (2004/01/05) キャ?ュの寿命を指?
482 * @og.rev 3.5.4.7 (2004/02/06) DBID のゼロストリングチェ?追?
483 * @og.rev 4.0.0.0 (2007/10/10) キャ?ュされた?初期ConnectionPool を使用
484 * @og.rev 4.0.0.0 (2007/10/25) DB設定情報のXML化に伴?更
485 *
486 * @param edbid 接続???オブジェク?
487 */
488 public ConnectionPool( final EDbid edbid ) {
489 // 4.0.0.0 XML化に伴?ード?を変更
490 this.edbid = edbid;
491 init( edbid.getMincount(),edbid.getMaxcount(),true,edbid.getPooltime() );
492 }
493
494 /**
495 * オブジェクト?ールから削除するときに呼ばれます?
496 * こ?メソ?で?ブジェクトごとの終???行います?
497 * 例えば???タベ?スコネクションであれば?close() 処?どです?
498 *
499 * @og.rev 3.5.4.8 (2004/02/23) SQLException は無視します?
500 * @og.rev 3.5.6.0 (2004/06/18) synchronized を解除します?
501 *
502 * @param obj 終???行うオブジェク?
503 */
504 protected void objectFinal( final Connection obj ) {
505 Closer.connClose( obj );
506 }
507
508 /**
509 * コネクションオブジェクトを作?します?
510 * DriverManager.getConnection により作?されたConnection ?Connection で
511 * ラ?ングします?
512 * Connectionオブジェクト?,close()メソ?で,自??身?ConnectionFactory の
513 * プ?ルに戻します?
514 *
515 * @og.rev 3.3.3.3 (2003/08/06) コネクションに対して、setTransactionIsolation を?設定しておく?
516 * @og.rev 3.5.2.0 (2003/10/20) 接続情報に、データベ?ス名?ドライバ名??を追?る?
517 * @og.rev 3.5.6.0 (2004/06/18) synchronized を解除します?
518 * @og.rev 3.8.8.2 (2007/01/26) useAppInfo を設定します?
519 * @og.rev 4.0.0.0 (2007/10/30) 保持??オブジェクト化に伴?更
520 * @og.rev 5.1.2.0 (2010/01/01) MySQL対?明示?、TRANSACTION_READ_COMMITTED を指定する?
521 * @og.rev 5.5.2.0 (2012/05/01) properties対?
522 *
523 * @return コネクションオブジェク?
524 */
525 protected Connection createInstance() {
526 Connection conn = null;
527 try {
528 // DriverManager.setLogWriter( HybsSystem.out ); // ドライバ?のログ
529
530 // 5.5.2.0 (2012/05/01) propertyの追???、接続?properties?
531 Properties prop = new Properties (edbid.getProps());
532 prop.put ( "user", edbid.getUser() );
533 prop.put ( "password", edbid.getPassword() );
534
535 // conn = DriverManager.getConnection( edbid.getUrl(), edbid.getUser(), edbid.getPassword() );
536 conn = DriverManager.getConnection( edbid.getUrl(), prop );
537 // conn.setReadOnly( true );
538 conn.setReadOnly( edbid.isReadonly() );
539
540 conn.setAutoCommit( false );
541 conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); // 初期値
542 // ((OracleConnection)conn).setDefaultExecuteBatch(1); // 初期値
543 // ((OracleConnection)conn).setDefaultRowPrefetch(20); // 初期値
544
545 // 3.5.2.0 (2003/10/20) 接続情報に、データベ?ス名?ドライバ名??を追?る?
546 // 4.0.0.0 (2007/10/26) 登録先をオブジェクト化
547 if( edbid.getDbProductName() == null ) {
548 DatabaseMetaData meta = conn.getMetaData();
549 edbid.setMetaDataInfo( meta );
550 }
551 return conn ;
552 }
553 catch ( SQLException ex ) {
554 String errMsg = "コネクトすることが?来ません? + CR
555 + "DBID=[" + edbid.getDbidKey() + "]" + CR
556 + ex.getMessage() + " , status=" + ex.getSQLState();
557 Closer.connClose( conn );
558 throw new RuntimeException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並び?更
559 }
560 }
561
562 /**
563 * アクセスログ取得?為のDBMS_APPLICATION_INFOの使用可否を取得しま?初期値:true)?
564 *
565 * ??タベ?スへのアクセスログ取得?為、エンジンで接続するコネクションにつ?
566 * DBMS_APPLICATION_INFO.SET_CLIENT_INFO と SET_MODULE を呼び出して?す?
567 * こ?処??、ORACLEとの接続?み有効です?で、接続???タベ?ス?ORACLE 以外?
568 * false を返します?
569 * ORACLE の場合?、シス?リソースの USE_DB_APPLICATION_INFO 属?の設定??
570 * 返します?
571 * こ?設定?の初期値は、true です?
572 *
573 * @og.rev 3.8.8.2 (2007/01/26) 新規追?
574 *
575 * @return true:使用する/false:使用しな?
576 */
577 public boolean useApplicationInfo() { return edbid.isApplicationInfo(); }
578
579 /**
580 * 接続?のDB名を返します?
581 *
582 * @og.rev 4.3.7.0 (2009/06/01) 新規作?
583 *
584 * @return 接続?のDB?
585 */
586 public String getDBName() {
587 return edbid.getDbProductName();
588 }
589
590 /**
591 * 接続?のDBバ?ジョンを返します?
592 *
593 * @og.rev 4.3.7.0 (2009/06/01) 新規作?
594 *
595 * @return 接続?のDBバ?ジョン
596 */
597 public String getDBVersion() {
598 return edbid.getDbProductVersion();
599 }
600
601 /**
602 * 接続?の簡易な???を返します?
603 *
604 * @og.rev 5.3.4.0 (2011/04/01) toString() の簡易版
605 *
606 * @return 接続?の簡易な???
607 */
608 public String dbidInfo() {
609 return edbid.info();
610 }
611
612 /**
613 * ?状況を簡易的に表現した??を返します?
614 * DBID?URL?USER??ールサイズ を返します?
615 *
616 * @og.rev 3.5.2.0 (2003/10/20) 接続情報に、データベ?ス名?ドライバ名??を追?る?
617 * @og.rev 3.5.6.6 (2004/08/23) 同期化方法を統?る為、synchronized をつけます?(別?要検?
618 * @og.rev 4.0.0.0 (2007/10/29) EDbidのtoStringを呼ぶように変更
619 *
620 * @return こ?オブジェクト?ールの??表現
621 */
622 public String toString() {
623 StringBuilder buf = new StringBuilder();
624 buf.append( edbid.toString() );
625 buf.append( super.toString() );
626 return buf.toString();
627 }
628 }