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