カスタム DataStoreHelper クラスの開発
適用するWebSphere®拡大、GenericDataStoreHelperクラスを使用すると、アプリケーション サーバーがサポートしていないデータ ソース用の独自のデータ ストア ヘルパーを作成できます。 このヘルパー・クラスにより、JDBC 構成は、トランザクション中にデータベース固有の機能を使用できます。
事前処理
このタスクの概要
非推奨の機能: CUSTOM_HELPER定数フィールドは、 com.ibm.websphere.rsadapter.DataStoreHelperクラス API は非推奨です。 独自の DataStoreHelper 実装クラスを作成する場合は、
setHelperType(DataStoreHelper.CUSTOM_HELPER) を呼び出さないでください。 その代わりに、
継承元の実装クラスによって HelperType 値が設定されるようにします。
手順
- 既存のデータ・ストア・ヘルパーを拡張するクラスを作成します。次のコードをサンプルとして使用してください。このデータ・ソースのタイプは、 ユーザー定義の JDBC プロバイダーに基づいています。
package com.ibm.websphere.examples.adapter; import java.sql.SQLException; import javax.resource.ResourceException; import com.ibm.websphere.appprofile.accessintent.AccessIntent; import com.ibm.websphere.ce.cm.*; import com.ibm.websphere.rsadapter.WSInteractionSpec; /** * Example DataStoreHelper class, demonstrating how to create a user-defined DataStoreHelper. * The implementation for each method is provided only as an example. More detail is probably * required for any custom DataStoreHelper that is created for use by a real application. * In this example, we will override the doStatementCleanup(),getIsolationLevel(), and set userDefined * exception map. */ public class ExampleDataStoreHelper extends com.ibm.websphere.rsadapter.GenericDataStoreHelper { public ExampleDataStoreHelper(java.util.Properties props) { super(props); // Update the DataStoreHelperMetaData values for this helper. getMetaData().setGetTypeMapSupport(false); // Update the exception mappings for this helper. java.util.Map xMap = new java.util.HashMap(); // Add an Error Code mapping to StaleConnectionException. xMap.put(new Integer(2310), StaleConnectionException.class); // Add an Error Code mapping to DuplicateKeyException. xMap.put(new Integer(1062), DuplicateKeyException.class); // Add a SQL State mapping to the user-defined ColumnNotFoundException xMap.put("S0022", ColumnNotFoundException.class); // Undo an inherited StaleConnection SQL State mapping. xMap.put("S1000", Void.class); setUserDefinedMap(xMap); // If you are extending a helper class, it is // normally not necessary to issue 'getMetaData().setHelperType(...)' // because your custom helper will inherit the helper type from its // parent class. } public void doStatementCleanup(java.sql.PreparedStatement stmt) throws SQLException { // Clean up the statement so it may be cached and reused. stmt.setCursorName(""); stmt.setEscapeProcessing(true); stmt.setFetchDirection(java.sql.ResultSet.FETCH_FORWARD); stmt.setMaxFieldSize(0); stmt.setMaxRows(0); stmt.setQueryTimeout(0); } public int getIsolationLevel(AccessIntent intent) throws ResourceException { // Determine an isolation level based on the AccessIntent. // set WebSphere default isolation level to TRANSACTION_SERIALIZABLE. if (intent == null) return java.sql.Connection.TRANSACTION_SERIALIZABLE; return intent.getConcurrencyControl() == AccessIntent.CONCURRENCY_CONTROL_OPTIMISTIC ? java.sql.Connection.TRANSACTION_READ_COMMITTED : java.sql.Connection.TRANSACTION_REPEATABLE_READ; } public int getLockType(AccessIntent intent) { if ( intent.getConcurrencyControl() == AccessIntent.CONCURRENCY_CONTROL_PESSIMISTIC) { if ( intent.getAccessType() == AccessIntent.ACCESS_TYPE_READ ) { return WSInteractionSpec.LOCKTYPE_SELECT; } else { return WSInteractionSpec.LOCKTYPE_SELECT_FOR_UPDATE; } } return WSInteractionSpec.LOCKTYPE_SELECT; } }
- オプション:独自の例外ハンドラ クラスを作成します。次のコードをガイドとして使用してください。
package com.ibm.websphere.examples.adapter; import java.sql.SQLException; import com.ibm.websphere.ce.cm.PortableSQLException; /** * Example PortableSQLException subclass, which demonstrates how to create a user-defined * exception for exception mapping. */ public class ColumnNotFoundException extends PortableSQLException { public ColumnNotFoundException(SQLException sqlX) { super(sqlX); } }
- 新規作成の DataStoreHelper クラスを 1 つまたは複数コンパイルします。これらをコンパイルするには、クラスパスに以下の JAR ファイルが必要です。
- アプリケーションサーバールート/dev/JavaEE/j2ee.jar
- アプリケーションサーバールート/dev/was_public.jar注記: was_public.jar以下のクラスが含まれていますアプリケーションサーバールート/lib/rsahelpers.jarカスタムコンパイルに必要なDataStoreHelperクラス。
- アプリケーションサーバールート/plugins/com.ibm.ws.runtime.jar
- Eclipse のような開発環境を使用している場合、コンパイルを行えるようにするには、前述の JAR ファイルをクラスパスに設定する必要があります。 ファイルの編集が終了したら、プロジェクトの JAR ファイルを作成します (個々の指示については、ご使用の開発環境のヘルプ文書を参照してください)。
- 開発環境を持たず、javac コンパイラーを使用している場合の手順は、次のとおりです。
- .javaファイルを作成し、GenericDataStoreHelperまたは他のデータストアヘルパー(ステップ1 。
- コマンド行ユーティリティーでファイルを編集した後で、ホーム・ディレクトリーに移動します。
- 次のコマンドを使用してクラスパスを設定します。
set CLASSPATH=%CLASSPATH%;app_server_root\dev\JavaEE\j2ee.jar;app_server_root\dev\was_public.jar;app_server_root\plugins\com.ibm.ws.runtime.jar
set CLASSPATH=$CLASSPATH:app_server_root/dev/JavaEE/j2ee.jar:app_server_root/dev/was_public.jar:app_server_root/plugins/com.ibm.ws.runtime.jar
- クラスを 1 つまたは複数コンパイルします。 たとえば、Windows オペレーティング システムでは、次のコマンドを入力します (これにより、指定したディレクトリ内のすべての .java ファイルがコンパイルされます)。
C:\javac your_directory\*.java
- Java ディレクトリーから、独自のディレクトリー内にすべてのコンパイル済みクラス・ファイルを入れる JAR ファイルを作成します。 たとえば、Windowsオペレーティングシステムでは次のコマンドを入力します(myFileJAR ファイルに付ける名前に変更します):
javacコンパイラの使用に関する詳細については、OracleJava™ コンパイラの Web サイト。C:\Java> jar cf myFile.jar *.class
- コンパイル済みの JAR ファイルをディレクトリー内に配置し、JDBC プロバイダーのクラスパスを更新してその場所を組み込みます。たとえば、JARファイルがc:\myFile.jar、必ず変更してくださいJDBC含めるクラスパスc:\myFile .jar です。
- クリックリソース>JDBC>JDBCプロバイダー > JDBC プロバイダー。
- の中にクラスパスフィールドに、コンパイルした JAR ファイルの場所を追加します。例えば、フィールド内で ENTER キーを押して、次の新しい行を追加します。
c:\myFile.jar
- 新規のカスタム DataStoreHelper クラスを使用するように、
アプリケーション・サーバーを構成します。
- 管理コンソールから選択リソース> JDBC>データソース。
- カスタム DataStoreHelper クラスで構成するデータ・ソースを選択します。
- ラベルの付いたセクションでデータストアヘルパークラス名、 選択するユーザー定義のデータストアヘルパーを指定する。
- 作成したデータ・ストア・ヘルパーのクラス名を入力します。
- 変更を適用して選択わかりました。