この付録の内容は次のとおりです。
表示される可能性のあるエラー・メッセージの詳細は、この章およびエラー・メッセージを参照してください。
この項では、この付録内の情報を使用するためのガイドラインとプロセスについて説明します。次のガイドラインおよびプロセスに従うことで、作業の焦点を問題解決に絞り、問題解決までの時間を短縮できます。
ガイドライン
この章の説明を使用する際に、次のベスト・プラクティスに留意してください。
この章の解決策を実行した後すぐに、このトラブルシューティング情報を利用するきっかけとなった失敗したタスクを再試行します。再試行してもタスクが失敗する場合、この章に記載されている他の解決策を実行し、再度失敗したタスクを実行します。このプロセスを問題が解決するまで繰り返します。
実行した解決策、確認された現象およびトラブルシューティング中に収集したデータを記録しておきます。この章の情報を使用しても問題が解決されずサービス・リクエストを記録することになった場合、これらの情報があると迅速な問題解決につながります。
プロセス
この章の情報を利用する場合は、表G-1に概要を示したプロセスに従ってください。特定の項の情報でも問題を解決できない場合は、このプロセスの次のステップに進んでください。
表G-1 この章の情報を利用するプロセス
手順 | 使用する項 | 目的 |
---|---|---|
1 |
ADFアプリケーションのビュー・レイヤーのトラブルシューティングを開始します。この項に示す手順によって、幅広い問題に迅速に対応できます。 |
|
2 |
ADFアプリケーションのビュー・レイヤーに関する問題別トラブルシューティングの手順を実行します。この項では、次の内容について説明します。
|
|
3 |
My Oracle Supportを使用してその他のトラブルシューティング情報を取得します。My Oracle Support Webサイトから、ナレッジ・ベース記事、コミュニティ・フォーラム、ディスカッション・ページへのリンクを含むいくつかの有益なトラブルシューティング・リソースにアクセスできます。 |
|
4 |
この章とMy Oracle Supportの情報では問題を解決できない場合に、サービス・リクエストを記録します。サービス・リクエストを記録するには、 |
Oracle ADFの組込みエラー・メッセージによって、アプリケーションのどのレイヤーが問題の原因となっているかを判別できます。エラー・メッセージは、トラブルシューティングの開始点です。エラー・メッセージでエラー・メッセージを検索できます。また、Webで特定のエラー・メッセージを調べることもできます。ADFビジネス・コンポーネントのモデル・レイヤーから発生するエラー・メッセージにはJBO接頭辞が付きます。これらは、ADF Facesビュー・レイヤーも含めて他のすべてのADFレイヤー・コンポーネントと同様に、Javaエラー・メッセージとして、Oracleパッケージとともに表示されます。
レイヤーを特定できたら、診断ツールを実行することもできます。また、ログ・ファイルを表示して記録されたエラーがないか確認することもできます。Oracle Technology Networkの技術フォーラムで、エラー・メッセージ関連のディスカッションを検索できます。Oracle ADFのコンポーネント・レイヤーには、それぞれ専用のフォーラムが設定されています。Oracle Technology Network(https://forums.oracle.com/forums/main.jspa?categoryID=84
)の開発ツール・リストの下にあるJDeveloperおよびOracle ADFのフォーラム・ホームページにアクセスしてください。
トラブルシューティングを開始する前に、エラーを簡単に検索できるようにADFアプリケーションを構成しておく必要があります。表G-2では、トラブルシューティング用にADFアプリケーションのビュー・レイヤーを構成する際の設定の概要を示しています。
表G-2 ADF Facesトラブルシューティング最適化の構成オプション
構成に関する推奨事項 | 説明 |
---|---|
デバッグ出力を有効化します。 |
デバッグ出力を有効化するには、 <adf-faces-config xmlns=
"http://xmlns.oracle.com/adf/view/faces/config">
<debug-output>true</debug-output>
<skin-family>oracle</skin-family>
</adf-faces-config>
WebブラウザでのHTMLマークアップの可読性を次のように改善します。
|
コンテンツ圧縮を無効化します。 |
コンテンツ圧縮を無効化するには、 <context-param> <param-name> org.apache.myfaces.trinidad.DISABLE_CONTENT_COMPRESSION </param-name> <param-value>true</param-value> </context-param> 元の圧縮されていないスタイルを強制的に使用して、可読性を改善します。 コンテンツ圧縮を無効にしないかぎり、CSSスタイル名とスタイルは圧縮されて表示されるため、読み取りにくいことがあります。コンテンツ圧縮の無効化が読みやすさに及ぼす影響の詳細は、『ADFスキンの開発』のWebアプリケーションへの終了済ADFスキンの適用に関する項を参照してください。 |
JavaScript圧縮を無効化します。 |
JavaScript圧縮を無効化するには、 <context-param> <param-name> org.apache.myfaces.trinidad.DEBUG_JAVA_SCRIPT </param-name> <param-value>true</param-value> </context-param> 通常は曖昧化されているJavaScriptをソースとして圧縮されない状態で表示できるようにします。 |
クライアント・サイドのアサートを有効化します。 |
クライアント・サイドのアサートを有効化するには、 <context-param> <param-name> oracle.adf.view.rich.ASSERT_ENABLED </param-name> <param-value>true</param-value> </context-param> 予期しない状態の警告をブラウザ・コンソールに出力できるようにします。 |
クライアント・サイドのロギングを有効化します。 |
クライアント・サイドのロギングを有効化するには、 <context-param> <param-name> oracle.adf.view.rich.ASSERT_ENABLED </param-name> <param-value>true</param-value> </context-param> ログ・メッセージをブラウザ・コンソールに出力できるようにします。 クライアント・サイドのロギングを有効にしないかぎり、ログ・メッセージはクライアントに報告されません。 |
より詳細なサーバー・サイドのロギングを有効化します。 |
より詳細なサーバー・サイドのロギングを有効化するには、アプリケーション・サーバーをシャットダウンし、次の設定を
または 次のWLSTコマンドを使用します。
または Oracle Enterprise Manager Fusion Middleware Controlで、構成ページを使用して より詳細なログ・メッセージをブラウザ・コンソールに出力できるようにします。 サーバー・サイドのロギングをログ・レベルCONFIGまたはそれ以上で構成しないと、有益な診断メッセージは報告されないことがあります。 使用可能なログ・レベルの設定は、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST、ALLです。CONFIGレベル以上の設定をお薦めします。デフォルトはSEVEREです。 |
HTTPキャッシュ・ヘッダーを無効化します。 |
HTTPキャッシュ・ヘッダーを無効化するには、 <context-param> <param-name> org.apache.myfaces.trinidad.resource.DEBUG </param-name> <param-value>true</param-value> </context-param> パッチ適用済リソースのリロードを強制します。 HTTPキャッシュ・ヘッダーが無効化されないかぎり、ブラウザはリソースをキャッシュして、リソースへの高速アクセスを可能にします。 設定を変更した後で、ブラウザのキャッシュをクリアしてリソースのリロードを強制します。 |
この項では、ADF Facesテスト自動化フレームワークを使用する場合のベスト・プラクティスについて説明します。
テストの自動化を有効にするには、アプリケーション内のweb.xml
ファイルのoracle.adf.view.rich.automation.ENABLED
パラメータを設定します。このパラメータは、自動化が使用中であることをADF Facesに通知し、外部コンポーネントのid
属性を有効にします。このパラメータで有効化されるのはテスト自動化のインフラストラクチャのみであり、テスト自体は開始されません。テストを開始するには、オープン・ソースのSelenium IDEのようなツールが必要になります。
内部コンポーネントのid
に依存する作成したテストでは、常に値があることが保証されます。デメリットは、内部コンポーネントのid
値がフレームワークの強化をサポートするためにADF Facesリリース間で変更される可能性があることです。したがって、コンポーネントのid
に依存しないようにテストを記述する必要があります。自動化されたテストをより堅牢に作成するために、絶対ロケータの id
属性に依存し、これらの属性に値があることを確認します。
oracle.adf.view.rich.automation.ENABLED
パラメータには、次の値を指定できます。
OFF: 自動化が無効であることを示します。これは、本番環境に適した設定です。
FULL: 自動化が使用中であることをADF Facesに通知し、外部コンポーネントのid属性を有効にします。この設定の使用の際は注意を払い、保護されたテスト環境でのみ使用します。
注意:
テスト自動化コンテキスト・パラメータをFULL
に設定すると、oracle.adf.view.rich.security.FRAME_BUSTING
コンテキスト・パラメータはnever
に設定された場合と同じように動作します。フレームバスティングを無効にした場合のセキュリティの結果として、ユーザーのアプリケーションのページは悪質なWebサイトからのクリックジャックに対して脆弱になります。このため、テスト自動化の使用を開発環境またはステージング環境に限定し、本番環境でテスト自動化を有効にしないでください。詳細は、「フレームバスティング」を参照してください。
SAFE: 自動化が使用中であることをADF Facesに通知し、外部コンポーネントのid属性を有効にします。この設定はFULLと同様で、セキュアな情報を処理する方法において次のような違いがあります。
フレーム・バストを無効化しません。つまり、oracle.adf.view.rich.security.FRAME_BUSTING
コンテキスト・パラメータは、これがneverに設定された場合と同じように動作しません。
JSESSIONID
が暗号化されます。
「バージョン番号情報」で説明するバージョン番号情報は、表示されません。
サーバーへのロギングは無効です。
パフォーマンスに関するヒント
テストの自動化を有効化すると、クライアント・コンポーネントがページのすべてのコンポーネントについて作成されます。したがって、本番環境ではこのパラメータをOFF
に設定します。
アプリケーションのweb.xml
ファイルで定義するoracle.adf.view.rich.automation.ENABLED
コンテキスト・パラメータは、EL結合可能です。たとえば、アプリケーションをテストの自動化モードをプログラム的に設定して、単一のテスト・ユーザー、アプリケーションのすべてのユーザーまたは特定のユーザー・グループで使用します。次の例は、EL式を使用してテストの自動化モードをテスト・ユーザーに設定する方法を示します。
<context-param> <param-name>oracle.adf.view.rich.automation.ENABLED</param-name> <param-value> #{securityContext.userName == 'testuser' ? 'SAFE' : 'OFF'} </param-value> </context-param>
自動化を有効にしてoracle.adf.view.rich.automation.ENABLED
をSAFE
またはFULL
に設定すると、応答Cookieが自動的に有効になります。この応答Cookieは、受信する自動化トラフィックをサーバーが制限できる自動化実行から、要求が行われていることを示します。
また、テスト自動化を有効化することによって、実行中のアプリケーションでアサーションが有効になります。使用しているアプリケーションで予想外のコンポーネント動作が発生し、新規アサーションの失敗エラーが表示されるようになったら、アプリケーション・コンポーネントの実装の詳細を調べる必要があります。たとえば、応答のなくなったユーザー・アクションなど、ポップアップ・ダイアログ関連の問題が発見されることは珍しいことではありません。
テスト自動化を有効にした後でのみアサーション失敗エラーを生成する既知のコーディング・エラーが表示されます。
ユーザーのコンポーネントでは、もはやページ定義ファイルに存在しないADFイテレータ・バインディングを参照します。アサーションが有効になっていない場合、このエラーは表示されず、存在していないイテレータを参照するコンポーネントはレンダリングしません。
ユーザーのコンポーネントは、レンダリングしないように定義されている部分トリガー・コンポーネントです(属性がrendered="false"
に設定されています)。たとえば、レンダリングされた属性の使用によってアサーション失敗エラーが発生します。
<af:button id="hiddenBtn" rendered="false" text="Test"/> <af:table var="row" id="t1" partialTriggers="::hiddenBtn">
このエラーの回避策として、rendered="false"
ではなく、visible="false"
に設定された属性を使用します。
ユーザーのコンポーネントは、イベントが適切なコンポーネント・ハンドラに到達できないようにするネスト化階層によって構成されています。たとえば、次のネスト化は正しくありません。
<af:commandLink <af:showPopupBehavior <af:image <af:clientListener
したがって、次のように書き直す必要があります。
<af:commandLink <af:image <af:showPopupBehavior <af:clientListener
注意:
システム管理者は、コマンド行フラグ-Doracle.adf.view.rich.automation.ENABLED=
automation-modeを指定してサーバーを起動することにより、スタンドアロンのOracle WebLogic Serverのレベルでテスト自動化を有効にできます。テスト自動化を有効にしてアプリケーション・サーバー・インスタンスでアプリケーションを実行すると、デプロイされたアプリケーションのweb.xml
ファイルのコンテキスト・パラメータの設定がオーバーライドされます。テストの自動化では、マウス・イベントをシミュレートして、マウス・イベントをテストすることができます。マウス・イベントをシミュレートするには、テスト・エンジンのマウス・クリック・シミュレートが発生する前に、テスト・シミュレート・マウス・クリックのための環境設定で使用できるテスト・ハーネスを最初に追加します。テスト・ハーネスは、次の関数をコールします。
AdfPage.prototype.simulateMouse = function(locator, mouseEvent)
関数をコールする前に、APIをコールするためのテスト・エンジンを更新する必要があります。
サンプルのAPIを次に示します。
/** * Simulate mouse type event using locator. * @param {String} locator locator string in the format <scopedId>#<subid> * @param {Object} javascript object containing a sparse set of mouse event name value pairs that will * be used to create a mouse event. Defaults will be used for any missing fields. * The defaults are as follows: * type: “click” * canBubble: true * cancelable:true * view: the current window * detail: 1 * screenX: 0 * screenY: 0 * clientX: the client location of the X coordinate of the center of the DOM * element returned by the locator * clientY: the client location of the Y coordinate of the center of the DOM * element returned by the locator * ctrlKey: false * altKey: false * shiftKey: false * metaKey: false * button: 0 * relatedTarget: null * If no mouseEvent is provided, a mouseEvent with all of the defaults will be used. * @abstract */
関数イベントの環境を準備した後、このメソッドは定義するテスト・エンジン・クラス・インスタンスに従います。これにより、テスト・エンジン・クラス・インスタンスは、使用する通常のテスト・エンジンを再び指してマウス・イベントをテストします。そのクラスは、マウス・イベントの起動前と同様に、通常のテスト手順をマウス・イベントで継続します。
新しいテスト・エンジンを作成し、新しい抽象APIクラスのインスタンスに指定します。テスト・エンジンの実装は、このメソッドをオーバーライドする必要があります。
AdfDhtmlTestEngine.prototype.simulateDomMouse = function(domElement, mouseEvent)
作成したばかりのテスト・フレームワーク・マウス・イベント・コードに追加する必要があるAdfDhtmlTestEngine
のインスタンスの例を次に示します。
/** * Used for testing a custom implementation of AdfDhtmlTestEngine. */ function CustomTestEngine() { } // make CustomTestEngine a subclass of AdfDhtmlTestEngine AdfObject.createSubclass(CustomTestEngine, AdfDhtmlTestEngine); /** * Simulate mouse event on a dom element. * @param {String} domElement the domElement receiving the mouse event * @param {Object} javascript object containing a sparse set of mouse event name value pairs. * @Override */ CustomTestEngine.prototype.simulateDomMouse = function(domElement, mouseEvent) { // Here, call your custom test framework to actually do the mouse event, now that the environment is all ready for this event. }
最後に、ADFで新しいテスト・エンジン・クラスが認識されます。これは、web.xml
パラメータを使用して指定できます。AdfPage.PAGE.simulateMouse()
のように、テスト設定コードが正常に機能するために、必要な設定操作の後にテスト・フレームワーク関数を呼出す必要がある場合、これは重要です。
<context-param> <description> This parameter specifies the automation test engine that is being used. </description> param-name>oracle.adf.view.automation.TEST_ENGINE</param-name> <param-value>CustomTestEngine</param-value>
この項では、一般的な問題と解決策について説明します。
ADFアプリケーションは、デフォルト・スキンとして簡単な、または最小限のルック・アンド・フィールを表示します。デフォルト・スキンの背景は白で表示されます。
原因
スキンのJARファイルがすべてのアプリケーションに対して正しくデプロイされているとはかぎりません。
解決策
この問題を解決するには、次のようにします。
スキン・アプリケーションは、イメージ・ファイルを含むADFライブラリのJARファイルとしてパッケージ化されている必要があります。
原因
スキンのJARファイルが正しくパッケージ化されていません。
解決策
この問題を解決するには、次のようにします。
作成したADFスキンで定義されたスタイル・プロパティでは、ブラウザで予想どおりにレンダリングされません。
原因
すべてのADFスキン・セレクタがカスタマイズできるとはかぎりません。有効でないセレクタをカスタマイズすると、アプリケーションで予期しない動作や一貫性のない動作が発生する場合があります。
解決策
この問題を解決するには、次のようにします。
web.xml
ファイルで確認します。CHECK_FILE_MODIFICATION
パラメータをtrue
に設定した場合、ADFスキンに加えたすべての変更がすぐに表示されるわけではありません。アイコンとADFスキンのプロパティに加えた変更を表示するには、Webアプリケーションを再起動する必要があります。様々なADFデータ視覚化(DVT)コンポーネントはFlashによって正しく表示されるため、プラットフォームやブラウザでFlashがサポートされていない場合、アプリケーションでDVTコンポーネントの視覚的な要素を表示できない場合があります。
原因
すべてのプラットフォームとブラウザでFlashがサポートされているわけではありません。このため、アプリケーションは使用可能な最善のフォールバックに強制的にダウングレードされます。プラットフォームがサポートされていない場合、アプリケーションでは、adf-config.xml
ファイルのflash-player-usage
の設定に従って表示されます。
解決策
この問題を解決するには、ブラウザに使用可能な最新のFlashバージョンを再インストールしてください。
クラスタ環境で実行するアプリケーションを設計している場合は、1つのリクエストよりも長い寿命のマネージドBeanがすべてシリアライズ可能であることを確認する必要があります。
原因
Fusion Webアプリケーションをクラスタ環境で実行する場合は、アプリケーションの状態の一部がシリアル化され、各リクエストの終わりに別のサーバーまたはデータ・ストアにコピーされるため、クラスタ内の他のサーバーがこの状態を利用できるようになります。具体的には、セッション・スコープ、ページ・フロー・スコープおよびビュー・スコープに格納されているBeanは、シリアライズ可能である必要があります(これらのBeanはjava.io.Serializable
インタフェースを実装しています)。
解決策
この問題を解決するには、次のようにします。
アプリケーションをMicrosoft Windows Internet Explorerで実行して問題を検証していますが、Mozilla Firefoxでアプリケーションを実行するときに、問題が再現されません。このような問題は視覚的な性質ものであることが多く、たとえば、Webページで領域を区切る余分の空白が意図せずに表示されることがあります。
原因
設定はブラウザ間で異なるため、アプリケーションの表示方法に違いが生じることがあります。
解決策
この問題を解決するには、次のようにします。
@agent
@ルールを構成して、必要なブラウザに固有の外観を定義します。詳細は、『ADFスキンの開発』の「@ルールの使用」の章を参照してください。アプリケーション・ページで、コンテンツが予想されている領域が空で表示されることがあります。
原因
この原因は、アプリケーションの設計によって異なります。たとえば、アプリケーションで実施している権限により、アプリケーションでのコンテンツの表示が無意識に妨害されていることがあります。または、ポートレットを使用しているとき、ポートレット・サーバーがダウンしている可能性もあります。
解決策
この問題を解決するには、次のようにします。
アプリケーションから予期しない場所でランタイム例外が返され、これは処理されません。
原因
ADF Facesはライフサイクルのあるフェーズで未処理の例外を受け取り、リクエスト処理を中止します。
解決策
この問題を解決するには、次のようにします。
アプリケーションは予期されるページに移動せず、HTTP 404のファイルが見つからないエラー、またはHTTP 500の内部サーバー・エラーが表示されます。
原因
この原因は、アプリケーション・サーバーまでトレースできる場合があります。
解決策
この問題を解決するには、次のようにします。
アプリケーションでは、予期しているターゲットWebページへ移動して、そのページを開くことができません。
原因
この原因はアプリケーションの設計によって異なったり、アプリケーション・サーバーまでトレースできる場合があります。
解決策
この問題を解決するには、次のようにします。
Oracle Fusion Middlewareの問題の解決にMy Oracle Support (以前のMetaLink)を使用できます。My Oracle Supportには、次のような有用なトラブルシューティング・リソースが含まれています。
ナレッジ・ベース記事
コミュニティ・フォーラムとディスカッション
パッチとアップグレード
動作保証情報
注意:
My Oracle Supportを使用してサービス・リクエストを記録することもできます。
My Oracle Supportには、https://support.oracle.com
からアクセスできます。