いくつかの一般的な問題の解決策

データベースを使用して Adapter for JDBC を実行中に発生する可能性のある問題の一部を、その解決策および予備手段と共に説明します。これらの問題および解決策は、ソフトウェア・サポート Web サイトの技術情報としても文書化されています。

ビジネス・オブジェクトで NCHAR 型の Oracle 列の属性が作成されない

問題

Oracle データベース・オブジェクトからビジネス・オブジェクトが生成されたとき、ビジネス・オブジェクトで NCHAR 型の列の属性が作成されません。

原因

JDBC ドライバーが、列の型を Other として戻しました。これはエンタープライズ・サービス・ディスカバリーではサポートされていません。

解決策

Business Object Designer ツールを使用して、サポートされる型の属性を手動でビジネス・オブジェクトに追加します。

JDBC エンタープライズ・サービス・ディスカバリーの始動時にクラス・ローダー違反が発生

問題

データ・パースペクティブでデータベースへの接続を使用した後に、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 を使用すると接続のクローズのエラーが発生する

問題

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 でトランザクションを開始中にエラーが発生する

問題

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 ディレクトリーに含まれる 2 つのスクリプトを実行する必要があります。これらのスクリプトを実行するために必要な許可を持つためには、SYSOPER または SYSDBA として Oracle にログインしていなければならないため、おそらくこのアクティビティーは、Oracle データベース管理者が実行する必要があります。スクリプトは次のとおりです。
<ORACLE_HOME>javavm¥install
file: initxa.sql
file: initjvm.sql  

initxa.sql スクリプトは、データベースを XA 用に構成します。正常に実行されると、データベースは XA 向けに構成されます。このスクリプトは、一度目の試行で正常に実行される場合もあります。ただし、データベースのメモリー・スペースの一部が小さすぎるために、正常に実行されない可能性が高くなっています。

これを修正するには、initjvm.sql スクリプトを実行します。このスクリプトもおそらく失敗しますが、失敗したときに、どのパラメーターを調整する必要があるかが示されます。パラメーターは、次のファイルに格納されます。
<ORACLE_HOME>¥database
file: init<DATABASE_SID>.ora
以下の表に、通常増加させる必要のある 2 つのパラメーターを示します。ご使用の特定のデータベース構成では、異なるパラメーターの調整が必要となる可能性があります。
表 1.
パラメーター名 最小値
java_pool_size 12000000
shared_pool_size 24000000

アダプターを使用して JDBC (タイプ 2 またはタイプ 4) ユニバーサル・ドライバーにより IBM® z/OS 上の DB2 に接続する

問題と原因

z/OS® 上の DB2® では、デフォルトで位置インデックスを使用し、列名を使用しないストアード・プロシージャー・メタデータの照会をサポートします。Adapter for JDBC は列名を使用します。解決策では、z/OS プラットフォームで DB2 と共に WebSphere Adapter for JDBC を使用する手順を示しています。

解決策

Adapter for JDBC を使用するか、または JDBC API で DB2 Connect™ を使用して、z/OS® 上の DB2® に接続するには、以下の接続要件が満たされていることを確認してください。

  • ユニバーサル JDBC ドライバーの物理表現は、db2jcc.jar ファイルです。このファイルへのパスが、クラス・パスに設定されていることを確認してください。
  • データベース URL: タイプ 2 またはタイプ 4 のどちらのドライバーを使用するかを決定するには、接続の形式を検討します。

    タイプ 2: jdbc:db2:database
    (例: jdbc:db2:MyDB。MyDB はデータベース名。)

    タイプ 4: jdbc:db2://server:port/database
    (例: jdbc:db2://9.182.15.129:50000/MyDB。MyDB はデータベース名。)

  • ドライバー・クラス: com.ibm.db2.jcc.DB2Driver。

    タイプ 2 ドライバーとタイプ 4 ドライバーの両方で、ドライバー・クラスは同一です。

  • クラス・パスに db2jcc_license_cisuz.jar ファイルのパスを設定します。

    タイプ 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 を以下のステップで説明するように再構成する必要があります。前述のステップに加えて、以下のステップを実行してください。

  • DB2 に APAR の PQ62695、PQ55393、PQ56616、PQ54605、PQ46183、および PQ62139 を適用します。
  • アダプターでストアード・プロシージャーを使用したい場合は、下記のステップを実行します。これは、PQ62695 のフィックスの一部です。このフィックスは、JDBC および ODBC 仕様で文書化されているスキーマ・メタデータ API に対応する結果セットを生成することが可能なストアード・プロシージャーを導入しています。
    これらのプロシージャーは、DB2 Universal Driver で提供される JDBC および ODBC ドライバーが使用します。以下のステップを実行して、ストアード・プロシージャーのサポートを使用可能にします。
    1. APAR を適用します。
    2. ZPARM アセンブリー・ジョブ DSNTIJUZ 内の DESCSTAT 変数の値を確認します。 DESCSTAT 変数の値が NO である場合は、YES に変更します。
      注: DESCSTAT のデフォルトは、V7 では NO ですが、V8 では YES に変更されました。
    3. ZPARM モジュールを再アセンブルし、再初期化します。
    4. DSNTIJMS という名前の JCL ジョブを実行します。このメンバーは、db2prefix.SDSNSAMP データ・セット内にあります。
    5. DB2 を再始動します。

ラッパー・ビジネス・オブジェクトの代わりにトランザクションを使用

これは、英語バージョンのみに適用されます。

問題

WebSphere Business Integration Adapter for JDBC は、トランザクションのサポートを統合ブローカー (WebSphere InterChange Server) に公開していませんでした。そのため、ユーザーが 2 つの無関係なオブジェクト (例えば、カスタマーおよびオーダー) を同時にエンタープライズ情報システム (EIS) で作成されるようにしたい場合に、問題が発生していました。

これを実行するには、2 つの別々の要求を送信する必要があり、要求と要求の間にアダプターが停止すると、一方のオブジェクトのみが作成されました。 WebSphere InterChange Server アダプター・インターフェースの制限のため、ラッパー・オブジェクトを通じて単一のバッチで複数の要求をアダプターへ送信できるようにすることが解決策でした。このラッパー・オブジェクトは、1 から n 個の子ビジネス・オブジェクトを保持するダミー・コンテナーであり、子ビジネス・オブジェクトのそれぞれが正常に処理されてからでなければ、バックエンド・データベースへのコミットが発行されませんでした。

解決策

新しい WebSphere Adapter for JDBC (JCA) は、ローカル・トランザクションとグローバル・トランザクションをサポートします。例えばカスタマーおよびオーダーを同時に作成する要求を送信したい場合、アダプター・クライアント (メディエーションまたはビジネス・プロセスなど) からトランザクションを開始し、適切と考える要求を送信することができるようになりました。送信したいものをすべて送信したら、トランザクションをコミットします。ラッパー・ビジネス・オブジェクトは必要ありません。

リモート DB2 データベースを用いたアウトバウンド・サポートのための XA トランザクションの使用

これにより、リモート DB2 データベースと共に Adapter for JDBC を使用する XA トランザクション・サポートのための手順、データベース・バージョン、および構成要件が提供されます。

リモート DB2 データベースでの XA トランザクションの使用

リモート DB2 データベースの追加

  1. DB2 サーバー・マシンで db2admin (<DB2_Installpath>¥SQLLIB¥BIN) コマンドを実行します。
  2. DB2 構成アシスタントを開きます。
  3. 「表示 (View)」 > 「拡張表示 (Advanced View)」に移動します。

リモート・システムの追加、インスタンス・ノードの追加、データベースの追加、データベース接続のテストという 4 つのタスクを、この順序で実行します。

リモート・システムの追加

  1. 「システム」タブを選択します。
  2. メニューから、「選択済み」 > 「システムの追加 (Add System)」を選択します。
  3. 「システム名 (System name)」フィールドで、ターゲット・データベースが配置されている物理マシン、サーバーシステム、またはワークステーションを指定します。サーバー・システム上のシステム名は、DB2SYSTEM DAS 構成パラメーターによって定義されます。ユーザーはこの値を使用する必要があります。
  4. 「ホスト名」フィールドに、ホスト名か、またはターゲット・データベースが存在するインターネット・プロトコル (IP) アドレスを入力します。
  5. 「ノード名 (Node name)」フィールドで、データベースが配置されているリモート・ノードのローカル・ニックネームを指定します。選択するノード名は、ノード・ディレクトリーまたは管理ノード・ディレクトリーに存在していないものにする必要があります。
  6. オペレーティング・システムを選択して、「OK」をクリックします。

インスタンス・ノードの追加

  1. 「インスタンス・ノード (Instance Nodes)」タブを選択します。
  2. メニューから、「選択済み」 > 「インスタンス・ノードの追加 (Add Instance Node)」を選択します。
  3. 「システム名 (System name)」フィールドで、ターゲット・データベースが配置されている物理マシン、サーバーシステム、またはワークステーションを指定します。リモート・システムの追加タスクで追加したシステムを選択します。
  4. 「インスタンス名」フィールドに、ターゲット・データベースが配置されているインスタンスの名前 (DB2 など) を入力します。
  5. 「インスタンス・ノード名 (Instance node name)」フィールドで、データベースが配置されているカタログされたシステム (ノード) の固有のニックネームを指定します。選択するノード名は、ノード・ディレクトリーまたは管理ノード・ディレクトリーに存在していないものにする必要があります。
  6. オペレーティング・システムを選択して、ホスト名を入力します。リモート・システムの追加タスクのステップ 4 と同じホスト名を使用します。
  7. リモート DB2 インスタンスが実行されているポート番号を入力します。
  8. 「OK」をクリックします。

データベースの追加

  1. 「データベース」タブを選択します。
  2. メニューから、「選択済み」 > 「データベースの追加」を選択します。
  3. 「インスタンス・ノード (Instance node)」フィールドで、インスタンス・ノードの追加タスクで作成したインスタンスを選択します。「データベース名 (Database name)」フィールドで追加するデータベースの名前を指定します。
  4. 「別名 (Alias)」フィールドで、ワークステーション上で実行中のアプリケーションが使用できるローカル・ニックネームを指定します。何も入力されない場合、別名はデータベース名と同じになります。別名は、固有でなければなりません。
    注: この別名値を、アダプターの XADatabaseName プロパティーに入力する必要があります。

データベース接続のテスト

  1. 「データベース」タブを選択します。
  2. データベースの追加タスクで追加されたデータベースを選択します。
  3. メニューから、「選択済み」 > 「接続のテスト」を選択します。
  4. 「CLI」チェック・ボックスを選択し、ユーザー ID およびパスワードを入力し、「接続のテスト」をクリックします。これにより、接続の成功が戻されます。

Universal Driver を使用した Adapter for JDBC での XA トランザクションの使用

Adapter for JDBC (JCA) およびリモート DB2 データベースと共に XA トランザクションを使用するには、以下のバージョンのソフトウェアおよび構成プロパティーが必要です。
  • DB2 バージョン: 8.2
  • JDBC ドライバー: UDB ドライバー (db2jcc.jar) タイプ 4
  • XA データ・ソース名: com.ibm.db2.jcc.DB2XADataSource
  • XA データベース名: これは、ローカル DB2 クライアントで構成されたリモート・データベース別名です。
  • データベース URL: jdbc:db2://hostname:port/databasename
  • JDBC ドライバー・クラス: com.ibm.db2.jcc.DB2Driver

WebSphere Adapters で Inbound 操作用と Outbound 操作用に別個のログが用意されない

問題

インポートおよびエクスポートを作成して、それらを同一のアダプター・インスタンスにバインドしたとき (同じ 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) が採用されています。