18.7.5 JDBC2.0拡張機能を使用したデータベース接続の設定
JDBC2.0拡張機能で提供するJNDI連携機能を使用した,データベースへ接続する操作について説明します。この機能はアプリケーションサーバのJ2EEサーバモード,DB Connectorを使用する場合は,アプリケーションで設定する必要はありません。
- 〈この項の構成〉
(1) DataSourceオブジェクトの生成
接続情報の設定は,DataSourceオブジェクトで実行します。
DataSourceオブジェクトの生成で必要な,ドライバ拡張機能のパッケージ名称およびDataSourceクラス名称を次に示します。
|
指定項目 |
指定値 |
|---|---|
|
パッケージ名称 |
JP.co.Hitachi.soft.DBPSV_Driver |
|
DataSourceクラス名称 |
JdbcDbpsvDataSource |
DataSourceオブジェクトの生成例を次に示します。
JP.co.Hitachi.soft.DBPSV_Driver.JdbcDbpsvDataSource ds = null ; ds = new JP.co.Hitachi.soft.DBPSV_Driver.JdbcDbpsvDataSource() ;
(2) データベースに接続するための各種情報の設定
データベースに接続するための各種情報は,JDBC2.0拡張機能で提供するメソッドで設定します。提供するメソッドを次の表に示します。
|
メソッド |
機能 |
|---|---|
|
setNetworkProtocol |
DABrokerとの接続種別を設定します。 |
|
setServerName |
接続するDABrokerのホスト名を設定します。 |
|
setPortNumber |
接続するDABrokerのポート番号を設定します。 |
|
setDatabaseName |
接続するデータベースの種別を設定します。 |
|
setDescription |
接続するデータベースに必要な接続付加情報を設定します。 |
|
setDBHostName |
接続するHiRDBのホスト名を設定します。 |
|
setDBEnv |
DABrokerの接続先データベース定義情報を設定します。 |
|
setEncodLang |
エンコード文字形態を設定します。 |
|
setJDBC_IF_TRC |
JDBCインタフェースメソッドトレースの取得の有無を設定します。 |
|
setSV_EVENT_TRC |
DABrokerとのイベントトレースの取得の有無を設定します。 |
|
setTRC_NO |
トレースのエントリ数を設定します。 |
|
setUapName |
アプリケーション名称を設定します。 |
|
setBufSize |
DABrokerからの受信データのバッファ長を設定します。 |
|
setUser |
データベース接続のユーザIDを設定します。 |
|
setPassword |
データベース接続のパスワードを設定します。 |
|
setXAOpenString※ |
XA_OPEN文字列を設定します。 |
|
setXACloseString※ |
XA_CLOSE文字列を設定します。 |
|
setRMID※ |
リソースマネージャの識別子を設定します。 |
|
setXAThreadMode※ |
XA使用時のスレッドモードを設定します。 |
|
setXALocalCommitMode※ |
XA使用時,データベースのオートコミットを有効にするかどうかを設定します。 |
|
setRowSize |
JDBCで取り扱うバッファ長を指定します。 |
|
setOSAuthorize |
OS認証機能を使用してデータベースに接続するかどうかを設定します。 |
|
setSQLWarningIgnore |
データベースから返される警告をConnectionクラスで保持するかどうかの情報を設定します。 |
|
setHiRDBCursorMode |
接続データベースがHiRDBの場合,検索時にカーソルが複数のCommitにわたって有効かどうかを設定します。 |
|
setNotErrorOccurred |
connectionErrorOccurredが呼ばれるかどうかを設定します。 |
|
setBlockUpdate |
接続データベースがHiRDBの場合,?パラメタを使用したデータベースの更新で,複数のパラメタセットを一度に処理するかどうかを設定します。 |
|
setExecuteDirectMode |
接続データベースがHiRDBの場合,Statementクラスを使用したデータベースの更新でHiRDBのExecute Direct機能を使用するかどうかを設定します。 |
|
setLONGVARBINARY_Access |
HiRDBでLONGVARBINARY(列属性BLOB,列属性BINARY)へのアクセス方法を設定します。 |
|
setBufferPoolSize |
DABrokerからの受信データのバッファプール数を設定します。 |
- 注※
-
JdbcDbpsvXADataSourceクラスでだけ提供するメソッドです。
JDBC2.0拡張機能では,接続情報を取得するためのメソッドも提供しています。接続情報を取得するためのメソッドを次の表に示します。
|
メソッド |
機能 |
|---|---|
|
getNetworkProtocol |
DABrokerとの接続種別を取得します。 |
|
getServerName |
接続するDABrokerのホスト名を取得します。 |
|
getPortNumber |
接続するDABrokerのポート番号を取得します。 |
|
getDatabaseName |
接続するデータベースの種別を取得します。 |
|
getDescription |
接続するデータベースに必要な接続付加情報を取得します。 |
|
getDBHostName |
接続するHiRDBのホスト名を取得します。 |
|
getDBEnv |
DABrokerの接続先データベース定義情報を取得します。 |
|
getEncodLang |
エンコード文字形態を取得します。 |
|
getJDBC_IF_TRC |
JDBCインタフェースメソッドトレースの取得の有無を取得します。 |
|
getSV_EVENT_TRC |
DABrokerとのイベントトレースの取得の有無を取得します。 |
|
getTRC_NO |
トレースのエントリ数を取得します。 |
|
getUapName |
アプリケーション名称を取得します。 |
|
getBufSize |
DABrokerからの受信データのバッファ長を取得します。 |
|
getUser |
データベース接続のユーザIDを取得します。 |
|
getPassword |
データベース接続のパスワードを取得します。 |
|
getXAOpenString※ |
XA_OPEN文字列を取得します。 |
|
getXACloseString※ |
XA_CLOSE文字列を取得します。 |
|
getRMID※ |
リソースマネージャの識別子を取得します。 |
|
getXAThreadMode※ |
XA使用時のスレッドモードを取得します。 |
|
getXALocalCommitMode※ |
XA使用時,データベースのオートコミットを有効にしているかどうかの設定を取得します。 |
|
getRowSize |
JDBCで取り扱うバッファ長を取得します。 |
|
getOSAuthorize |
OS認証機能を使用してデータベースに接続するかどうかの設定を取得します。 |
|
getSQLWarningIgnore |
データベースから返される警告をConnectionクラスで保持するかどうかの情報を取得します。 |
|
getHiRDBCursorMode |
接続データベースがHiRDBの場合,検索時にカーソルが複数のCommit,またはRollbackにわたって有効かどうかの設定を取得します。 |
|
getNotErrorOccurred |
connectionErrorOccurredが呼ばれるかどうかの設定を取得します。 |
|
getBlockUpdate |
接続データベースがHiRDBの場合,?パラメタを使用したデータベースの更新で,複数のパラメタセットを一度に処理するかどうかの設定を取得します。 |
|
getExecuteDirectMode |
接続データベースがHiRDBの場合,Statementクラスを使用したデータベースの更新でHiRDBのExecute Direct機能を使用するかどうかの設定を取得します。 |
|
getLONGVARBINARY_Access |
HiRDBでLONGVARBINARY(列属性BLOB,列属性BINARY)へのアクセス方法を取得します。 |
|
getBufferPoolSize |
DABrokerからの受信データのバッファプール数を取得します。 |
- 注※
-
JdbcDbpsvXADataSourceクラスでだけ提供するメソッドです。
各メソッドの機能および文法については,マニュアル「アプリケーションサーバ リファレンス API編」を参照してください。
(3) JNDIへの情報の登録
接続情報を設定したDataSourceオブジェクトを,JNDIに登録します。JNDIは実行環境によって,幾つかのサービスプロバイダを選択できます。
File Systemサービスプロバイダを使用するJNDIへの登録例を次に示します。ほかのサービスプロバイダへの登録については,JNDIのドキュメントを参照してください。なお,JNDIに登録するときの論理名称は,"jdbc"というサブコンテキスト(登録例ではjdbc/TestDataSource)の下に登録するようにしてください。
// JDBC2.0拡張機能が提供するDataSourceオブジェクトを生成する
JP.co.Hitachi.soft.DBPSV_Driver.JdbcDbpsvDataSource ds;
ds = new JP.co.Hitachi.soft.DBPSV_Driver.JdbcDbpsvDataSource();
// 接続情報を設定する
:
// システムプロパティを取得する
Properties sys_prop = System.getProperties();
// File Systemサービスプロバイダのプロパティを設定する
sys_prop.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
// File Systemサービスプロバイダで使用するディレクトリを設定する
// (この場合,c:\JNDI_DIRの下に登録される)
sys_prop.put(Context.PROVIDER_URL, "file:c:"+File.separator + "JNDI_DIR");
//システムプロパティを更新する
System.setProperties(sys_prop);
// JNDIを初期化する
Context ctx = new InitialContext();
// JDBC2.0拡張機能が提供するDataSourceオブジェクトを,
// jdbc/TestDataSourceという論理名称でJNDIに登録する
ctx.bind("jdbc" + File.separator + "TestDataSource", ds);
:
(4) JNDIからの情報の取得
データベースに接続するときに,JNDIに登録したDataSourceオブジェクトを取得します。
File Systemサービスプロバイダを使用するJNDIから,DataSourceオブジェクトを取得する例を次に示します。ほかのサービスプロバイダから取得する方法については,JNDIのドキュメントを参照してください。
// システムプロパティを取得する
Properties sys_prop = System.getProperties();
// File Systemサービスプロバイダのプロパティを設定する
sys_prop.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
// File Systemサービスプロバイダで使用するディレクトリを設定する
// (この場合,c:\JNDI_DIRの下に登録されている)
sys_prop.put(Context.PROVIDER_URL, "file:c:"+File.separator + "JNDI_DIR");
// システムプロパティを更新する
System.setProperties(sys_prop);
// JNDIを初期化する
Context ctx = new InitialContext();
//jdbc/TestDataSourceという論理名称のオブジェクトをJNDIから取得する
Object obj = ctx.lookup("jdbc" + File.separator + "TestDataSource");
// 取り出したオブジェクトを,DataSourceクラスの型にキャストする
DataSource ds = (DataSource)obj;
:
(5) データベースへの接続
JNDIに登録したDataSourceオブジェクトを取得後,DataSourceオブジェクトに対し,getConnectionメソッドを呼び出して,データベースへ接続します。
getConnectionメソッドの呼び出し例を次に示します。
DataSource ds
// JNDIからDataSourceオブジェクトを取得する
:
// getConnectionメソッドを呼び出す
Connection con = ds.getConnection("USERID","PASSWORD")※- 注※
-
getConnectionメソッドの引数(ユーザID,パスワード)は省略できます。引数を指定した場合は,DataSourceオブジェクトに設定した接続情報よりも優先されます。
必要な接続情報がDataSourceオブジェクトに設定されていない場合,接続情報の内容が不正な場合,データベースとの接続に失敗した場合は,getConnectionメソッドはSQLExceptionをthrowします。
JNDIからDataSourceオブジェクトを取得したあと,接続情報を設定し直すことができます。設定し直す場合は,DataSourceオブジェクトをJDBC2.0拡張機能が提供するDataSourceクラスの型にキャストします。キャストする例を次に示します。
DataSource ds JP.co.Hitachi.soft.DBPSV_Driver.JdbcDbpsvDataSource dbp_ds; // JNDIからDataSourceオブジェクトを取得する : // DataSourceオブジェクトを,JDBC拡張機能が提供する // DataSourceクラスの型にキャストする dbp_ds = (JP.co.Hitachi.soft.DBPSV_Driver.JdbcDbpsvDataSource)ds; // 接続情報を再設定する :
(6) JDBC2.0拡張機能で提供する機能のトレースを取得するための情報の指定
JDBC2.0拡張機能では,次のトレースを取得できます。トレースの出力内容については,マニュアル「アプリケーションサーバ 機能解説 保守/移行編」の「7. 性能解析トレースを使用した性能解析」を参照してください。
-
JDBCインタフェースメソッドトレース
-
DABrokerとのイベントトレース
(a) トレースの取得
トレースを取得する場合は,次の項目を設定してください。次の項目が設定されていない場合は,トレースを取得できません。
-
JdbcDbpsvDataSource,JdbcDbpsvConnectionPoolDataSourceまたはJdbcDbpsvXADataSourceクラスのsetLogWriterメソッドでの有効なログストリームの指定
-
setJDBC_IF_TRC,setSV_EVENT_TRCおよびsetTRC_NOメソッドで,トレース取得の指定
(b) トレース取得時の注意事項
setLogWriterメソッドで指定したログストリームは,JNDIには登録されません。トレースの取得は,JNDIからDataSourceオブジェクトを取得するたびに,setLogWriterメソッドで指定してください。