データ・アクセス・ポータビリティー・フィーチャー
これらのインターフェースはリレーショナル・リソース・アダプター (RRA) を操作し、アプリケーション・サーバーとデータベース間の接続に対して、データベース固有の機能を動作可能にします。
言い換えれば、ご使用のアプリケーションは、コードを変更することな く、異なるデータベースからデータにアクセスし、データベースに固有の機能を使用できます。 また、WebSphere® Application Server では、WebSphere パーシスタンスでサポートされていないデータ・ソースをプラグイン することができます。 ただし、データ・ソースは、XADataSource タイプまたは ConnectionPoolDataSource タイプのいずれかとして実装 する必要があり、かつ、JDBC 2.x 仕様に準拠していなければなりません。
以下によってアプリケーションのポータビリティーを実現することができます。
- DataStoreHelper インターフェース
- このインターフェースにより、各データ・ストア・プラットフォームは
、リレーショナル・リソース・アダプターのランタイムが使用する独自のプ
ライベート・データ・ストアに固有の機能をプラグインすることができます。
WebSphere Application Server
は、サポートされている JDBC プロバイダーごとに実装を提供します。
さらに、このインターフェースは、サポートされないデータ・ソースが 使用する GenericDataStoreHelper クラスも提供します。GenericDataStoreHelper クラス または他の WebSphere 提供のヘルパーをサブクラスにして、新規データ・ソースをサポート できます。
注: ユーザー定義の JDBC プロバイダーを介してデータ・アクセスを構成する場合、直接 DataStoreHelper インターフェースを実装しないでください。 GenericDataStoreHelper クラスをサブクラスにするか、または IBM® によって提供された DataStoreHelper 実装クラスの 1 つ をサブクラスにします (データベースの動作または SQL 構文がこれらの提供 されたクラスの 1 つに類似している場合)。詳しくは API 文書 DataStoreHelper トピック (API 文 書索引にリストされているように) を参照してください。
次のコード・セグメントは、新規のデータ・ストア・ヘルパーを作成して、サポートされていないデータ・ソース用に新規エラー・マッピングを追加する方法を示しています。
public class NewDSHelper extends GenericDataStoreHelper { public NewDSHelper(java.util.Properties dataStoreHelperProperties) { super(dataStoreHelperProperties); java.util.Hashtable myErrorMap = null; myErrorMap = new java.util.Hashtable(); myErrorMap.put(new Integer(-803), myDuplicateKeyException.class); myErrorMap.put(new Integer(-1015), myStaleConnectionException.class); myErrorMap.put("S1000", MyTableNotFoundException.class); setUserDefinedMap(myErrorMap); ... } }
- WSCallHelper クラス
- このクラスは、ベンダー固有のメソッドおよび標準 JDBC API に準拠
しない (また、WebSphere Application Server
拡張パッケージのパーツではない) クラスを使用可能にする 2 つのメソッドを提供します。
- jdbcCall() メソッド
静的 jdbcCall() メソッドを使用することよって、JDBC オブジェクト上にベンダー固有の非標準 JDBC メソッドを起動することができます。 (詳しくは API 文書 WSCallHelper トピックを参照してください。) 以下のコード・セグメントは、DB2® データ・ソースでのこのメソッドの使用を示しています。
Connection conn = ds.getConnection(); // get connection attribute String connectionAttribute =(String) WSCallHelper.jdbcCall(DataSource.class, ds, "getConnectionAttribute", null, null); // setAutoClose to false WSCallHelper.jdbcCall(java.sql.Connection.class, conn, "setAutoClose", new Object[] { new Boolean(false)}, new Class[] { boolean.class }); // get data store helper DataStoreHelper dshelper = WSCallHelper.getDataStoreHelper(ds);
- jdbcPass() メソッド
このメソッドを使用して、いくつかのデー タベース・ベンダーが提供している非標準 JDBC クラスを活用します。 これらのクラスには、ベンダー専有の JDBC オブジェクトをパラメーターとしてパスするように要求するメソッドが含まれています。
特に、Oracle の実装は、ベンダーによって供給された非標準クラスの使用を起動することができます。 これらのクラス内に含まれているメソッドには、以下のものがあります。
oracle.sql.ArrayDescriptor ArrayDescriptor.createDescriptor(java.lang.String, java.sql.Connection) oracle.sql.ARRAY new ARRAY(oracle.sql.ArrayDescriptor, java.sql.Connection, java.lang.Object) oracle.xml.sql.query.OracleXMLQuery(java.sql.Connection, java.lang.String) oracle.sql.BLOB.createTemporary(java.sql.Connection, boolean, int) oracle.sql.CLOB.createTemporary(java.sql.Connection, boolean, int) oracle.xdb.XMLType.createXML(java.sql.Connection, java.lang.String)
以下のコード例は、jdbcPass を使用して、接続で Oracle メソッド XMLType.createXML を呼び出す方法を示しています。この Oracle 機能は、データベースがアプリケーションに渡す XML データから XML タイプのオブジェクトを作成します。
XMLType poXML = (XMLType)(WSCallHelper.jdbcPass(XMLType.class, "createXML", new Object[]{conn,poString}, new Class[]{java.sql.Connection.class, java.lang.String.class}, new int[]{WSCallHelper.CONNECTION,WSCallHelper.IGNORE}));
jdbcPass の使用法とメソッド・パラメーターの完全なリストについては、WSCallHelper クラスの API 文書を参照してください。このインフォメーション・センターで、以下の手順で API 文書にアクセスします。- 「参照」 >「開発者用 API 文書 (Developer API documentation)」>「アプリケーション・プログラミング・インターフェース (Application programming interfaces)」をクリックします。
- 「com.ibm.websphere.rsadapter」をクリックします。
- 「Class Summary」の見出しの下の「WSCallHelper」をクリックします。
注意: jdbcPass() メソッドを使用すると、JDBC オブジェクトが WebSphere Application Server の 保護メカニズムの外側で使用されます。ある一定の操作 (autoCommit の設定やトランザクション分離設定など) を 保護メカニズムの外側で実行すると、これらプールされた接続を将来利用す る際に問題が生じます。 IBM は、このメソッドの起動後はオブジェクトの安定を保証しません。このメソッドの 起動がオブジェクトに損害を与える操作を実行しないことを確認するのは、ユーザーの責任です。 お客様自身のリスクでご使用ください。こうした潜在的な問題のため、WebSphere Application Server では jdbcPass() メソッドのサポートで起動できるメソッドを厳密に制御しています。 本書の前段でリストされていないメソッドへのサポートが必要な場合は、必要なメソッドの 情報を用意して WebSphere Application Server サポートにお問い合わせください。
- jdbcCall() メソッド