|
接続文字列はベンダー固有であるため、Sun は DataSource インターフェイス仕様を作成しました。これは、Java レジストリとして機能する JNDI を利用します。DataSource インターフェイスにより、JDBC 開発者は名前付きデータベースを作成することができます。開発者は、JNDI にデータベース名とベンダー固有のドライバー情報を登録します。そうすると、JDBC アプリケーションはデータベースをまったく知る必要がなく、「ピュアな JDBC」となります。
Pervasive JDBC ドライバーは JDBC 2.0 Standard Extension API をサポートしました。現在、Pervasive JDBC ドライバーは次のインターフェイスをサポートしています。
メモ
これらのインターフェイスは、コア JDBC API を 100% ピュアな Java として維持するため、pvjdbc2x.jar に別にパッケージされています。
現時点では Pervasive は RowSet インターフェイスの実装を提供していませんが、Pervasive JDBC ドライバーは Sun の RowSet インターフェイス の実装で検証済みです。
Sun はアプリケーション開発者がドライバーに依存しないアプリケーションを作成する方法を提供しています。DataSource インターフェイスと JNDI を使用することにより、アプリケーションは標準の方法でデータにアクセスでき、接続文字列のようなドライバー固有の要素をなくすことができます。DataSource インターフェイスを使用するには、データベースを JNDI サービス プロバイダーに登録する必要があります。そうすると、アプリケーションはデータベースに名前でアクセスすることができます。
次に DataSource インターフェイスの使用例を挙げます。
// このコードは、DataSource を登録するために、 // 管理者が実行する必要があります。 // このサンプルは、Sun の参照 JNDI 実装を使用します。 public void registerDataSources() { // この例では JNDI ファイルシステム // オブジェクトをレジストリとして使用します。 Context ctx; jndiDir = "c:¥¥jndi"; try { Hashtable env = new Hashtable (5); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); env.put(Context.PROVIDER_URL, jndiDir); ctx = new InitialContext(env); } catch (Exception e) { System.out.println(e.toString()); } // demodata を通常のデータ ソースとして登録 com.pervasive.jdbc.v2.DataSource ds = new com.pervasive.jdbc.v2.DataSource(); String dsName = ""; try { // ユーザー名、パスワード、ドライバーの種類、 // およびネットワーク プロトコルを設定 ds.setUser("administrator"); ds.setPassword("admin"); ds.setPortNumber("1583"); ds.setDatabaseName("DEMODATA"); ds.setServerName("127.0.0.1"); ds.setDataSourceName("DEMODATA_DATA_SOURCE"); ds.setEncoding("cp850"); dsName = "jdbc/demodata"; // バインド try { ctx.bind(dsName,ds); System.out.println("バウンド データ ソース [" + dsName + "]"); } catch (NameAlreadyBoundException ne) { System.out.println("データ ソース [" + dsName + "] は既にバインドされています"); } catch (Throwable e) { System.out.println("JNDI バインド エラー:"); throw new Exception(e.toString()); } } } // この DataSource をアプリケーションで使用するには、 // 次のコードを実行することが必要 public DataSource lookupDataSource(String ln) throws SQLException { Object ods = null; Context ctx; try { Hashtable env = new Hashtable (5); env.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); // JNDI ディレクトリを作成し、その名前を返す // ただしそのディレクトリがまだ存在していない場合のみ String jndiDir = "c:¥¥jndi"; env.put(Context.PROVIDER_URL, jndiDir); ctx = new InitialContext(env); } catch (Exception e) { System.out.println(e.toString()); } try { ods = ctx.lookup(ln); if (ods != null) System.out.println("データ ソース [" + ln + "]"+" が見つかりました"); else System.out.println("データ ソース [" + ln + "]"+" が見つかりません"); } catch (Exception e) { throw new SQLException(e.toString()); } return (DataSource)ods; } // ConnectionPoolDataSource も // 同様に扱われることに注意
|