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.fukurou.db; 017 018import org.opengion.fukurou.util.AbstractObjectPool; 019import org.opengion.fukurou.util.ApplicationInfo; 020import org.opengion.fukurou.util.Closer; 021 022import java.util.Map; 023import java.util.HashMap; 024import java.util.Locale; 025import java.util.Properties; 026import java.sql.Connection; 027import java.sql.SQLException; 028import java.sql.DriverManager; 029import 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 DB/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 */ 056public 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 * 1)第二引数にXMLファイルをクラスローダ基底からの相対パスで指定した場合は 084 * そのXMLを利用してDBConfigオブジェクトを作成します。例:ConnectionFactory.init( CONTEXT_NAME, "../DBConfig.xml") 085 * nullの場合はWEB-INF/DBConfig.xmlを利用します。例:ConnectionFactory.init( CONTEXT_NAME, null) 086 * 2)キャッシュ初期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( "<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 * @og.rev 5.7.7.2 (2014/06/20) 最初の取得時のエラー回避 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 ); // 5.7.7.2 (2014/06/20) 最初の取得時のエラー回避 409 connection( dbid, null ); // ダミーで、コネクトする。 410 pool = map.get( udbid ); // もう一度、設定する。 411 } 412 } 413 if( pool != null ) { 414 dbName = pool.getDBName(); 415 } 416 else { 417 final String errMsg = "指定のDBIDキーに対応するデータベース名を取得出来ません。" 418 + "[Key =" + dbid + "]"; 419 throw new RuntimeException( errMsg ); 420 } 421 } 422 423 return dbName.toUpperCase( Locale.JAPAN ); 424 } 425} 426 427/** 428 * ConnectionPool は、AbstractObjectPool を継承した オブジェクトプールです。 429 * 430 * コネクションオブジェクトをプールすることにより、ConnectionFactory で 431 * 管理する Map オブジェクトの実態として、各ID毎の コネクションをキープします。 432 * 433 * @og.group DB/Shell制御 434 * 435 * @version 4.0 436 * @author Kazuhiko Hasegawa 437 * @since JDK5.0, 438 */ 439class ConnectionPool extends AbstractObjectPool<Connection> { 440 private final transient EDbid edbid; 441 442 // 4.0.0.0 (2007/10/17) システム依存の改行記号をセットします。 443 private static final String CR = System.getProperty( "line.separator" ); 444 445 /** 446 * DBID を指定して作成する コンストラクター 447 * DBID をキーに、 HybsSystem.sys メソッドのデータベース変数を取得します。 448 * 取得するのは、 DBID + _DB_URL/_DB_USER/_DB_PASSWD/_DB_MINCOUNT/_DB_MAXCOUNT 449 * です。 450 * DBID が null の場合は,"DEFAULT" が使用されます。 451 * 452 * @og.rev 3.5.4.3 (2004/01/05) キャッシュの寿命を指定 453 * @og.rev 3.5.4.7 (2004/02/06) DBID のゼロストリングチェック追加 454 * @og.rev 4.0.0.0 (2007/10/10) キャッシュされた、初期ConnectionPool を使用 455 * @og.rev 4.0.0.0 (2007/10/25) DB設定情報のXML化に伴う変更 456 * 457 * @param edbid 接続先情報オブジェクト 458 */ 459 public ConnectionPool( final EDbid edbid ) { 460 // 4.0.0.0 XML化に伴いロード先を変更 461 this.edbid = edbid; 462 init( edbid.getMincount(),edbid.getMaxcount(),true,edbid.getPooltime() ); 463 } 464 465 /** 466 * オブジェクトプールから削除するときに呼ばれます。 467 * このメソッドで各オブジェクトごとの終了処理を行います。 468 * 例えば、データベースコネクションであれば、close() 処理などです。 469 * 470 * @og.rev 3.5.4.8 (2004/02/23) SQLException は無視します。 471 * @og.rev 3.5.6.0 (2004/06/18) synchronized を解除します。 472 * 473 * @param obj 終了処理を行うオブジェクト 474 */ 475 protected void objectFinal( final Connection obj ) { 476 Closer.connClose( obj ); 477 } 478 479 /** 480 * コネクションオブジェクトを作成します。 481 * DriverManager.getConnection により作成されたConnection を Connection で 482 * ラッピングします。 483 * Connectionオブジェクトは,close()メソッドで,自分自身を ConnectionFactory の 484 * プールに戻します。 485 * 486 * @og.rev 3.3.3.3 (2003/08/06) コネクションに対して、setTransactionIsolation を、設定しておく。 487 * @og.rev 3.5.2.0 (2003/10/20) 接続情報に、データベース名、ドライバ名情報を追加する。 488 * @og.rev 3.5.6.0 (2004/06/18) synchronized を解除します。 489 * @og.rev 3.8.8.2 (2007/01/26) useAppInfo を設定します。 490 * @og.rev 4.0.0.0 (2007/10/30) 保持情報オブジェクト化に伴う変更 491 * @og.rev 5.1.2.0 (2010/01/01) MySQL対応 明示的に、TRANSACTION_READ_COMMITTED を指定する。 492 * @og.rev 5.5.2.0 (2012/05/01) properties対応 493 * 494 * @return コネクションオブジェクト 495 */ 496 protected Connection createInstance() { 497 Connection conn = null; 498 try { 499 // DriverManager.setLogWriter( HybsSystem.out ); // ドライバーのログ 500 501 // 5.5.2.0 (2012/05/01) propertyの追加処理と、接続のproperties化 502 Properties prop = new Properties (edbid.getProps()); 503 prop.put ( "user", edbid.getUser() ); 504 prop.put ( "password", edbid.getPassword() ); 505 506 conn = DriverManager.getConnection( edbid.getUrl(), prop ); 507 // conn.setReadOnly( true ); 508 conn.setReadOnly( edbid.isReadonly() ); 509 510 conn.setAutoCommit( false ); 511 conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); // 初期値 512 // ((OracleConnection)conn).setDefaultExecuteBatch(1); // 初期値 513 // ((OracleConnection)conn).setDefaultRowPrefetch(20); // 初期値 514 515 // 3.5.2.0 (2003/10/20) 接続情報に、データベース名、ドライバ名情報を追加する。 516 // 4.0.0.0 (2007/10/26) 登録先をオブジェクト化 517 if( edbid.getDbProductName() == null ) { 518 DatabaseMetaData meta = conn.getMetaData(); 519 edbid.setMetaDataInfo( meta ); 520 } 521 return conn ; 522 } 523 catch ( SQLException ex ) { 524 String errMsg = "コネクトすることが出来ません。" + CR 525 + "DBID=[" + edbid.getDbidKey() + "]" + CR 526 + ex.getMessage() + " , status=" + ex.getSQLState(); 527 Closer.connClose( conn ); 528 throw new RuntimeException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並び順変更 529 } 530 } 531 532 /** 533 * アクセスログ取得の為のDBMS_APPLICATION_INFOの使用可否を取得します(初期値:true)。 534 * 535 * データベースへのアクセスログ取得の為、エンジンで接続するコネクションについて 536 * DBMS_APPLICATION_INFO.SET_CLIENT_INFO と SET_MODULE を呼び出しています。 537 * この処理は、ORACLEとの接続のみ有効ですので、接続先データベースが ORACLE 以外は 538 * false を返します。 539 * ORACLE の場合は、システムリソースの USE_DB_APPLICATION_INFO 属性の設定値を 540 * 返します。 541 * この設定値の初期値は、true です。 542 * 543 * @og.rev 3.8.8.2 (2007/01/26) 新規追加 544 * 545 * @return true:使用する/false:使用しない 546 */ 547 public boolean useApplicationInfo() { return edbid.isApplicationInfo(); } 548 549 /** 550 * 接続先のDB名を返します。 551 * 552 * @og.rev 4.3.7.0 (2009/06/01) 新規作成 553 * 554 * @return 接続先のDB名 555 */ 556 public String getDBName() { 557 return edbid.getDbProductName(); 558 } 559 560 /** 561 * 接続先のDBバージョンを返します。 562 * 563 * @og.rev 4.3.7.0 (2009/06/01) 新規作成 564 * 565 * @return 接続先のDBバージョン 566 */ 567 public String getDBVersion() { 568 return edbid.getDbProductVersion(); 569 } 570 571 /** 572 * 接続先の簡易な内部情報を返します。 573 * 574 * @og.rev 5.3.4.0 (2011/04/01) toString() の簡易版 575 * 576 * @return 接続先の簡易な内部情報 577 */ 578 public String dbidInfo() { 579 return edbid.info(); 580 } 581 582 /** 583 * 内部状況を簡易的に表現した文字列を返します。 584 * DBID/URL/USER/プールサイズ を返します。 585 * 586 * @og.rev 3.5.2.0 (2003/10/20) 接続情報に、データベース名、ドライバ名情報を追加する。 587 * @og.rev 3.5.6.6 (2004/08/23) 同期化方法を統一する為、synchronized をつけます。(別途 要検討) 588 * @og.rev 4.0.0.0 (2007/10/29) EDbidのtoStringを呼ぶように変更 589 * 590 * @return このオブジェクトプールの文字列表現 591 */ 592 @Override 593 public String toString() { 594 StringBuilder buf = new StringBuilder(); 595 buf.append( edbid.toString() ); 596 buf.append( super.toString() ); 597 return buf.toString(); 598 } 599}