Hitachi

Hitachi Advanced Data Binder AP開発ガイド


7.3.2 DataSourceクラスのgetConnectionメソッドでHADBサーバに接続する方法

DataSourceとJNDIを使用したDB接続(HADBサーバへの接続)は,JDBC 2.0 Optional Packageで使用できるようになりました。

JNDIを必ず使用する必要はありませんが,JNDIを使用することで接続情報の設定が1回で済むというメリットがあります。DataSourceクラスのインタフェース定義,およびJNDIは,JDKに標準で含まれていないため,AP開発をする場合には,JavaSoftのWebサイトから入手する必要があります。

DataSourceとJNDIを使用したHADBサーバへの接続手順を次に示します。

手順
  1. DataSourceオブジェクトの生成

  2. 接続情報の設定

  3. JNDIへのDataSourceの登録

  4. JNDIからのDataSourceの取得

  5. HADBサーバへの接続

JNDIを使用しない場合は,3および4の操作をする必要はありません。

JNDIを使用する場合,1〜3の操作は1回だけ実行します。そのあと,4および5の操作をするだけで,HADBサーバに接続できます。また,4の操作のあと,必要に応じて接続情報を変更できます。

〈この項の構成〉

(1) DataSourceオブジェクトの生成

JDBCドライバが提供する,DataSourceクラスのオブジェクトを生成します。

DataSourceクラスのオブジェクト生成で必要となる,JDBCドライバのDataSourceクラス名はAdbDataSourceとなります。

DataSourceクラスのオブジェクトの生成例を次に示します。

com.hitachi.hadb.jdbc.AdbDataSource  ds = null ;
ds = new com.hitachi.hadb.jdbc.AdbDataSource() ;

(2) 接続情報の設定

DataSourceオブジェクトに対して,接続情報設定用メソッドを呼び出し,接続情報の設定をします。接続情報取得用のメソッドも使用できるため,現在の接続情報の確認もできます。接続情報設定および取得メソッドについては,「10.5 接続情報設定および取得インタフェース」を参照してください。

(3) JNDIへのDataSourceの登録

DataSourceオブジェクトをJNDIに登録します。

JNDIは,その実行環境によって幾つかのサービスプロバイダを選択できます。

DataSourceオブジェクトのJNDIへの登録例を次に示します(Windowsの場合の例です)。なお,登録例では,サービスプロバイダの一つである,File Systemサービスプロバイダを使用しています。ほかのサービスプロバイダについては,JNDIのドキュメントを参照してください。

 // JDBCドライバが提供するDataSourceクラスのオブジェクトを生成する
 com.hitachi.hadb.jdbc.AdbDataSource  ds;
 ds = new com.hitachi.hadb.jdbc.AdbDataSource();
 
 // 接続情報を設定する
         :
 
 // システムプロパティを取得する
 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:\\" + "JNDI_DIR");
 
 // システムプロパティを更新する
 System.setProperties(sys_prop) ;
 
 // JNDIを初期化する
 Context ctx = new InitialContext();
 
 // JDBCドライバが提供するDataSourceクラスのオブジェクトを,
 // jdbc/TestDataSourceという論理名称でJNDIに登録する
 ctx.bind("jdbc" + "\\" + "TestDataSource", ds);
     :

なお,JDBC 2.0規格では,JNDIに登録する論理名称は,"jdbc"というサブコンテキスト下(登録例ではjdbc/TestDataSource)に登録するように推奨されています。

(4) JNDIからのDataSourceの取得

JNDIからDataSourceオブジェクトを取得します。

JNDIからのDataSourceオブジェクトの取得例を次に示します(Windowsの場合の例です)。なお,取得例では,サービスプロバイダの一つである,File Systemサービスプロバイダを使用しています。ほかのサービスプロバイダについては,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:\\" + "JNDI_DIR");
 
 // システムプロパティを更新する
 System.setProperties(sys_prop) ;
 
 // JNDIを初期化する
 Context ctx = new InitialContext();
 
 // jdbc/TestDataSourceという論理名称のオブジェクトをJNDIから取得する
 Object obj = ctx.lookup("jdbc" + "\\" + "TestDataSource") ;
 
 // 取り出したオブジェクトを,DataSourceクラスの型にキャストする
 DataSource ds = (DataSource)obj;
      :

(5) HADBサーバへの接続

DataSourceオブジェクトに対して,getConnectionメソッドを呼び出します。getConnectionメソッドの呼び出し例を次に示します。

 DataSource ds
 
 // JNDIからDataSourceオブジェクトを取得する
                      :
 
 // getConnectionメソッドを発行する
 Connection con = ds.getConnection();
   または
 Connection con = ds.getConnection("USERID", "PASSWORD");
注※

メソッドの引数(認可識別子,パスワード)は,DataSourceオブジェクトに設定した接続情報よりも優先されます。次に示す場合はSQLExceptionが投入されます。

  • 必要な接続情報がDataSourceオブジェクトに設定されていない場合

  • 接続情報の内容が不正な場合

  • HADBサーバとの接続に失敗した場合

JNDIからDataSourceオブジェクトを取得後,必要に応じて接続情報を再度設定できます。この場合,DataSourceオブジェクトを,JDBCドライバが提供するDataSourceクラスの型にキャストしてから設定する必要があります。例を次に示します。

 DataSource ds
 com.hitachi.hadb.jdbc.AdbDataSource  adb_ds;
 
 // JNDIからDataSourceオブジェクトを取得する
                      :
 
 // DataSourceオブジェクトを,JDBCドライバが提供する
 // DataSourceクラスの型にキャストする
 adb_ds = (com.hitachi.hadb.jdbc.AdbDataSource)ds;
 
 // 接続情報を再設定する
           :