データベースを使用して Adapter for JDBC を実行中に発生する可能性のある問題の一部を、その解決策および予備手段と共に説明します。これらの問題および解決策は、ソフトウェア・サポート Web サイトの技術情報としても文書化されています。
問題
Oracle データベース・オブジェクトからビジネス・オブジェクトが生成されたとき、ビジネス・オブジェクトで NCHAR 型の列の属性が作成されません。
原因
JDBC ドライバーが、列の型を Other として戻しました。これはエンタープライズ・サービス・ディスカバリーではサポートされていません。
解決策
Business Object Designer ツールを使用して、サポートされる型の属性を手動でビジネス・オブジェクトに追加します。
問題
データ・パースペクティブでデータベースへの接続を使用した後に、JDBC エンタープライズ・サービス・ディスカバリーを使用することができません。エンタープライズ・サービス・ディスカバリー・ウィザードの 2 番目のパネルの最後に、例外 com.ibm.adapter.framework.api.ImportException が生成されます。
理由:
pc:0 でクラス・ロードの制約に違反がありました
(クラス: oracle/jdbc/driver/OracleConnection
メソッド:
getWrapper()Loracle/jdbc/OracleConnection;)。
原因
データ・パースペクティブおよびエンタープライズ・サービス・ディスカバリーが独自のクラス・ローダーを使用しているために、エラーが発生します。DLL (JDBC ドライバーが使用するネイティブ・ライブラリー) が、いったんデータ・パースペクティブにロードされると、エンタープライズ・サービス・ディスカバリーに再度ロードすることができません。JVM には、どの時点でも 1 つのクラス・ローダーのみがネイティブ・ライブラリーをロード可能であるという、固有の制約事項があります。そのため、クラス・ローダー A が DLL B をロードした場合、クラス・ローダー A が解放され、ガーベッジ・コレクションが実行されるまで、その他のクラス・ローダーは DLL B をロードできません。実際にはユーザーはガーベッジ・コレクションを制御できないため、通常、別のクラス・ローダーが DLL B をロードするようにしたい場合は、JVM を再始動する必要があるということになります。この制限は、既知のものであり、WebSphere® Application Server では文書化されています。
解決策
このエラーが発生したときは、WebSphere® Integration Developer を再始動することが唯一の解決策です。
問題
Oracle 10g を使用して XA トランザクションを実行するために Adapter for JDBC が使用されると、Adapter は Closed Connection (接続のクローズ) 例外 javax.resource.ResourceException: Closed Connection を生成します。
原因
これは、Oracle 10g データベース・ドライバーの既知の問題です。この問題については、Oracle で「3488761 Connection closed error from OracleConnection.getConnection() - 10G drivers」というバグが記録されています。
解決策
このバグは、Oracle 10g リリース 2 ドライバーで修正されています。予備手段としては、Oracle 9i JDBC Thin ドライバーを使用して、XA トランザクションのためにデータベースに接続します。
問題
Oracle データベースを使用して XA トランザクションを実行するために Adapter for JDBC が使用されると、次のエラーが生成されます。WTRN0078E: トランザクション・マネージャーがトランザクションのリソースで start を呼び出そうとして、エラーが発生しました。エラー・コードは XAER_RMERR でした。 (WTRN0078E: An attempt by the transaction manager to call start on a transactional resource has resulted in an error. The error code was XAER_RMERR.)
原因
Oracle データベース・サーバーで XA トランザクションをサポートするには、いくつかのコマンドを実行する必要があります。
解決策
<ORACLE_HOME>javavm¥install file: initxa.sql file: initjvm.sql
initxa.sql スクリプトは、データベースを XA 用に構成します。正常に実行されると、データベースは XA 向けに構成されます。このスクリプトは、一度目の試行で正常に実行される場合もあります。ただし、データベースのメモリー・スペースの一部が小さすぎるために、正常に実行されない可能性が高くなっています。
<ORACLE_HOME>¥database file: init<DATABASE_SID>.ora
パラメーター名 | 最小値 |
---|---|
java_pool_size | 12000000 |
shared_pool_size | 24000000 |
問題と原因
z/OS® 上の DB2® では、デフォルトで位置インデックスを使用し、列名を使用しないストアード・プロシージャー・メタデータの照会をサポートします。Adapter for JDBC は列名を使用します。解決策では、z/OS プラットフォームで DB2 と共に WebSphere Adapter for JDBC を使用する手順を示しています。
解決策
Adapter for JDBC を使用するか、または JDBC API で DB2 Connect™ を使用して、z/OS® 上の DB2® に接続するには、以下の接続要件が満たされていることを確認してください。
タイプ 2: jdbc:db2:database
(例: jdbc:db2:MyDB。MyDB はデータベース名。)
タイプ
4: jdbc:db2://server:port/database
(例: jdbc:db2://9.182.15.129:50000/MyDB。MyDB はデータベース名。)
タイプ 2 ドライバーとタイプ 4 ドライバーの両方で、ドライバー・クラスは同一です。
タイプ 2 ドライバーとタイプ 4 ドライバーの両方で、ライセンス JAR ファイルは同一です。DB2 for z/OS サーバーおよび DB2 for i5/OS® サーバーにアクセスするには、有効な DB2 Connect™ のライセンスが必要です。DB2 クライアントは、DB2 Connect ライセンスがなければ、zSeries® サーバーおよび iSeries™ サーバーへの接続を提供しません。
DB2 Connect のライセンス交付および使用法については、以下のページを参照してください。
http://www-128.ibm.com/developerworks/db2/library/techarticle/0303zikopoulos1/0303zikopoulos1.html
http://www-128.ibm.com/developerworks/db2/library/techarticle/0301zikopoulos/0301zikopoulos.html
エンタープライズ・サービス・ディスカバリーを使用してストアード・プロシージャーのメタデータをインポートする際に問題が発生する可能性があります。Adapter for JDBC を使用して、ストアード・プロシージャーを使用し、DB2 からメタデータをインポートするには、DB2 を以下のステップで説明するように再構成する必要があります。前述のステップに加えて、以下のステップを実行してください。
これは、英語バージョンのみに適用されます。
問題
WebSphere Business Integration Adapter for JDBC は、トランザクションのサポートを統合ブローカー (WebSphere InterChange Server) に公開していませんでした。そのため、ユーザーが 2 つの無関係なオブジェクト (例えば、カスタマーおよびオーダー) を同時にエンタープライズ情報システム (EIS) で作成されるようにしたい場合に、問題が発生していました。
これを実行するには、2 つの別々の要求を送信する必要があり、要求と要求の間にアダプターが停止すると、一方のオブジェクトのみが作成されました。 WebSphere InterChange Server アダプター・インターフェースの制限のため、ラッパー・オブジェクトを通じて単一のバッチで複数の要求をアダプターへ送信できるようにすることが解決策でした。このラッパー・オブジェクトは、1 から n 個の子ビジネス・オブジェクトを保持するダミー・コンテナーであり、子ビジネス・オブジェクトのそれぞれが正常に処理されてからでなければ、バックエンド・データベースへのコミットが発行されませんでした。
解決策
新しい WebSphere Adapter for JDBC (JCA) は、ローカル・トランザクションとグローバル・トランザクションをサポートします。例えばカスタマーおよびオーダーを同時に作成する要求を送信したい場合、アダプター・クライアント (メディエーションまたはビジネス・プロセスなど) からトランザクションを開始し、適切と考える要求を送信することができるようになりました。送信したいものをすべて送信したら、トランザクションをコミットします。ラッパー・ビジネス・オブジェクトは必要ありません。
これにより、リモート DB2 データベースと共に Adapter for JDBC を使用する XA トランザクション・サポートのための手順、データベース・バージョン、および構成要件が提供されます。
リモート DB2 データベースでの XA トランザクションの使用
リモート DB2 データベースの追加
リモート・システムの追加、インスタンス・ノードの追加、データベースの追加、データベース接続のテストという 4 つのタスクを、この順序で実行します。
リモート・システムの追加
インスタンス・ノードの追加
データベースの追加
データベース接続のテスト
Universal Driver を使用した Adapter for JDBC での XA トランザクションの使用
問題
インポートおよびエクスポートを作成して、それらを同一のアダプター・インスタンスにバインドしたとき (同じ AdapterID プロパティーを使用)、例えばインポートのログには「a.log」、エクスポートのログには「b.log」などのように、2 つのバインディングのログに異なる名前を付けると、プロジェクトを WebSphere Process Server にデプロイした後には、リソース・アダプターには「b.log」という名前の 1 つのログしかないことが分かります。
原因
WebSphere® Adapters は、Inbound 操作および Outbound 操作からのメッセージングを区別しないため、アダプター・ログ・ファイルを 1 つしか作成しません。
解決策
インポートおよびエクスポートが同一のアダプター・インスタンスにバインドしている場合、Inbound 操作および Outbound 操作を同一のログ名を用いて構成します。インバウンドおよびアウトバウンドが別々のアダプターに属し、それぞれのアダプター ID が異なる場合は、この問題は発生しません。
(c) Copyright IBM Corporation 2005, 2006.
(C) Copyright IBM Japan 2006
このインフォメーション・センターでは Eclipse テクノロジー (http://www.eclipse.org) が採用されています。