ヘッダーをスキップ
Oracle Application Development Framework開発ガイドライン・マニュアル
10gリリース2(10.1.2) 
B15737-02
  目次
目次

戻る
戻る
 

B Oracle ADFのトラブルシューティング

この付録では、Oracle ADFアプリケーションの作成時に発生する可能性のある代表的な問題と、その解決方法について説明します。次のトピックが含まれます。

B.1 問題点と解決方法

この項では、代表的な問題点とその解決方法について説明します。次のトピックが含まれます。

B.1.1 それまで稼働していたADF Business Componentsを使用するアプリケーションがJDBCエラーをスローし始める

それまで問題なくデータを取得していたアプリケーションが、突然「Connection Reset By Peer」、「Connection Closed」または「Socket Reset By Peer」などのJDBCエラーをスローし始めます。

問題点

プール内の接続が無効になっています。この現象は、次のいずれかの原因で発生します。

  • データベースがシャットダウンまたは再起動されましたが、ビジネス・コンポーネントを実行しているJVMが再起動されていません。

  • ファイアウォールによって接続がタイムアウトになっています。

  • ネットワーク障害が発生しています。

無効な接続にアクセスした場合には、エラーがスローされます。

解決方法

ADF Business ComponentsをOracle Application Server 10gにデプロイしている場合、clean-available-connections-thresholdパラメータを設定して無効な接続を定期的にクリーンアップできます。

B.1.2 ADF Business Componentsパラメータへの変更が反映されない

ADF Business Componentsのランタイム・パラメータを変更したにもかかわらず、新しいパラメータが適用されません。

問題点

ADF Business Componentsランタイム・パラメータは、いくつかの場所で指定できます。優先順位の高い場所にあるパラメータが、変更内容をオーバーライドしています。ランタイム・パラメータは次の場所に指定できます(優先順位の高い順に記載)。

  • クライアント・アプリケーションが使用するADFアプリケーション・モジュール構成

  • アプレット・タグ

  • JVMに渡される-Dフラグ

  • ビジネス・コンポーネントが格納されているディレクトリ内のBC4J.propertiesファイル

  • /oracle/jbo/BC4J.propertiesリソース

  • /oracle/jbo/server/jboserver.propertiesリソース

  • /oracle/jbo/common/Diagnostic.propertiesリソース

  • ADF BCライブラリ独自のデフォルト

解決方法

優先順位の高い場所の設定をチェックし、変更内容をオーバーライドしていないか確認します。

B.1.3 ADF Business ComponentsがClassNotFoundExceptionをスローする

アプリケーションがビジネス・コンポーネントにアクセスしようとする際に、ADF BCフレームワーク・クラスが見つからないという内容の例外をスローします。この問題の原因を特定するには、例外で指摘されているクラスを含むJARファイルを調べます。

問題その1

アプリケーションがサーバー上のADF BCライブラリよりも新しいバージョンのライブラリで設計されており、サーバー上のライブラリにはアプリケーションが使用するクラスの一部が含まれていません。

解決方法その1

ADF Runtime Installerを使用し、新しいバージョンのADF BCライブラリをサーバーにインストールします。

問題その2

JClientアプリケーションの配布時のアーカイブに、必要なライブラリが含まれていませんでした。

解決方法その2

不足しているライブラリを加えてJClientアプリケーションを再度デプロイします。

問題その3

必要なクラスを含むアーカイブがクラスパス上にありません。

解決方法その3

必要なクラスを含むアーカイブをOC4Jクラスパスに追加します。

B.1.4 ライブラリとともにデプロイしたADF Business Componentsが例外をスローする

ADF Business Componentsを使用するアプリケーションを、異なるバージョンのADF Business ComponentsライブラリがインストールされているOracle Application Server 10gのリリースにデプロイしました。正しいバージョンのライブラリをアプリケーションとともにデプロイしたにもかかわらず、間違ったバージョンに対して実行を試みているかのような例外をアプリケーションがスローし続けます。

問題点

アプリケーション・サーバーにインストールされているライブラリが、アプリケーションのEARファイルに含まれる正しいライブラリより前にクラスパスに定義されています。

解決方法

server.xmlファイルおよびorion-web.xmlファイルのクラス・ローダー階層をチェックし、アプリケーションで使用するライブラリが先にロードされるようにします。この問題に対する根本的な解決策は、ADF Runtime Installerを使用して最新バージョンのライブラリをインストールすることです。

B.1.5 ブラウザのボタンを使用するとADFデータにバインドされたWebページを移動できない

ADFデータにバインドされた表の行セット内を移動するときに、ブラウザの「戻る」ボタンを使用すると、予期しない結果が発生するか、JBOエラー(JBO-33035)がスローされます。「前へ」「次へ」リンクなどを使用したアプリケーション内での移動は、問題なく動作します。

たとえば、問合せ結果として35行を返すデータにバインドされた表を含むページがあるとします。ページのバインディング・コンテナ内にADFイテレータ・バインディングを作成し、レンジ・サイズを10に設定して同時に表示される行数を10行に制限します。

ユーザーの操作手順は、次のとおりです。

  1. 最初に行1〜10を参照します。

  2. アプリケーションの「次へ」リンクを使用します(ADFのNextSetコマンドが使用されます)。

  3. 行11〜20を参照します。

  4. ブラウザの「戻る」ボタンを使用します。

  5. 再び行1〜10を参照します。ユーザーはブラウザの「戻る」ボタンをクリックしたため、これらの行は、アプリケーションではなくブラウザのローカル・ページ・キャッシュから取得されます。

  6. アプリケーションの「次へ」リンクを使用して再び次のページに戻ります(ADFのNextSetコマンドが使用されます)。

このとき、次の予期しない結果のいずれかが発生します。

  • ページにADFバインディングのStateトークンが含まれており、バインディング・コンテナのEnable Token ValidationプロパティをデフォルトのTrueに設定したままの場合、JBO-33035エラーが発生します。

  • ページにADFバインディングのStateトークンが含まれていないか、バインディング・コンテナのEnable Token ValidationプロパティをFalseに設定した場合、行21〜30が表示されます。

問題点

これらの結果が発生した原因は、手順6でユーザーがアプリケーションの「前へ」リンク(ADFのPreviousSetコマンド)を使用せずに、ブラウザの「戻る」ボタンを押して前の行セットを参照したことにあります。ブラウザを使用して移動すると、ページはブラウザのローカル・ページ・キャッシュから取得されます。そのため、Webサーバーとのやり取りは発生しません。したがって、レンジの第1行および行セットの現在行について、ADFイテレータ・バインディングの現在の設定は変化しません。つまり、アプリケーション側では、行セットが変更されたという情報を受け取っていないため、手順5の段階で現在行を1〜10ではなく11〜20であると認識しています。

Stateトークンは、デフォルトでページに追加され、Enable Token Validationプロパティは、JDeveloperのデータ・コントロール・パレットからドラッグ・アンド・ドロップしたときにTrueに設定されます。このトークンは、フォーム送信の重複を防ぐために使用されます。Enable Token ValidationプロパティをTrueに設定すると、ADFページ・ライフサイクルのprepareModel()フェーズ中に、バインディング・コンテナのイテレータの状態が、Webフォームの送信で期待された結果となるかどうかがアプリケーションによって検証されます。これにより、プロパティ設定を変更しない場合、ユーザーが手順6で「次へ」リンクをクリックすると、トークンの検証時に異なる行セットが結果として予想されるため、アプリケーションからエラーが返されます。

ページにADFバインディングのStateトークンが含まれないか、Enable Token ValidationプロパティがFalseに設定されている場合、アプリケーション側で認識されている最後の行セットは11〜20であることから、行21〜30が返されます。ユーザーが手順4でページを戻るときに、ブラウザの「戻る」ボタンではなく「前へ」リンクをクリックすれば、すべては期待どおりに動作します。

解決方法

アプリケーションで、非表示フィールドまたはURLパラメータを使用して、現在のページ番号を追跡してください。これにより、アプリケーションで現在のページ番号を適切なイベント(NextPagePreviousPageGotoPageなど)と組み合せて使用し、次の行セットを計算します。この方法は、レンジの開始行についてADFイテレータの現在の設定に依存しないため、ユーザーがブラウザの「戻る」ボタンまたはアプリケーションの「前へ」リンクのどちらをクリックしたかにかかわらず、次の行セットは現在のセットに基づいて設定されます。

詳細は、Oracle Technology CenterのJDeveloperのセクションにある「Generic Approach for Back-Button-Friendly Web Rowset Paging」(http://www.oracle.com/technology/products/jdev/tips/muench/paging/index.html)を参照してください。

B.2 追加情報

追加の解決方法は、Oracle MetaLinkhttp://metalink.oracle.com)で参照できます。問題に対する解決方法が見つからない場合は、サービス・リクエストに記録してください。


関連資料: