パッケージ org.opengion.fukurou.db
クラス ConnectionFactory
java.lang.Object
org.opengion.fukurou.db.ConnectionFactory
データベースのコネクションオブジェクトを取得する為に使用するファクトリクラスです。
Connection.connection() メソッドで、Connectionオブジェクトを取得します。
Connection#close() メソッドで、内部的に ConnectionFactory にオブジェクトを戻す
事によって、Connectionオブジェクトのプーリングを行なっています。
コネクションオブジェクトは、プールから貸し出します。
つまり、貸し出し中には、プールには、オブジェクトは残っていません。
その状態で、コネクションオブジェクトをclose()しない場合は、オブジェクトが破棄されて、
貸し出し中カウントと実際のオブジェクト数が食い違い、リソースが不足します。
必ず、作成したオブジェクトは、close()メソッドを呼び出して、プールに返して下さい。
システムリソースの USE_DB_APPLICATION_INFO=true の場合、コネクションにアプリケーション
情報を追記するため、ApplicationInfoオブジェクトを使用します。
このオブジェクトは、jsp/common/session-init.jsp にてユーザー情報とアプリケーション
情報を画面アクセスごとに設定します。
- 変更履歴:
- 4.0.0.0 (2007/10/16) パッケージ移動(hayabusa/db ⇒ fukurou/db)
- 機能分類
- DB/Shell制御
- 導入されたバージョン:
- JDK5.0,
-
メソッドの概要
修飾子とタイプメソッド説明static void
close
(Connection conn, String dbid) コネクションオブジェクトをプールに戻します。static Connection
connection
(String dbid, ApplicationInfo appInfo) コネクションオブジェクトを取得します。static String
接続先のDB名に対応した、enum (DBName) を返します(toUpperCase)。static String
ConnectionFactory の現在の状況(詳細メッセージ)を返します。static String
information
(boolean isDetail) ConnectionFactory の現在の状況を返します。static void
初期化メソッドです。static void
コネクションオブジェクトを実際にすべてクローズします。static void
remove
(Connection conn, String dbid) コネクションオブジェクトを物理的に削除(クローズ)戻します。static boolean
useParameterMetaData
(String dbid) この接続が、PreparedStatement#getParameterMetaData() を使用するかどうかを判定します。
-
メソッドの詳細
-
init
初期化メソッドです。1)第二引数にXMLファイルをクラスローダ基底からの相対パスで指定した場合は そのXMLを利用してDBConfigオブジェクトを作成します。例:ConnectionFactory.init( CONTEXT_NAME, "../DBConfig.xml") nullの場合はWEB-INF/DBConfig.xmlを利用します。例:ConnectionFactory.init( CONTEXT_NAME, null) 2)キャッシュ初期ConnectionPoolのキーを設定してキャッシュプールを作ります。 この値がnullの場合は"DEFAULT"が設定されます。
このクラスを利用する場合は必ず最初にこのメソッドを実行する必要があります。 キャッシュとDBConfigオブジェクトの同期化はされていないので初期化以外での利用は避けて下さい。- パラメータ:
defPoolKey
- 初期DBID名(nullの場合は、"DEFAULT")xmlFileName
- DBConfig.xmlファイルのファイル名(nullの場合は、WEB-INF/DBConfig.xml)- 変更履歴:
- 4.0.0.0 (2007/11/05) 新規作成, 6.4.3.3 (2016/03/04) DatabaseConfig のコンストラクター修正で、引数の nullチェックは不要。, 7.1.0.0 (2020/01/20) #ConnectionPool(DatabaseConfig,String) に統一
-
connection
コネクションオブジェクトを取得します。 遅い初期化を行なう事により、実際に必要となるまでコネクションオブジェクトは 作成しません。 最大プール数に達して、なおかつ、すべてのConnectionが貸し出し中の場合- パラメータ:
dbid
- 接続先IDappInfo
- アプリ情報オブジェクト- 戻り値:
- コネクションオブジェクト
- 変更履歴:
- 2.1.1.3 (2002/11/22) コネクションID が null の場合に DEFAULT から所得するように変更。, 3.1.0.0 (2003/03/20) Hashtable を使用している箇所で、非同期でも構わない箇所を、HashMap に置換え。, 3.5.6.2 (2004/07/05) 文字列の連結にStringBuilderを使用します。, 3.8.7.0 (2006/12/15) アクセスログ取得の為、ApplicationInfoオブジェクトを設定, 3.8.8.2 (2007/01/26) USE_DB_APPLICATION_INFO ⇒ pool.useApplicationInfo() 変更, 4.0.0.0 (2007/10/10) キャッシュされた、初期ConnectionPool を使用, 4.1.0.1 (2008/01/21) 登録時に、大文字に変換する。, 6.4.3.3 (2016/03/04) Map#computeIfAbsent で対応する。
-
close
コネクションオブジェクトをプールに戻します。 Connectionオブジェクトは、close()メソッドで、自分自身を ConnectionFactory の プールに戻します。 それ以外のコネクションオブジェクトをプールに戻す場合は、このメソッドを使用します。- パラメータ:
conn
- コネクションオブジェクトdbid
- 接続先ID- 変更履歴:
- 2.1.1.3 (2002/11/22) コネクションID が null の場合に DEFAULT から所得するように変更。, 4.0.0.0 (2007/10/10) キャッシュされた、初期ConnectionPool を使用, 4.1.0.1 (2008/01/21) 登録時に、大文字に変換する。, 5.9.32.0 (2018/05/18) プールに戻す前に明示的にcommitをかける
-
remove
コネクションオブジェクトを物理的に削除(クローズ)戻します。 これは、コネクション等がエラーを起こした場合に、プールに戻すのではなく、 接続を閉じる場合に、使用されます。- パラメータ:
conn
- コネクションオブジェクトdbid
- 接続先ID- 変更履歴:
- 2.1.1.3 (2002/11/22) コネクションID が null の場合に DEFAULT から所得するように変更。, 4.0.0.0 (2007/10/10) キャッシュされた、初期ConnectionPool を使用, 4.1.0.1 (2008/01/21) 登録時に、大文字に変換する。
-
realClose
コネクションオブジェクトを実際にすべてクローズします。 コネクションプールの再編成や、管理者による強制クローズに使用します。 クローズに失敗(コネクションが貸し出し中)の場合は、内部的に DB_CLOSE_RETRY_TIME だけ待機して、DB_CLOSE_RETRY_COUNT 回数だけ試行します。 それでもクローズできない場合は、RuntimeException を throw します。- 変更履歴:
- 4.0.0.0 (2005/01/31) ロジック見直し。 pool.clear() で、基本的にはすべて削除されます。, 4.0.0.0 (2007/10/10) キャッシュされた、初期ConnectionPool を使用, 6.4.3.3 (2016/03/04) Map#forEach で対応する。
-
information
ConnectionFactory の現在の状況(詳細メッセージ)を返します。 これは、コネクションプールの数(最大値,作成済み数など)を確認する為のものです。- 戻り値:
- 現在の状態表示
- 変更履歴:
- 4.0.0.0 (2007/10/10) キャッシュされた、初期ConnectionPool を使用
- このメソッドは、nullを返しません
-
information
ConnectionFactory の現在の状況を返します。 これは、コネクションプールの数(最大値,作成済み数など)を確認する為のものです。 引数により詳細メッセージかどうかを指定できます。- パラメータ:
isDetail
- 詳細メッセージかどうか [true:詳細メッセージ/false:簡易メッセージ]- 戻り値:
- 現在の状態表示
- 変更履歴:
- 4.0.0.0 (2007/10/10) キャッシュされた、初期ConnectionPool を使用, 5.3.4.0 (2011/04/01) 詳細メッセージ用引数を追加, 5.6.7.3 (2013/08/23) 若干の修正, 6.4.3.3 (2016/03/04) Map#forEach で対応する。, 7.0.1.0 (2018/10/15) XHTML → HTML5 対応(空要素の、"/>" 止めを、">" に変更します)。, 7.1.0.0 (2020/01/20) DB未接続のDBIDは表示から除外します。
- このメソッドは、nullを返しません
-
useParameterMetaData
この接続が、PreparedStatement#getParameterMetaData() を使用するかどうかを判定します。 PreparedStatement に対して、String化された 数字などを setObject( int,String ) するとき、 ORACLE と SQLServer は、そのまま設定すれば、自動的に変換されます。 postgreSQL では、ParameterMetaData#getParameterType(int) で、カラムタイプを取得し、 setObject( int,String,int ) する必要があります。 その判定に、このメソッドを使用します。 この結果は、あくまで、各種データベース毎の実地調査の結果を元に、判定結果を 返すようにしています。 ORACLE の場合は、使用しない(false)が返るように設定しています。 SQLServer では、ORACLEと同様に、false を返します。 このメソッドは、元々、ApplicationInfo#useParameterMetaData(Connection) に有ったものを EDbid から取得するように修正したものです。- パラメータ:
dbid
- 接続先ID- 戻り値:
- [true:使用する/false:その他]
- 変更履歴:
- 5.3.8.0 (2011/08/01) 新規追加, 6.4.3.3 (2016/03/04) EDbid のnullチェックを追加
-
getDBName
接続先のDB名に対応した、enum (DBName) を返します(toUpperCase)。- パラメータ:
dbid
- 接続先ID- 戻り値:
- 接続先のDB名
- 変更履歴:
- 5.1.4.0 (2010/03/01) getDBFullName の代わりに新規作成, 5.7.7.2 (2014/06/20) 最初の取得時のエラー回避
- このメソッドは、nullを返しません
-