パッケージ org.opengion.fukurou.db

## クラス ConnectionFactory

- java.lang.Object
- - org.opengion.fukurou.db.ConnectionFactory

-     public final class ConnectionFactory
      extends Object

  データベースのコネクションオブジェクトを取得する為に使用する，ファクトリクラスです。 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)
  機能分類
    ＤＢ/Shell制御
  バージョン
    4.0
  作成者
    Kazuhiko Hasegawa
  導入されたバージョン:
    JDK5.0,

- - ### メソッドの概要

    すべてのメソッド staticメソッド concreteメソッド
    修飾子とタイプ | メソッド | 説明
    --- | --- | ---
    `static void` | `close​(Connection conn, String dbid)` | コネクションオブジェクトをプールに戻します。
    `static Connection` | `connection​(String dbid, ApplicationInfo appInfo)` | コネクションオブジェクトを取得します。
    `static String` | `getDBName​(String dbid)` | 接続先のDB名に対応した、enum (DBName) を返します(toUpperCase)。
    `static String` | `information()` | ConnectionFactory の現在の状況(詳細メッセージ)を返します。
    `static String` | `information​(boolean isDetail)` | ConnectionFactory の現在の状況を返します。
    `static void` | `init​(String defPoolKey, String xmlFileName)` | 初期化メソッドです。
    `static void` | `realClose()` | コネクションオブジェクトを実際にすべてクローズします。
    `static void` | `remove​(Connection conn, String dbid)` | コネクションオブジェクトを物理的に削除(クローズ)戻します。
    `static boolean` | `useParameterMetaData​(String dbid)` | この接続が、PreparedStatement#getParameterMetaData() を使用するかどうかを判定します。

    - ### クラスから継承されたメソッド java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### メソッドの詳細

    - #### init

          public static void init​(String defPoolKey,
                                  String xmlFileName)

      初期化メソッドです。

           １)第二引数にXMLファイルをクラスローダ基底からの相対パスで指定した場合は
           　　そのXMLを利用してDBConfigオブジェクトを作成します。例：ConnectionFactory.init( CONTEXT_NAME, "../DBConfig.xml")
           　　nullの場合はWEB-INF/DBConfig.xmlを利用します。例：ConnectionFactory.init( CONTEXT_NAME, null)
           ２)キャッシュ初期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

          public static Connection connection​(String dbid,
                                              ApplicationInfo appInfo)

      コネクションオブジェクトを取得します。 遅い初期化を行なう事により,実際に必要となるまでコネクションオブジェクトは 作成しません。 最大プール数に達して,なおかつ,すべてのConnectionが貸し出し中の場合,
      パラメータ:
        `dbid` - 接続先ID
        `appInfo` - アプリ情報オブジェクト
      戻り値:
        コネクションオブジェクト
      変更履歴:
        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

          public static void close​(Connection conn,
                                   String dbid)

      コネクションオブジェクトをプールに戻します。 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

          public static void remove​(Connection conn,
                                    String dbid)

      コネクションオブジェクトを物理的に削除(クローズ)戻します。 これは、コネクション等がエラーを起こした場合に、プールに戻すのではなく、 接続を閉じる場合に、使用されます。
      パラメータ:
        `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

          public static void 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

          public static String information()

      ConnectionFactory の現在の状況(詳細メッセージ)を返します。 これは，コネクションプールの数(最大値，作成済み数など)を確認する為のものです。
      戻り値:
        現在の状態表示
      変更履歴:
        4.0.0.0 (2007/10/10) キャッシュされた、初期ConnectionPool を使用
      このメソッドは、nullを返しません

    - #### information

          public static String information​(boolean isDetail)

      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

          public static boolean useParameterMetaData​(String dbid)

      この接続が、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

          public static String getDBName​(String dbid)

      接続先のDB名に対応した、enum (DBName) を返します(toUpperCase)。
      パラメータ:
        `dbid` - 接続先ID
      戻り値:
        接続先のDB名
      変更履歴:
        5.1.4.0 (2010/03/01) getDBFullName の代わりに新規作成, 5.7.7.2 (2014/06/20) 最初の取得時のエラー回避
      このメソッドは、nullを返しません