これらのインターフェースはリレーショナル・リソース・アダプター (RRA) を操作し、アプリケーション・サーバーとデータベース間の接続に対して、データベース固有の機能を動作可能にします。
言い換えれば、ご使用のアプリケーションは、コードを変更することな く、異なるデータベースからデータにアクセスし、データベースに固有の機能を使用できます。 さらに、WebSphere Application Server は、WebSphere パーシスタンスでは サポートされていないデータ・ソースをプラグインすることができます。 ただし、 データ・ソースは、XADataSource タイプまたは ConnectionPoolDataSource タイプのいずれかとしてインプリメント する必要があり、かつ、JDBC 2.x 仕様に準拠していなければなりません。
以下によってアプリケーションのポータビリティーを実現することができます。
さらに、このインターフェースは、サポートされないデータ・ソースが 使用する GenericDataStoreHelper クラスも提供します。 GenericDataStoreHelper クラスまたは他の WebSphere 提供のヘルパーをサブクラスにして、 新規データ・ソースをサポートすることができます。
詳しくは 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); ... } }
静的 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);
このメソッドを使用して、いくつかのデー タベース・ベンダーが提供している非標準 JDBC クラスを活用します。 これらのクラスには、ベンダー専有の JDBC オブジェクトをパラメーターとしてパスするように要求するメソッドが含まれています。
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)
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}));
こうした潜在的な問題のため、WebSphere Application Server では jdbcPass() メソッドのサポートで起動できるメソッドを厳密に制御しています。 本書の前段でリストされていないメソッドへのサポートが必要な場合は、必要なメソッドの情報を用意して WebSphere Application Server サポートにお問い合わせください。