ヘッダーをスキップ
Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド
11gリリース1 (11.1.1.7.0)
B52028-05
  目次へ移動
目次

前
 
次
 

31 ADFコンポーネントのテストとデバッグ

この章では、Oracle Application Development Framework (Oracle ADF)を使用するアプリケーションのロギングおよびテストを行うツールについて説明します。ADF宣言デバッガを使用してブレークポイントを設定するデバッグ手順も示します。最後に、ADFビジネス・コンポーネント・ベースのビジネス・サービスに対する回帰テストを記述し、実行する方法について説明します。

この章の内容は次のとおりです。

31.1 ADFのデバッグの概要

WebアプリケーションとOracle Application Development Framework (Oracle ADF)との対話のデバッグは、他のデバッグ・タスクと同様に、特定の要因を切り分けするプロセスです。ただし、Webアプリケーションの場合は一般に、このプロセスでJavaソース・コードのコンパイルが行われません。このため、Webページにはコンパイル用のJavaソース・コードは含まれません。実際には、アプリケーションを実行して使用してみるまで、問題が存在しているかわからないことがあります。たとえば、次のような障害は実行時に初めて現れます。

データを表示できない、またはメソッド・コールを実行できない場合、WebページのコンポーネントとADFモデル・レイヤーの間の対話に原因があります。ADFライフサイクル処理中にランタイム・エラーが観測されると、モデルの準備、値の更新、アクションの起動、データのレンダリングという一連の処理の完了が失敗します。

幸い、WebアプリケーションとOracle ADFの対話における失敗は、アプリケーションにより定義された宣言情報か、ページのADFバインディング・コンテナのランタイム・オブジェクトにアクセスするEL式の中にある、修正が容易な単純なエラーが原因であることがほとんどです。

データバインド済Fusion Webアプリケーションでランタイム障害が観測された場合は、その原因として考えられる宣言情報とEL式を調べる必要があります。宣言ファイルの編集を理解するには、31.2項「単純なOracle ADFコンパイル・エラーの修正」および31.3項「単純なOracle ADFランタイム・エラーの修正」を参照してください。

最も役に立つ診断用ツールのうちの1つが、ADFロガーです。JDeveloperでは、このロギング・メカニズムを使用して実行時トレース・メッセージを取得します。ADFロギングが有効になっている場合、JDeveloperにより、メッセージ・ログ・ウィンドウ内にアプリケーション・トレースが表示されます。このトレースには、アプリケーション・エラーの原因をすぐに特定できるランタイム・メッセージが含まれます。詳細なトレース・メッセージが表示されるようにADFロガーを構成するには、31.5項「ADFロガーの使用」を参照してください。

サポート契約を締結しているOracle ADFのお客様については、Oracle Worldwide SupportにOracle ADFソース・コードをリクエストできます。これにより、ADFビジネス・コンポーネント・フレームワーク・コードを非常に簡単にデバッグできます。Oracle ADFソース・コードを使用するためのJDeveloperの構成方法は、31.7.1項「デバッガでのADFソース・コードの使用」を参照してください。

エラーを簡単に特定できない場合は、JDeveloperでADF宣言デバッガを使用してブレークポイントを設定することができます。ブレークポイントに達すると、アプリケーションの実行が一時停止され、ADFバインディング・コンテナの作業対象データを調べて、予測されるデータと比較することができます。ブレークポイントのタイプによっては、ステップ機能を使用して、1つのブレークポイントから別のブレークポイントに移動することができます。デバッガの詳細は、31.7項「ADF宣言デバッガの使用」を参照してください。

JDeveloperでは、回帰テスト・ケースを生成するウィザードにより、Fusion WebアプリケーションのためのJUnitとの統合が提供されます。アプリケーションのテスト・スイートの記述方法は、31.10項「JUnitを使用した回帰テスト」を参照してください。

31.2 単純なOracle ADFコンパイル・エラーの修正

JDeveloperで、Webページを作成し、ADFデータ・コントロールを使用してADFバインディング定義を作成するとき、編集するOracle ADF宣言ファイルは、Oracle ADFにより定義されたXMLスキーマに準拠している必要があります。XML構文エラーが発生すると、JDeveloper XMLコンパイラによって即時に構造ウィンドウ内にエラーが表示されます。

設計時に多少の構文チェックが行われますが、JDeveloperコンパイラには現在、EL式を解決できないという制限があります。Webページ内のEL式は、Web環境における様々なランタイム・オブジェクト(WebページのADFバインディング・コンテナなど)と直接対話します。現在、EL式内のエラーは実行時にしか観測できません。このため、オブジェクト・アクセス式に入力エラーが1つ存在していても、コンパイラによって検出されず、実行時にバインディング・コンテナと対話できないこと、またページにデータが表示されないことでエラーが明らかになります。ラインタイム・エラーのデバッグの詳細は、31.3項「単純なOracle ADFランタイム・エラーの修正」を参照してください。


ヒント:

JDeveloperの式ビルダーは、オブジェクト、マネージドBeanおよびプロパティのリストを提供することでEL式の作成を支援するダイアログです。また、ADFバインディング・オブジェクトの階層リストやその有効なプロパティが提供され、選択できるため、ADFデータバインド式の作成や編集に特に便利です。入力エラーを未然に防ぐために、式ビルダーを使用してください。詳細は、12.7項「ADFデータ・バインディングEL式の作成」を参照してください。


例31-1に、ページ定義ファイルに含まれている単純なコンパイル・エラーを2つ示します。trueとなるところがtruに、id="CountryCodesView1Iterator"/>となるところがid="CountryCodesView1Iterator"/ (つまり、IDに山カッコ閉じがない)となっています。

例31-1 2つのエラーが含まれているサンプル・ページ定義ファイル

<?xml version="1.0" encoding="UTF-8" ?>
<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
                version="11.1.1.42.54" id="app1page_2PageDef"
                Package="project1.pageDefs">
  <parameters/>
  <executables>
    <iterator Binds="CountryCodesView1" RangeSize="10"
              DataControl="AppModuleDataControl"
              id="CountryCodesView1Iterator"/ 
  </executables>
  <bindings>
    <action id="Find" RequiresUpdateModel="tru" Action="3"
             IterBinding="CountryCodesView1Iterator"/> 
 

コンパイル時には、図31-1に示すように、構造ウィンドウにページ内のXMLエラーが表示されます。

図31-1 構造ウィンドウに表示されたXMLエラー

「構造」ペインのXMLエラー

コンパイラ-ログ・ウィンドウには、図31-2に示すように、ページ内のコンパイル・エラーも表示されます。

図31-2 コンパイラ・ウィンドウに表示されたXMLコンパイル・エラー

コンパイル・エラー

スキーマ検証エラーを確認し、修正するには:

  1. メイン・メニューで「表示」→「構造」を選択して構造ウィンドウを開くか、「表示」→「ログ」を選択してログ・ウィンドウを開きます。

  2. いずれかのウィンドウで、エラー・メッセージをダブルクリックしてXMLエディタでファイルを開きます。

  3. XMLエディタで、強調表示された行を特定します。

    エラーのある行が強調表示されます。

  4. エラーを修正します。

    エラーを修正すると、それに対応するエラー・メッセージは自動的に構造ウィンドウから削除されます。

  5. 必要であれば、プロジェクトを再コンパイルします。「実行」→「メイク」を選択し、コンパイラでエラー・メッセージがまだ生成されるかどうかをチェックします。

31.3 単純なOracle ADFランタイム・エラーの修正

ADFモデル・レイヤーの障害はJDeveloperコンパイラでは検出できません。1つには、ページのデータ表示とメソッド実行の動作が宣言ADFページ定義ファイルに依存するためです。ADFモデル・レイヤーはこのような宣言ファイルを実行時に使用して、ADFバインディング・コンテナのオブジェクトを作成します。

スキーマ検証だけでなく、Webページを定期的に実行およびテストして、次のいずれの条件も存在していないことを確認すると効果的です。

このような一般的なエラーのリストを調べても、ランタイム・エラーの特定と解決ができない場合は、原因を特定するためにJDeveloper内部のデバッグを開始できます。ADFアプリケーションの場合は、問題を特定するためにADF宣言ブレークポイントの設定を開始します。ADF宣言デバッガを使用してADF宣言ブレークポイントを設定する方法は、31.7項「ADF宣言デバッガの使用」31.8項「ADF宣言ブレークポイントの設定」で説明します。このプロセスでは、アプリケーションを実行する際に一時停止してデータを調査します。また、ADF宣言デバッガを使用してJavaコード・ブレークポイントを設定することもできます。31.9項「Javaコード・ブレークポイントの設定」を参照してください。

31.4 ADFコントローラのメタデータの検証

ADFコントローラがメタデータを取得すると、基本的な検証が実行されます。デフォルト・アクティビティがないタスク・フローなど、最も重大なエラーでは例外が解析されます。

adf-config.xmlenable-grammar-validation設定を使用すると、アプリケーションのデプロイ前にADFコントローラのメタデータの文法を検証できるようになります。enable-grammar-validationtrue設定すると、ADFコントローラのメタデータはADFコントローラのXSDに対して検証されます。たとえば、ビュー・アクティビティIDのスラッシュ(/)など、ADFコントローラのメタデータの無効な文字は、例外としてフラグを立てられます。

デフォルトでは、enable-grammar-validationfalseに設定されています。パフォーマンス上の理由から、アプリケーションの開発時またはトラブルシューティング時にのみ、trueに設定してください。

31.5 ADFロガーの使用

Webページまたはその対応するページ定義ファイル内でエラーが簡単に見つからない場合、JDeveloperのデバッグ・ツールを使用して、アプリケーションの障害の発生箇所を調べることができます。

Oracle Fusion Middlewareコンポーネントは、Oracle Diagnostic Logging (ODL)形式で診断ログ・ファイルを作成します。ログ・ファイルの名前とログ・ファイルの内容の形式は、Oracle標準に準拠します。デフォルトでは、診断メッセージはテキスト形式です。ODL形式の詳細は、『Oracle Fusion Middleware管理者ガイド』を参照してください。

Javaロガーを設定してJava診断メッセージを表示することもできます。どのロギング形式を選択する場合でも、いくつかのロギング・レベルを設定して、表示されるメッセージのレベルと数を制御することができます。

Oracle Diagnostic Logging Configurationでは、概要エディタを使用してlogging.xmlファイルを編集することでロギング・セッションを構成できます。永続ロガーと一時ロガー両方のロギング・レベルを設定し、各ロガーのハンドラを宣言できます。ロギング構成は、いつでも(アプリケーションがJDeveloperで実行していても)設定できます。

ログを作成した後で、Oracle Diagnostic Log Analyzerでログ・メッセージを表示してフィルタ処理できます。このツールを使用すると、様々なログ・レベルでのフィルタ設定、メッセージの時間枠の定義、およびメッセージ・テキストの検索を行うことができます。

続いてADF宣言デバッガを使用して、ブレークポイントを設定し、アプリケーションを調べることができます。詳細は、31.8項「ADF宣言ブレークポイントの設定」と、31.9項「Javaコード・ブレークポイントの設定」を参照してください。

31.5.1 診断ロギングを有効化する方法

実際のデバッガを使用する前でも、フレームワーク診断ロギングをオンにしてアプリケーションを実行すると、問題発生時に何が起きたかを調べるために役立ちます。診断ロギングをオンにするには、Javaシステム・プロパティjbo.debugoutputの値をconsoleに設定します。さらに、値ADFLoggerを設定すると、診断を標準ロガー実装にルーティングできます。これは、logging.xmlファイルを介して標準の方法で制御できます。

JDeveloper内部でのアプリケーションの実行中、このシステム・プロパティを設定する最も簡単な方法は、プロジェクト・プロパティを編集し、「実行/デバッグ」ページで実行構成を選択して、「編集」をクリックすることです。次に、文字列-Djbo.debugoutput=console「Javaオプション」フィールドに追加します。

31.5.2 Oracle ADFデバッグ構成の作成方法

ADF Facesでは、デバッグ・セッションの実行時にロギング機能を提供するために、JavaロギングAPI(java.util.logging.Logger)を使用します。Java Loggingは、Javaプラットフォーム(http://download.oracle.com/javase/1.4.2/docs/guide/util/logging/overview.html)から入手できる標準APIです。

ADFモデルのデバッグ構成を作成するには:

  1. 「アプリケーション・ナビゲータ」で、ユーザー・インタフェース・プロジェクトをダブルクリックします。

  2. 「プロジェクト・プロパティ」ダイアログで「実行/デバッグ/プロファイル」ノードをクリックし、新しい実行構成を作成します。

  3. 「実行構成」リストで、新しい実行構成をダブルクリックして、プロパティを編集します。

  4. 「実行構成の編集」ダイアログの「起動設定」で、デフォルトの仮想マシンに対して次のJavaオプションを入力します。

    -Djbo.debugoutput=adflogger -Djbo.adflogger.level=FINE

    詳細な診断メッセージを表示する場合は、level=FINEに設定します。

ADFビューJavascriptロギング構成を作成するには:

  1. アプリケーション・ナビゲータで、アプリケーションまたはプロジェクトのweb.xmlファイルをダブルクリックします。

  2. ソース・エディタで、次の要素をファイルに追加します。

    <context-param>
      <param-name>
         oracle.adf.view.rich.LOGGER_LEVEL
      </param-name>
      <param-value>
          FINE
      </param-value>
    </context-param>
    

31.5.3 ADFロギング・レベルを設定する方法

Oracle Diagnostic Logging Configurationの概要エディタを使用して、logging.xmlファイルに指定されるロギング・レベルを構成できます。このファイルを構成できるのは、アプリケーションを統合WebLogic Serverで実行する前と実行しているときです。サーバーを再起動しなくても変更内容が適用されます。

統合WebLogic Serverが実行しているとき、永続ロガーと一時ロガーの両方を定義できます。統合WebLogic Serverが実行していないときは、永続ロガーしか定義できません。一時ロガーはセッションの間のみ存続し、logging.xmlには入力されません。サーバーが実行していない場合は、次の実行時に更新が有効になるように、構成の変更内容を明示的にlogging.xmlに保存する必要があります。

Oracle Diagnostic Logging Configurationの概要エディタは、アプリケーション・サーバー・ナビゲータまたはログ・ウィンドウ(図31-3)から利用できます。

図31-3 ログ・ウィンドウとツールバー

ログ・ウィンドウとツールバー

ただし、サーバーが実行しているときにログ・ウィンドウのメニューからエディタにアクセスすると、一時ロガーを追加する機能がエディタに含まれます。

図31-4にサーバーが実行しているときのOracle Diagnostic Logging Configurationを示します。

図31-4 Oracle Diagnostic Logging Configurationの概要エディタ

Oracle Diagnostic Logging Configurationの概要エディタ

JDeveloperのメニュー・コマンドを使用してlogging.xmlファイルを開いて、Oracle Diagnostic Logging Configurationの概要エディタを起動します。ただし、ファイルの場所に関して次に示す情報が役立つことがあります。


注意:

ログ・ハンドラ定義を宣言して追加するには、「ソース」タブをクリックして、定義をXMLエディタに入力します。


WindowsプラットフォームのJDeveloperで統合WebLogic Serverを使用している場合、logging.xmlファイルは次のような場所にあります。

C:\Documents and Settings\username\ApplicationData\JDeveloper\latest_system_ folder\DefaultDomain\config\fmwconfig\servers\DefaultServer

統合WebLogic Serverのログ・ファイルは次のような場所にあります。

C:\Documents and Settings\username\ApplicationData\JDeveloper\latest_system_ folder\DefaultDomain\servers\DefaultServer\logs

スタンドアロンWebLogic Serverインスタンスのログ・ファイルは次のような場所にあります。

$domain_home/servers/your_servername/logs

ロギング・レベルは、テスト実行の前にアプリケーション・サーバー・ナビゲータで、またはデバッグ・セッション中にログ・ウィンドウのメニューで構成できます。

ログ・レベルを構成するには:

  1. アプリケーション・サーバー・ナビゲータで「IntegratedWebLogicServer」を右クリックし、「"サーバー名"に対するOracle Diagnostic Loggingの構成」を選択します。

    または、ログ・ウィンドウの「アクション」メニューから「Oracle Diagnostic Loggingの構成」を選択します。

  2. Oracle Diagnostics Logging Configurationのエディタで「概要」タブをクリックし、表示するロガー・タイプについて「ODLログ・レベル」または「Javaログ・レベル」を選択します。

  3. 永続ロガーのみを表示する場合は、「一時ロガーの非表示」を選択します。

  4. ロガーを追加するには次のようにします。

    1. サーバーが実行している場合は、「追加」アイコンのドロップダウン・メニューをクリックして、「永続ロガーの追加」または「一時ロガーの追加」を選択します。サーバーが実行していない場合は、「追加」をクリックして永続ロガーを追加します。一時ロガーは追加できません。

    2. 「ロガーの追加」ダイアログでロガーの名前を入力します。

    3. ロギング・レベルを選択します。

    4. 「OK」をクリックします。

  5. 新たに作成したロガーを含むすべてのロガーについて、ハンドラを指定できます。これには、使用可能なハンドラのリストから選択して、「ハンドラ宣言」セクションの「追加」アイコンをクリックします。

    または、「親ハンドラの使用」を選択して、親のハンドラをロガーに割り当てます。デフォルトではロガーは親のハンドラを使用します。


    注意:

    ログ・ハンドラ定義を宣言して追加するには、「ソース」タブをクリックして、定義をXMLエディタに入力します。


31.5.4 ログ・アナライザを使用してログ・メッセージを表示する方法

Oracle Diagnostic Log Analyzerを使用してログ・ファイルのログ・エントリを表示できます。ログ・アナライザでは、ログ・レベル、エントリ・タイプ、ログの時刻、エントリの内容によってエントリをフィルタ処理できます(問合せパネルを使用)。見やすくするために、メッセージの並替えや、列の表示と非表示の切替えを行うこともできます。

図31-5に、ODLログ・レベルの表示に設定されているOracle Diagnostic Log Analyzerを示します。

図31-5 Oracle Diagnostic Log AnalyzerでのODLログ・メッセージの表示

ログ・アナライザでのODLログ・メッセージの表示

他のテスト実行で作成されたログ・ファイルに対してもログ・アナライザを使用できます。たとえば、他のアプリケーションについて別の開発者から送信されたログを分析できます。

31.5.4.1 ログ・アナライザでの診断メッセージの表示

ロギング・レベルは、テスト実行の前にアプリケーション・サーバー・ナビゲータで、またはデバッグ・セッション中にログ・ウィンドウのメニューで構成できます。指定するレベルによって、ログ・メッセージのタイプと量が決まります。

ADFイベントの場合、ODLログについては「通知」レベルで、Javaログに関しては「情報」レベルで、すべてのメッセージが生成されます。「インシデント・エラー」/「重度」レベルや「エラー」/「警告」レベルでは、生成されるADFメッセージの数は少なくなります。

表示するメッセージのログ・レベルを選択した後で、ログ・メッセージ別ページの「検索」パネルを使用して、ログ・ファイルのメッセージをフィルタ処理して表示します。


注意:

ADF固有のメッセージを検索するために指定できる検索基準の詳細は、31.5.4.3項「ADFイベントに基づく診断メッセージのソート」を参照してください。


ログ・アナライザを開始するには、テスト実行の前は「ツール」メニューを使用し、デバッグ・セッション中はログ・ウィンドウのツールバーを使用します。

作業を始める前に、次のようにします。

ロギングの知識があると役立ちます。詳細は、31.5項「ADFロガーの使用」を参照してください。

次のタスクを完了します。

  1. ロギングを有効にします。31.5.1項「診断ロギングを有効化する方法」を参照してください。

  2. ロギング・レベルを設定します。31.5.3項「ADFロギング・レベルを設定する方法」を参照してください。

  3. テスト実行または別のソースからログ・ファイルを作成します。

ログ・アナライザを開始するには:

  1. メイン・メニューから「ツール」→「Oracle Diagnostic Log Analyzer」を選択します。

    あるいは、ログ・ウィンドウの「アクション」メニューで、「ログの分析」を選択して、「コンソールのカレント」または「選択項目を開く」(サーバー・ログ・ディレクトリのログ・ファイルを参照する)のいずれかを選択します。

  2. Oracle Diagnostic Log Analyzerのエディタで「ログ・メッセージ別」タブをクリックします。

  3. ログ・メッセージ別ページでログ・ファイルにナビゲートするか、ログ・ファイルのパスと名前を入力します。


    ヒント:

    「ログ・ファイルの選択」ダイアログを使用して、JDeveloperで生成されたログ・ファイルを含むディレクトリにナビゲートできます。「ログ」テキスト・フィールドの横の「ログ・ファイルの参照」アイコンをクリックし、スクロール・リストの「サーバー・ログ」アイコンをクリックします。ログ・ファイルのリストから、一度に分析する複数のログ・ファイルを選択できます。


  4. ドロップダウン・リストで「ODLログ・レベル」または「Javaログ・レベル」を選択します。

  5. 表示するログ・エントリのタイプごとに対応するチェックボックスを選択します。少なくとも1つのタイプを選択する必要があります。

    選択できるODLログ・レベルのタイプは次のとおりです。

    • インシデント・エラー

    • エラー

    • 警告

    • 通知(ADFイベント・メッセージに対応)

    • トレース

    • 不明

    選択できるJavaログ・レベルのタイプは次のとおりです。

    • 重度

    • 警告

    • 情報(ADFイベント・メッセージに対応)

    • 構成

    • 普通

    • 詳細

    • 最も詳細

    • 不明

  6. 表示するエントリの期間を指定します。一番新しい期間または範囲を選択できます。

  7. 結果をフィルタ処理するには、「検索」パネルを使用してログでテキスト・パターンを問い合せます。追加の「検索」パネルを使用するには、「追加」をクリックします。サポートされる検索基準は次のとおりです。

    • 詳細: メソッドが起動されたスタックの文からテキストをフィルタ処理します。

    • メッセージ: ロギングされたメッセージのテキストをフィルタ処理します。

    • ADFコンテキスト・データ: ADFイベントの実行中にロギングされた、ADFライフサイクル・フェーズ名、ビュー・オブジェクト名、ビュー・オブジェクト問合せ文、データ・コントロール名、バインディング・コンテナ名、イテレータ・バインディング名に関連するデータのログをフィルタ処理します。

    • ソース・メソッド: メッセージがロギングされるメソッドごとにログをフィルタ処理します。たとえば、メソッドexecuteについてフィルタ処理すると、ビュー・オブジェクトの問合せ実行またはADFライフサイクル・フェーズ実行でロギングされたすべてのメッセージを表示できます。

    • アプリケーション: メッセージがロギングされるアプリケーション名ごとにログをフィルタ処理します。これが役立つのは、アプリケーションがコンポジット・アプリケーション内で実行しているときに、特定のアプリケーションのメッセージを表示する場合です。

    • ソース・クラス: メッセージがロギングされるメソッドの完全修飾クラス名ごとにログをフィルタ処理します。表示されるメッセージ数を増やすには、パッケージ名の一部を入力します。たとえば、パッケージ名の一部oracle.adfや完全なパッケージ名oracle.jboを入力すると、Oracle ADFに関連するすべてのクラスについてフィルタ処理できます。

    • モジュール: メッセージがロギングされるクラスの完全修飾パッケージ名ごとにログをフィルタ処理します。これはソース・クラスと同じパッケージです。

    • メッセージID: ロギングされたメッセージのIDごとにログをフィルタ処理します。IDが同じメッセージが多数あります。たとえば、メッセージID ADFC-52008には、4つのINFOメッセージと1つのWarningメッセージがあります。ログ・アナライザの「結果」パネルで「IDでグループ化」を選択すると、共通のIDでメッセージをグループ化できます。

  8. フィルタを開始して、ログ・メッセージを表示するには、「検索」をクリックします。

  9. メッセージID順に結果を並べるには、「IDでグループ化」チェックボックスを選択します。

  10. 期間別またはリクエスト別にメッセージをグループ化するには、「関連付け」列で「時間による関連付け」または「リクエストによる関連付け」を選択します。

  11. 「結果」セクションで列の表示と非表示を切り替えるには、列ヘッダーの右側のドロップダウン・リストをクリックし、表示される列のリストを選択して、列の表示状態を変更します。

31.5.4.2 ADFリクエストを分析するためのログ・アナライザの使用

OracleではOracle ADFソース・コードを使用して、ADFライフサイクル・フェーズの実行中にログ・メッセージを生成するため、ログ・アナライザを使用すると、実行中のアプリケーションでのアクティブな(または以前の)ページ・リクエストの詳細を調査できます。特に、ログ・アナライザのADFリクエスト別ページでは、実行順に整理された階層リストでADFイベント・メッセージを表示できます。また、各イベントのグラフィック表示も提供されます。アプリケーションを実行して、ADFロギングが構成されたログ・アナライザを開始したとき、実行時間が通常よりも長い場合は、このページを使用すると、アプリケーションのコンポーネントがパフォーマンス・ボトルネックに関与しているかどうかをすぐに判断できます。


注意:

ログ・メッセージ別ページとは異なり、ログ・アナライザのADFリクエスト別ページにはADFイベント・メッセージが階層で表示されます。この2つのページの違いは、ADFリクエスト別ページでは、ページまたはリージョンの発行時に行われたADFページ・リクエストのみが表示されることと、複数のADFリクエストについてロギングされたメッセージを調べるためのオプションがあることです。ADFページ・ライフサイクルの詳細は、第21章「Fusionページ・ライフサイクル」を参照してください。


ADFリクエスト別ページの「検索」パネルを使用すると、ログ・ファイルの特定のリクエストを1つ以上表示できます。「検索」パネルでは次の検索基準を任意に組み合せることができます。

  • 表示するリクエストの数

  • ログに記録されたリクエストのタイムスタンプ

  • ログインしているユーザー名、コンポジット・アプリケーションのアプリケーション名、またはリクエスト・ヘッダーに表示されるページ名

ページ・リクエストが完了する前に、これらの基準のいずれかについて検索すると、ログ・アナライザの「ADF Webリクエスト」パネルにフェーズが完了していないことを示す黄色の三角形が表示されます。図31-6に、JSFライフサイクルのレスポンス・レンダリング・フェーズのアイコンとリクエスト全体のルート・ノードを示します。ログの最新情報で「ADF Webリクエスト」パネルを更新するには、パネル・ヘッダーのリフレッシュ・アイコンをクリックします。

図31-6 Oracle Diagnostic Log Analyzerでの進行中のADF Webリクエストの表示

ログ・アナライザでの進行中のADF Webリクエストの表示

リクエストが完了すると、ログ・アナライザに各フェーズの期間を示す棒グラフが表示され、ページ・リクエスト全体に対する各イベントのリクエスト時間の割合が示されます。図31-7に示す「ADF Webリクエスト」パネルでは、JSFライフサイクルのレスポンス・レンダリング・フェーズについて、ページ・リクエスト全体に対する一部の期間として34015ミリ秒(34秒)と表示されます。この例では、期間が通常長いレンダリング・フェーズを示して、ページ・リクエストの実行中に発生する可能性があるパフォーマンス・ボトルネックを特定するために棒グラフが役立つことを説明します。リクエスト・イベント階層のルート・ノード(ADF Webリクエスト)の棒グラフは合計実行時間を示します。


注意:

リクエスト時間の割合の棒グラフの2色(緑色とオレンジ色)は、リクエストの実行時間のうち、ADFソース・コードのADFイベント・メッセージの生成に使用された部分と、使用されなかったADFソース・コードの部分(ADFイベント・メッセージを生成できない)に基づく時間を示します。また、リクエストの個々のフェーズを合計しても合計のリクエスト時間と等しくならないことに注意してください。これは、ライフサイクルの有効なフェーズのみがログ・アナライザに表示されるためです。


図31-7 Oracle Diagnostic Log Analyzerでの完了したADF Webリクエストの表示

ログ・アナライザでの完了したADF Webリクエストの表示

リクエストをさらに詳しく調べるには、ADFライフサイクル・ノードのツリーを展開して、アプリケーションのどこでパフォーマンス・ボトルネックが発生したかを調査します。「ADF Webリクエスト」パネルでドリルダウンしてADFイベント・ノードを選択すると、各ADFイベントに関連付けられたコンポーネントの詳細が表示されます。たとえば、JSFライフサイクルのレスポンス・レンダリング・フェーズのノードを展開すると、そのフェーズで生成されたすべてのADFイベントが表示されます。図31-8に、展開されたJSFライフサイクルのレスポンス・レンダリング・フェーズのノードを示します。リクエスト期間を表す長い棒グラフが表示されたイテレータ・バインディングの実行のノードと「問合せの実行」ノードがあります。「問合せの実行」ノードが選択されており、ビュー・オブジェクト名や問合せ文を含む詳細なADFデータがパネルの下部に表示されます。棒グラフが示す実行時間が長いADFイベントをドリルダウンして選択することで、たとえば、データ・モデル・プロジェクト内のビュー・オブジェクト名を取得できます。パフォーマンスを改善するためにはこれをチューニングする必要があります。

図31-8 Oracle Diagnostic Log AnalyzerでのADFイベント・メッセージとADFデータの表示

ログ・アナライザでのADFイベント・メッセージとADFデータの表示

作業を始める前に、次のようにします。

ロギングの知識があると役立ちます。詳細は、31.5項「ADFロガーの使用」を参照してください。

次のタスクを完了します。

  1. ロギングを有効にします。31.5.1項「診断ロギングを有効化する方法」を参照してください。

  2. ロギング・レベルを設定します。31.5.3項「ADFロギング・レベルを設定する方法」を参照してください。

    ADFイベント・メッセージをロギングするには、次のパッケージについて「通知」よりも限定的なODLログ・レベルまたは「情報」よりも限定的なJavaログ・レベルを構成しないでください。

    • oracle.adfでは、ADFモデル・データバインディング・レイヤーおよびADFコントローラ・ソース・コードのソース・コードで生成されるイベントがロギングされます。

    • oracle.jboでは、ADFビジネス・コンポーネントで実行されるソース・コードで生成されるイベントがロギングされます。

    • oracle.adfinternalでは、Oracle ADF内部クラスから実行されるソース・コードで生成されるイベントがロギングされます。


    ヒント:

    Oracle Diagnostics Logging Configurationの概要エディタによって表示されるルート・ログ出力のデフォルト・ログ・レベルでは、ADFイベント・メッセージのロギングが保証されます。


  3. テスト実行または別のソースからログ・ファイルを作成します。

ログ・アナライザでADFリクエスト・メッセージを表示するには:

  1. メイン・メニューから「ツール」→「Oracle Diagnostic Log Analyzer」を選択します。

    あるいは、ログ・ウィンドウの「アクション」メニューで、「ログの分析」を選択して、「コンソールのカレント」または「選択項目を開く」(サーバー・ログ・ディレクトリのログ・ファイルを参照する)のいずれかを選択します。

  2. Oracle Diagnostic Log Analyzerのエディタで「ADFリクエスト別」タブをクリックします。

  3. ADFリクエスト別ページで、表示する最新リクエストの数を指定します。

    デフォルトでは一番新しいリクエスト1つしか表示されません。

  4. 表示するエントリの期間を指定します。一番新しい期間または範囲を選択できます。

  5. 表示するリクエストをフィルタ処理するには、「検索」パネルを使用してログでテキスト・パターンを問い合せます。追加の「検索」パネルを使用するには、「追加」をクリックします。サポートされる検索基準は次のとおりです。

    • ログイン・ユーザーの名前。特定のユーザーまたはanonymous (未認証ユーザーの場合)を指定できます。

    • アプリケーション名。これが役立つのは、アプリケーションがコンポジット・アプリケーション内で実行しているときに、特定のアプリケーションのメッセージを表示する場合です。

    • JSFページ名(ファイル名拡張子なし)。ログでは、リクエスト・ヘッダーのページ名が記録されます。発行されたページがorderSummary.jspxの場合、ロガーによってリクエスト・ヘッダーのorderSummaryが記録されます。リクエスト・ヘッダーは、ADFリクエスト別ページの「ADF Webリクエスト」パネルのヘッダー(折りたたみ可能)にも表示されます。

  6. フィルタ処理を開始して、ADFリクエストのADFイベント・メッセージを表示するには、「検索」をクリックします。

  7. 「ADF Webリクエスト」パネルで、完了したADFリクエストを展開し、「リクエスト時間」の棒グラフに基づいて実行時間が長いADFイベントを探します。

    ページ・リクエストが完了していない場合は、「ADF Webリクエスト」パネルに黄色の三角形が表示されます。しばらく待ってから、「ADF Webリクエスト」パネルの「リフレッシュ」アイコンをクリックします。

  8. 必要なADFイベントを選択し、ADFイベントに関連するADFコンポーネントの詳細を「ADFデータ」パネルで確認します。

  9. アプリケーションのコンポーネントを調べて、最適化が可能かどうかを判別します。

31.5.4.3 ADFイベントに基づく診断メッセージのソート

Oracleでは、ADFライフサイクル・フェーズの実行中、およびADFモデルのデータバインディング・レイヤー、ADFコントローラ・ソースおよびADFビジネス・コンポーネント・ソースで実行される操作中に、Oracle ADFソース・コードを使用してログ・メッセージが生成されます。ログ・アナライザではこれらのメッセージをまとめてADFイベントと呼びます。ログ・アナライザを使用して、実行中のアプリケーションのADFイベントを調査することができます。ログ・アナライザのログ・メッセージ別ページでは、ADFイベント・メッセージが実行時刻で整理されたフラット・リストで表示されます。ADFリクエスト別ページに切り替えて、実行順の階層リストでADFイベントを表示することもできます。

ADFイベント・メッセージには、アプリケーションのどのADFコンポーネントでイベントが生成されたかを特定するための情報が含まれます。たとえば、ADFイベント・メッセージのログを検索して、ページでのデータ表示、問合せの実行またはアクションの開始に関連するコンポーネントを識別できます。

  • Executing iterator binding: ページでのデータ表示を管理するために実行されたイテレータの名前を表示します。これは、問合せの更新が遅い場合の診断に役立ちます。

  • 問合せの実行: 実行された問合せに関連するビュー・オブジェクトの名前を表示します。これが役立つのは、問合せ文、バインド・パラメータおよびビュー・オブジェクト名を表示する場合です。

  • メソッド・バインディングの実行: バインド・データ・ソースに対して実行されたJavaメソッドの名前を表示します。これは、メソッドの実行が遅い場合の診断に役立ちます。

ログ・アナライザにADFイベント・メッセージを表示した後で、ロギングされた他のメッセージとの関係に基づいてイベントを整理することができます。次のように表示する項目に応じて「関連付け」列でオプションを選択できます。

  • ADFイベントまでのすべてのメッセージ(「時間による関連付け」)

  • ADFイベントと同じWebリクエストのすべてのメッセージ(「リクエストによる関連付け」)

  • 同じWebリクエストのADFイベント・メッセージのみ(「ADFリクエストによる関連付け」)


ヒント:

「ADFリクエストによる関連付け」ビューには、ADFイベント・メッセージの詳細なADFデータが表示されます。たとえば、このビューは、「問合せの実行」メッセージに関連する問合せ文を表示する場合に使用します。


図31-9に、ADFイベント・メッセージ「アプリケーション・モジュールの作成」に関するログ・アナライザの検索結果を示します。「結果」パネルに検索基準を満たすすべてのメッセージが表示され、下部のパネルにはコンポーネントの詳細情報が表示されます。

図31-9 Oracle Diagnostic Log AnalyzerでのADFイベント・メッセージの表示

ログ・アナライザでのADFイベント・メッセージの表示

「結果」パネルの「関連付け」列で「ADFリクエストによる関連付け」を選択すると、ログ・アナライザはADFリクエスト別ページの表示に切り替わり、ADFイベント・メッセージが実行の依存関係を表す階層で表示されます。ログ・アナライザのADFリクエスト別ページは、パフォーマンスの問題の診断に適しています。ADFリクエスト別ページの詳細は、31.5.4.2項「ADFリクエストを分析するためのログ・アナライザの使用」を参照してください。ログ・メッセージ別ページでは、経過時間の情報は「結果」パネルで表示と非表示を切り替えることができます。

作業を始める前に、次のようにします。

ロギングの知識があると役立ちます。詳細は、31.5項「ADFロガーの使用」を参照してください。

次のタスクを完了します。

  1. ロギングを有効にします。31.5.1項「診断ロギングを有効化する方法」を参照してください。

  2. ロギング・レベルを設定します。31.5.3項「ADFロギング・レベルを設定する方法」を参照してください。

    ADFイベント・メッセージをロギングするには、次のパッケージについて「通知」よりも限定的なODLログ・レベルまたは「情報」よりも限定的なJavaログ・レベルを構成しないでください。

    • oracle.adfでは、ADFモデル・データバインディング・レイヤーおよびADFコントローラ・ソース・コードのソース・コードで生成されるイベントがロギングされます。

    • oracle.jboでは、ADFビジネス・コンポーネントで実行されるソース・コードで生成されるイベントがロギングされます。

    • oracle.adfinternalでは、Oracle ADF内部クラスから実行されるソース・コードで生成されるイベントがロギングされます。


    ヒント:

    Oracle Diagnostics Logging Configurationの概要エディタによって表示されるルート・ログ出力のデフォルト・ログ・レベルでは、ADFイベント・メッセージのロギングは保証されます。


  3. テスト実行または別のソースからログ・ファイルを作成します。

ADFイベントに関連付けられたメッセージを表示するには:

  1. メイン・メニューから「ツール」→「Oracle Diagnostic Log Analyzer」を選択します。

    あるいは、ログ・ウィンドウの「アクション」メニューで、「ログの分析」を選択して、「コンソールのカレント」または「選択項目を開く」(サーバー・ログ・ディレクトリのログ・ファイルを参照する)のいずれかを選択します。

  2. Oracle Diagnostic Log Analyzerのエディタで「ログ・メッセージ別」タブをクリックします。

  3. ログ・メッセージ別ページで、必要なロガー・タイプ、ログ・レベルおよびログ時間を選択します。

    ADFイベント・メッセージのログを検索するには、最低でもログ・レベル「通知」(ODLログ・レベル)または「情報」(Javaログ・レベル)を選択する必要があります。

  4. 検索基準として「メッセージ」「次を含む」を選択し、次のいずれかのADFイベント・メッセージを入力して、「検索」をクリックします。

    さらに次に示すADFイベント・メッセージについてログをフィルタ処理することもできます。

    • Executing iterator binding - これは、問合せの更新が遅い場合の診断に役立ちます。

    • メソッド・バインディングの実行 - これは、メソッドの実行が遅い場合の診断に役立ちます。

    • 問合せの実行 - これが役立つのは、問合せ文、バインド・パラメータおよびビュー・オブジェクト名を表示する場合です。

    • バインディング・コンテナのリフレッシュ中です

    • データソースへのイテレータ・バインディングのアタッチ

    • 階層ノードへの行の変換

    • 推定される行数

    • LOVリストの取得

    • LOVリストのフィルタ処理

    • エンティティの検証

    • エンティティの親のロック

    • エンティティのロック

    • エンティティの変更のポスティング前

    • エンティティの変更のポスティング

    • バッチ・ポスティング

    • エンティティの変更のコミット前

    • エンティティの変更のコミット後

    • エンティティの変更のロールバック前

    • エンティティの変更のロールバック後

    • イベントを通知するエンティティ

    • エンティティ通知名

    • エンティティの削除

    • 監査列の更新

    • 有効日付変更の適用

    • エンティティDML

    • エンティティでのすべての属性の読取り

    • アプリケーション・モジュールの作成

    • ネスト・アプリケーション・モジュールの作成

    • アプリケーション・モジュールのパッシブ化

    • アプリケーション・モジュールのアクティブ化

    • データベース接続の確立

    • トランザクションのコミット

    • トランザクションのロールバック

    • トランザクションの検証

    • 値の検証

    ADFイベントの情報について「結果」パネルの下部で確認します。

  5. ADFイベントを階層表示するには、必要なADFイベント・メッセージが「結果」パネルで選択された状態で、「関連付け」→「ADFリクエストによる関連付け」を選択します。

    Oracle Diagnostic Log Analyzerのエディタに、選択したADFイベントのADFリクエスト別ページが表示されます。ADFイベントのその他のADFデータについて「結果」パネルの下部で確認します。たとえば、「結果」パネルの「ADFデータ」領域で「問合せの実行」メッセージに関連する問合せ文を確認できます。

31.5.5 logging.xmlファイルについて

デフォルトでは、Oracle ADFのすべてのパッケージのレベルは「情報」に設定されています。詳細なロギング診断を行う場合には、level="FINE"に設定します。

ADFビュー・レイヤー・パッケージoracle.adf.view.facesおよびoracle.adfinternal.view.facesの場合は、次の要素を編集します。

<logger name="oracle.adf" level="FINE"/>
<logger name="oracle.adfinternal" level="FINE"/>

ADFモデル・レイヤー・パッケージの場合は、次の要素を編集します。

<logger name="oracle.adf" level="FINE"/>
<logger name="oracle.jbo" level="FINE"/>

ADFコントローラ・レイヤー・パッケージの場合は、次の要素を編集します。

<logger name="oracle.adf.controller" level="FINE"/>
<logger name="oracle.adfinternal.controller" level="FINE"/>

あるいは、デバッグ・セッションを開始する際に選択できるデバッグ構成をJDeveloper内に作成することもできます。

例31-2は、ログ・メッセージの粒度を変更できるlogging.xmlファイルの一部を示しています。例の中で、oracle.adf.facesのログが、より多くのメッセージを表示するためにFINEに変更されていることに注意してください。

例31-2 logging.xml構成ファイルのサンプル・セクション

</logging_configuration>
...
  <loggers>
      <logger name="oracle.adf" level="INFO"/>
      <logger name="oracle.adf.faces" level="FINE"/>
      <logger name="oracle.adf.controller" level="INFO"/>
      <logger name="oracle.bc4j" level="INFO"/>
      <logger name="oracle.adf.portal" level="INFO"/>
      <logger name="oracle.vcr" level="INFO"/>
      <logger name="oracle.portlet" level="INFO"/>
      <logger name="oracle.adfinternal" level="INFO"/>
      <logger name="oracle.adfdt" level="INFO"/>
      <logger name="oracle.adfdtinternal" level="INFO"/>
   </loggers>
</logging_configuration>

Javaロギング・システムの各種レベルについての最新情報は、http://www.oracle.com/technetwork/java/index.htmlを参照してください。通常、Javaロギング・システムでは次のレベルがサポートされます。

  • SEVERE

  • WARNING

  • INFO

  • CONFIG

  • FINE

  • FINER

  • FINEST

31.5.6 ADFロギングとOracle WebLogic Serverについて

Fusion WebアプリケーションをOracle WebLogic Serverにデプロイした後で、アプリケーションによって実行される処理は、そのアプリケーションが実行している管理対象サーバーの次のファイルに直接ロギングされます。

DOMAIN_HOME/servers/server_name/logs/server_name-diagnostic.log

別の管理対象サーバーのログ・ファイルも、Oracle WebLogic Server管理コンソールで使用できます。ログを表示するには、Oracle WebLogic Server管理コンソールhttp://<admin_server_host>:<port>/consoleにアクセスして、「診断」→「ログ・ファイル」をクリックします。

このログの粒度とロギング・プロパティは、Oracle Enterprise Manager Fusion Middleware Control (Fusion Middleware Control)を使用して変更できます。Fusion Middleware Controlは、ファームの監視および管理に使用できる、Webブラウザベースのグラフィカル・ユーザー・インタフェースです。

Fusion Webアプリケーションが高可用性環境にデプロイされたとき、レベルをFINEに設定すると、高可用性に関する警告診断メッセージを受け取ることがあります。

Fusion Middleware Controlを使用した管理対象サーバーとOracle ADFのログ設定の変更の詳細は、『Oracle Fusion Middleware管理者ガイド』を参照してください。

31.6 テストとデバッグのためのビジネス・コンポーネント・ブラウザの使用

ビジネス・コンポーネント・ブラウザ(またはBrowser)は、ADFビジネス・コンポーネント・データ・モデル・プロジェクトのビジネス・オブジェクトを操作するときにJDeveloperから起動するJavaアプリケーションです。ビジネス・コンポーネント・ブラウザはJDeveloper外部で実行し、データ・モデル・プロジェクトのテストと調査のための総合的なUIを提供します。このBrowserを実行すると、ADFアプリケーション・モジュールのビュー・インスタンスの調査、ビュー・リンクの階層構造のナビゲート、アプリケーション・モジュールのクライアント・インタフェース、ビュー・オブジェクト・インタフェースおよびビュー行インタフェースからのカスタム・メソッドの実行を行うことができます。BrowserをADF宣言デバッガと一緒に使用して、これらのインタフェースのカスタム・メソッドにブレークポイントを設定することもできます。

さらに、Browserではユーザー・インタフェースの多くの機能がシミュレートされます。アプリケーション・モジュールの構成ファイル(bc4j.xcfg)で指定されたデータベースのビジネス・オブジェクトの内容を表示、挿入および更新することができます。特に、ビュー・インスタンスのマスター・ディテール関係、ビュー・インスタンスとその属性、ビュー・インスタンスの問合せ結果セット、ビュー基準を使用する検索フォーム、属性値に対して定義される検証規則、LOV (値リスト)定義属性のドロップダウン・リストなど、データ・モデル設計の様々な要素を確認できます。Browserを使用してビジネス・オブジェクトをテストする方法の詳細は、6.3項「ビジネス・コンポーネント・ブラウザを使用したビュー・オブジェクト・インスタンスのテスト」を参照してください。ビジネス・コンポーネント・ブラウザを使用するテストの詳細は、このマニュアルの「ビジネス・サービスの構築」に含まれる章の各ビジネス・オブジェクトに関する項でも説明しています。

31.6.1ビジネス・コンポーネント・ブラウザでのデバッグ・モード実行とテストの方法

多くの場合、クライアント・インタフェース実装クラスのサービス・メソッドでカスタム・コードを分析およびデバッグできると便利です。ビジネス・コンポーネント・ブラウザを使用すると、ユーザー・インタフェースでアプリケーションを実行せずに、これらを行うことができます。デバッグ・プロセスを補完するテスト・ツールとしてビジネス・コンポーネント・ブラウザを使用できます。


注意:

デバッグ・モードで実行するビジネス・コンポーネント・ブラウザはJDeveloper IDE Javaオプションを継承しません。特定の実行/デバッグJavaオプションがテスターで使用されるようにするには、データ・モデル・プロジェクトに対する実行構成を編集する必要があります。デフォルトの実行構成は、「プロジェクト・プロパティ」ダイアログの「実行/デバッグ」ページで変更できます。


作業を始める前に、次のようにします。

次のタスクを完了する必要があります。

  1. JDeveloperオンライン・ヘルプのJavaアプリケーションの開発に関する項のプロジェクトを実行用に構成する方法についての説明に従って、使用したい実行構成に対する適切なJavaオプションを設定します。

  2. クライアント・インタフェースのカスタム・メソッドにブレークポイントを設定します。31.8項「ADF宣言ブレークポイントの設定」を参照してください。

ビジネス・コンポーネント・ブラウザを起動してデバッグ・モードにするには:

  1. アプリケーション・ナビゲータで、アプリケーション・モジュールを右クリックして「デバッグ」を選択します。

  2. ビジネス・コンポーネント・ブラウザで、必要なクライアント・インタフェースのメソッド・テスト・パネルを開きます。9.9.4項「ビジネス・コンポーネント・ブラウザを使用したカスタム・サービス・メソッドのテスト方法」を参照してください。

  3. メソッド・パネルでドロップダウン・リストから必要なメソッドを選択し、メソッドのパラメータとして渡す値を入力して、「実行」をクリックします。

    JDeveloperに戻り、ADF宣言デバッガを使用してコードをステップ実行します。メソッドの実行が完了すると、メソッド・パネルに戻り値(ある場合)とテスト結果が表示されます。ビジネス・コンポーネント・ブラウザに表示される結果は、メソッドが正常に実行されたかどうかを示します。

31.6.2ビジネス・コンポーネント・ブラウザを実行して特定の構成でテストする方法

アプリケーション・ナビゲータでアプリケーション・モジュールを右クリックし、「実行」または「デバッグ」を選択すると、JDeveloperがアプリケーション・モジュールに定義されるデフォルト構成を使用してビジネス・コンポーネント・ブラウザを実行します。ビジネス・コンポーネントを別のアプリケーション・モジュール構成(異なるデータソースおよび独自のランタイム・パラメータのセットを指定できる)でテストする場合は、アプリケーション・モジュールの概要エディタの構成ページで行うことができます。

特定の構成でビジネス・コンポーネント・ブラウザを実行するには:

  1. アプリケーション・ナビゲータでテストするアプリケーション・モジュールをダブルクリックします。

  2. 概要エディタの「構成」ナビゲーション・タブをクリックし、リストから構成を選択します。

    メタデータに対して行う変更とプロジェクトのコンパイルに関連性はありませんが、メタデータをクラス・パスにコピーし、ビジネス・コンポーネント・ブラウザによってリロードできるようにするには、コンパイル手順を実行する必要があります。

  3. 選択した構成を右クリックして、「実行」または「デバッグ」を選択し、ビジネス・コンポーネント・ブラウザを起動します。

31.6.3 デバッグ・モードでのビジネス・コンポーネント・ブラウザ実行時の処理

ビジネス・コンポーネント・ブラウザは他のあらゆるJavaプログラムと同様に動作します。具体的には、JDeveloper IDEに対して指定されたJavaオプションは継承しません。テスターはデータ・モデル・プロジェクトに対して指定された実行構成およびその構成内に設定されたJavaオプションをかわりに使用します。

JDeveloperではビジネス・コンポーネント・ブラウザを2つのモード(デバッグ・モードまたは非デバッグ・モード)で実行できます。Browserをデバッグ・モードで実行すると、ADF宣言デバッガと連動して、クライアント・インタフェースのカスタム・コードに挿入したブレークポイントを使用してカスタム・メソッドを実行します。たとえば、クライアント・インタフェースでメソッドにブレークポイントを設定し、そのメソッドをBrowserでデバッグ・モードで実行すると、コードをステップ実行できます。その後、Browserによって成功または失敗の結果が返されます。非デバッグ・モードでは、Browserは、メソッドが正常に実行されたかどうかを示す結果をすぐに返します。また、Browserは、デバッグ・モードでも非デバッグ・モードでも、アプリケーション・モジュールに対して実行時に作成されたシステム・カタログの実行時アーティファクトを表示できます。

31.6.4ビジネス・コンポーネント・ブラウザで実行時アーティファクトを確認する方法

ビジネス・コンポーネント・ブラウザを実行するが、ADF宣言デバッガを使用する必要がない場合は、実行時アーティファクトの情報をアプリケーション・モジュールのシステム・カタログから表示できます。システム・カタログによってビジネス・オブジェクト・メタデータとその他の情報が表示されます。これはビジネス・オブジェクトを比較する必要があるときに役立ちます。

デバッグせずにビジネス・コンポーネント・ブラウザを起動するには:

  1. アプリケーション・ナビゲータで、アプリケーション・モジュールを右クリックして、「実行」を選択します。

  2. ビジネス・コンポーネント・ブラウザで「作成」→「SysCat AMの作成」を選択します。

  3. データ・モデル・ツリーで「SysCatAMDefs」を展開し、「ViewDefs」を右クリックして、「表の表示」を選択します。

  4. データ・ビューアで縦方向にスクロールし、必要なビュー・インスタンスを「SCName」(システム・カタログ名)フィールドで確認します。

    Browserでシステム・カタログを公開すると、デバッガを実行せずに、ランタイム・オブジェクト固有のメタデータおよびその他の情報にアクセスできます。たとえば、ビュー・インスタンスにカスタムJava実装クラスがあるかどうかをチェックできます。

31.6.5 アプリケーションの変更内容でビジネス・コンポーネント・ブラウザをリフレッシュする方法

ビジネス・コンポーネント・ブラウザは相互運用性が非常に高いツールです。Browserを実行しているときに、データ・モデル・プロジェクトの変更が必要であるとわかると、JDeveloperに戻って必要なアプリケーション・モジュール・インスタンスを編集し、変更内容を表示するようにビジネス・コンポーネント・ブラウザ・データ・モデルをリフレッシュできます。このように、変更内容を確認するためにBrowserを再実行する必要はありません。

ビジネス・コンポーネント・ブラウザにアプリケーション・メタデータを再ロードするには:

  1. データ・モデル・プロジェクトでビジネス・オブジェクトを編集し、変更内容をJDeveloperに保存します。

  2. アプリケーション・ナビゲータでデータ・モデル・プロジェクトを再コンパイルします。たとえば、アプリケーション・ナビゲータでデータ・モデル・プロジェクトを右クリックし、「メイク」を選択して再コンパイル・ステップを完了します。

    メタデータに対して行う変更とプロジェクトのコンパイルに関連性はありませんが、メタデータをクラス・パスにコピーし、ビジネス・コンポーネント・ブラウザによってリロードできるようにするには、コンパイル手順を実行する必要があります。

  3. ビジネス・コンポーネント・ブラウザのツールバーでアプリケーション・メタデータの再ロードをクリックします。

    または、ビジネス・コンポーネント・ブラウザの「ファイル」メニューから、アプリケーションのリロードを選択できます。

31.7 ADF宣言デバッガの使用

ADF宣言デバッガで提供される宣言ブレークポイントは、標準Javaブレークポイントと同様に、ADFオブジェクト・レベル(タスク・フロー、ページ定義実行可能ファイル、メソッドとアクションのバインディング、ADFライフサイクル・フェーズなど)に設定できます。ADF宣言ブレークポイントにより、ADFアプリケーションをデバッグするために概要レベルのオブジェクト・ビューが提供されます。たとえば、図31-10のようにタスク・フロー・アクティビティの前にブレークすると、タスク・フローに渡されるパラメータを確認できます。Javaブレークポイントだけを使用して同じ機能を実行するには、ブレークポイントを設定するクラスまたはメソッドを認識する必要があります。ADFアプリケーションではADF宣言ブレークポイントを使用することをお薦めします。

図31-10 タスク・フロー・アクティビティでのADF宣言ブレークポイント

タスク・フロー・アクティビティでのADF宣言ブレークポイント

ADF宣言デバッガも、標準のJavaコード・ブレークポイントをサポートします。どのADFアプリケーションにもJavaコード・ブレークポイントを設定できます。ADF宣言ブレークポイントが必要な場所でブレークしないとき、場合によってはJavaコード・ブレークポイントを使用できます。

ADF宣言デバッガはJavaデバッガ上に構築されているので、機能と動作はJavaデバッガと同様です。ただ、Javaのクラスやメソッドを知らなくても、ビジュアル・エディタでADF宣言ブレークポイントを設定することができます。

ADF宣言デバッガでは、変数やスタック・データの調査など標準デバッグ機能が提供されます。アプリケーションが任意のブレークポイント(ADF宣言ブレークポイントまたはJavaコード・ブレークポイント)で一時停止するときに、様々なウィンドウを使用してアプリケーションのステータスを調べることができます。ブレークポイント・ウィンドウで、ブレークが発生した箇所を確認することができます。スタック・ウィンドウを使用して、現在のスレッドのコール・スタックを確認することができます。スタック・ウィンドウで行を選択すると、データ・ウィンドウ、監視ウィンドウおよびすべてのインスペクタ・ウィンドウが更新され、関連データが表示されます。データ・ウィンドウを使用すると、アプリケーションの引数、ローカル変数および静的フィールドを表示できます。

ADF構造ウィンドウには、プロジェクトの実行時構造が表示されます。ADFデータ・ウィンドウでは、ADF構造ウィンドウの選択内容に基づいて、表示する情報が自動的に変更されます。たとえば、タスク・フロー・ノードが選択されている場合は、図31-11に示すように、ADFデータ・ウィンドウにはタスク・フローに関連したデバッグ情報が表示されます。

図31-11 タスク・フロー選択時のADF構造ウィンドウとADFデータ・ウィンドウ

タスク・フローに対応するADF構造ウィンドウとADFデータ・ウィンドウ

デバッグ・セッションでは、必要に応じてADF宣言ブレークポイントとJavaコード・ブレークポイントを混用することができます。ステップ機能を使用すると、あるJavaコード・ブレークポイントから別のJavaコード・ブレークポイントにアプリケーションを進めることができますが、ADF宣言ブレークポイントのステップ機能には、より多くの制約と制限事項があります。ADF宣言ブレークポイントでのステップ機能の使用の詳細は、表31-3を参照してください。

ADF宣言ブレークポイントの使用方法の詳細は、31.8項「ADF宣言ブレークポイントの設定」を参照してください。

クラスとメソッドでのJavaブレークポイントの使用方法の詳細は、31.9項「Javaブレークポイントの設定」を参照してください。

JSFアプリケーション(Fusion Webアプリケーションを含む)で、ブレークポイントでブレークしたとき、ELエバリュエータを使用してEL式の値を調べることができます。ELエバリュエータには、評価する正しい式の選択を支援するブラウズ機能があります。詳細は、31.7.4項「EL式エバリュエータの使用」を参照してください。

ADF宣言ブレークポイントとJavaブレークポイントのどちらを使用するかをあらかじめ決めておかなくても、Oracle ADFソース・コードに対してADF宣言デバッガを使用できます。Oracle ADFソース・コードはデバッグ・ライブラリで入手できます。ソース・コードのロード方法の詳細は、31.7.1項「デバッガでのADFソース・コードの使用」を参照してください。

31.7.1 デバッガでのADFソース・コードの使用

有効なOracle ADFサポートがある場合、Oracle Worldwide Supportでサービス・リクエストをオープンし、Oracle ADFの完全なソース・コードを取得できます。Oracle ADFのソース・コードは、特定のバージョンのものをリクエストできます。ソース・コードのZIPファイルを復号化するためのダウンロードおよびパスワード情報が与えられます。詳細は、Oracle Worldwide Supportに問い合せてください。

アプリケーションのデバッグ・セッションにOracle ADFソース・コードへのアクセスを追加すると、次のことが可能になります。

  • ソース・エディタ内でJDeveloper Quick Javadoc機能にアクセスできます。ソース・コードがない場合は、標準のJavadocのみの使用となります。

  • Javaコード・ブレークポイントは、ブレークポイントに到達したときに実行されているOracleソース・コードを表示するためにも使用できます。ブレークするソース・コード行の余白をクリックすることで、ブレークポイントをより簡単に設定することもできます。ソース・コードがない場合、Oracleコード内にブレークポイントを設定するには、クラス、メソッド、または行番号を調べる必要があります。

  • ソース・コード内に設定されたJavaコード・ブレークポイントの場合は、デバッガですべてのローカル変数およびメンバー・フィールドの値を表示できます。

ADFソース・コードのZIPファイルは、出荷の際にはコンテンツ保護のために暗号化された外部ZIP内に置かれます。外部ZIPファイルの名前は、サービス・リクエスト番号のバリアントであることがあります。

外部ZIPファイルの受信またはダウンロード後は、供給されるパスワードを使用して解凍し、実際のソース・コードのZIPファイルにアクセスします。ADFソース・コードのZIPファイル名は、ADFバージョン番号およびビルド番号のバリアントである必要があります。たとえば、ADFのソースZIPファイルは、adf_vvvv_nnnn_source.zipのような形式であり、ここでvvvvはバージョン番号、nnnnはビルド番号を示しています。

ソース・コードのZIPファイルにアクセスし、次にそのコンテンツを作業ディレクトリに解凍します。

31.7.2 ADFソース・ユーザー・ライブラリの設定方法

ソース・ユーザー・ライブラリの名前を作成し、それをソースZIPファイルに関連付けます。

ADFソースZIPファイルをユーザー・ライブラリに追加する手順:

  1. メイン・メニューから「ツール」→「ライブラリの管理」を選択します。

  2. 「ライブラリの管理」ダイアログの「ライブラリ」タブを選択した状態で、「新規」をクリックします。

  3. ライブラリの作成ウィンドウで、ライブラリのタイプを識別する、ソース用のライブラリ名を入力します。

  4. ツリー構造の「ソースパス」ノードを選択します。「エントリの追加」をクリックします。


    注意:

    クラス・パスの値は入力しないでください。ソース・パスの値のみ指定する必要があります。


  5. パス・エントリの選択ウィンドウで、ファイルが解凍されたディレクトリを参照し、ソースZIPファイルを選択します。「選択」をクリックします。

  6. ライブラリの作成ウィンドウで、ソース・パスのエントリにソースZIPファイルの正しいパスが入力されていることを確認し、「デフォルトでデプロイ済」の選択を解除します。「OK」をクリックします。

  7. 「OK」をクリックします。

31.7.3 ADFソース・ライブラリのプロジェクトへの追加方法

使用可能なユーザー・ライブラリのリストへソース・ライブラリを追加した後、デバッグするプロジェクトにソース・ライブラリを追加します。

ADFソースZIPファイルをプロジェクトに追加するには:

  1. アプリケーション・ナビゲータで、プロジェクトをダブルクリックするか、プロジェクトを右クリックして「プロジェクト・プロパティ」を選択します。

  2. 「プロジェクト・プロパティ」ダイアログで、「ライブラリとクラスパス」を選択します。

  3. 「ライブラリの追加」をクリックします。

  4. 「ライブラリの追加」ダイアログの「ユーザー」ノードで、追加するソース・ライブラリを選択して「OK」をクリックします。

    ソース・ライブラリが「プロジェクト・プロパティ」ダイアログの「クラスパス・エントリ」セクションに表示されます。

  5. 「OK」をクリックします。

31.7.4 EL式エバリュエータの使用

アプリケーションがブレークポイントで一時停止したら、EL式エバリュエータを使用して、評価するEL式を入力します。評価するEL式は、現在のコンテキストの範囲内で任意に入力することができます。EL式が現在のコンテキストの範囲に収まらない場合、値はnullと評価されます。

ELエバリュエータは、後続のデバッグ手順で停止されるときでなく、ブレークポイントで停止されるときにのみEL評価が発生する点で、監視ウィンドウと異なります。

ELエバリュエータは、あらゆるJSFアプリケーションのデバッグで利用できます。


注意:

EL式を評価するときは、アプリケーションのデータ、つまりアプリケーションの動作を間接的に変更しないように注意してください。たとえば、#{foo.bar}を評価する場合、対応するgetBar()メソッドによってアプリケーション・データが変更されます。


ELエバリュエータを使用するには:

  1. アプリケーションでブレークポイントを設定します。

    アプリケーションは、JSFアプリケーションである必要があります。ADFアプリケーションである必要はありません。

  2. デバッグ・プロセスを開始します。

    次のいずれかを実行します。

    • メイン・メニューから「実行」→「デバッグ」を選択します。

    • アプリケーション・ナビゲータでプロジェクト、adfc-config.xmlfaces-config.xml、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。

    • タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。

  3. ブレークポイントに到達すると、ELエバリュエータは、デバッガ・ウィンドウ領域にタブとして表示されます。「ELエバリュエータ」タブをクリックして前面に移動します。表示されない場合は、メイン・メニューから「表示」→「デバッガ」→「ELエバリュエータ」を選択します。


    注意:

    ブレークポイント・ウィンドウを確認するか、ブレークポイントの隣に「実行ポイント」アイコン(赤い右矢印)が表示されていることを確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。


  4. 入力フィールドにEL式を入力します。

    フィールドをクリックして#{またはピリオドを入力すると、図31-12に示すように、入力支援機能によって選択可能な式項目のリストが表示されます。自動的に補完されるため入力が簡単です。セミコロンで区切ることによって、複数のEL式を同時に評価することができます。

    図31-12 ELエバリュエータの入力支援機能の使用

    ELエバリュエータ
  5. EL式の入力を完了したら、「式の評価」をクリックすると、式が評価されます。図31-13を参照してください。

    図31-13 EL式の評価

    EL式の評価

31.7.5 スタック・トレース情報を表示およびエクスポートする方法

通常、問題を判断できず、自分で解決できない場合には、他の人に支援を求めます。OTN JDeveloper Discussion Forumに質問を投稿する場合、またはMetalinkでサービス・リクエストをオープンする場合、支援しようとしている他のユーザーが問題の発生箇所を正確に理解するためには、スタック・トレース情報を投稿内容に含めることが非常に重要です。

JDeveloperのスタック・ウィンドウを使用すると、この情報を伝えるときに役立ちます。デバッガが一時停止したときは常に、スタック・ウィンドウで、現在行までのメソッド・コールのスタックとしてプログラム・フローを確認できます。スタック・ウィンドウの背景を右クリックして「プリファレンス」を選択します。スタック・ウィンドウのプリファレンスを設定して、デフォルトで組み込まれているクラスやメソッドの名前のように、行番号情報を組み込むことができます。また、ポップアップ・メニュー・オプション「エクスポート」を使用すると、現在のスタック情報を外部テキスト・ファイルに保存できます。その後、問題の診断を支援してくれる人にファイルの内容を投稿または送信できます。

31.8 ADF宣言ブレークポイントの設定

ADFタスク・フロー・アクティビティ、ページ定義実行可能ファイル、メソッド、アクションおよび値のバインディング、ADFライフサイクル・フェーズ上でブレークポイントを宣言的に設定するには、JDeveloperでADF宣言デバッガ機能を使用します。メソッド名とクラス名などのADFコードのすべての内部構造体を知らなくても、最高抽象レベルでオブジェクトにブレークポイントを設定することができます。

タスク・フロー・ダイアグラマでタスク・フロー・アクティビティにブレークポイントを追加できます。あるいは、ブレークポイント・ウィンドウで「ADFタスク・フロー・アクティビティ・ブレークポイントの作成」ダイアログを起動できます。タスク・フロー・ダイアグラマでタスク・フロー・アクティビティを選択し、ポップアップ・メニューを使用してそのアクティビティのブレークポイントの有効/無効を切り替えるか、[F5]キーを押します。アプリケーションがブレークポイントで停止すると、ADF構造ウィンドウに、オブジェクトの実行時構造がツリー構造で表示されます。ADFデータ・ウィンドウには、ADF構造ウィンドウで選択されたオブジェクトのデータのリストが表示されます。

たとえば、Browse Ordersタスク・フローのタスク・フロー・コール・アクティビティにブレークポイントを設定すると、図31-14に示すように、コール・アクティビティに赤い点のアイコンが表示されます。

図31-14 タスク・フロー・アクティビティでのADF宣言ブレークポイント

タスク・フロー・ブレークポイント

ブレークポイントに到達すると、図31-15に示すように、アプリケーションが一時停止され、アイコンが変化します。

図31-15 ADF宣言ブレークポイントで一時停止したアプリケーション

ADF宣言ブレークポイント

同様に、ページ定義ファイルでBeforeブレークポイントとAfterブレークポイントを設定することができます。バインディングおよび実行可能ファイルのリストで項目のブレークポイントを設定するには、項目の左余白または右余白をクリックするか、ポップアップ・メニューから選択します。左余白をクリックするとBeforeページ定義ブレークポイントが追加され、右余白をクリックするとAfterページ定義ブレークポイントが追加されます。この場合も、図31-16に示すように、ブレークポイントを示す赤い点アイコンが設定されます。

図31-16 ページ定義ファイルのADFバインディングのADF宣言ブレークポイント

ページ定義ブレークポイント

すべてのADFライフサイクル・フェーズにもBeforeブレークポイントとAfterブレークポイントを設定できます。図31-17に示すようにブレークポイント・ウィンドウで「ADFライフサイクル・フェーズ・ブレークポイントの作成」ダイアログを起動できます。

図31-17 ブレークポイント・ウィンドウの「ブレークポイントの追加」アイコンのドロップダウン・メニュー

ブレークポイント・ウィンドウのドロップダウン・メニュー

「ADFライフサイクル・フェーズ・ブレークポイントの作成」ダイアログでは、様々なライフサイクル・ブレークポイントのオプションを選択できます(図31-18)。

図31-18 「ADFライフサイクル・フェーズ・ブレークポイントの作成」ダイアログ

「ADFライフサイクル・フェーズ・ブレークポイントの作成」ダイアログ

または、ADF構造ウィンドウの「ADFライフサイクル・ブレークポイント」ダイアログまたはタスク・フロー・ダイアグラマを使用して、ADFライフサイクル・フェーズ・ブレークポイントを設定します。ADFライフサイクル・フェーズの詳細は、第21章「Fusionページ・ライフサイクル」を参照してください。

ADF宣言デバッガを使用する場合、ADF宣言ブレークポイントとJavaコード・ブレークポイントの両方を定義することができます。デバッグ・シナリオによっては、宣言ブレークポイントのみを設定すればアプリケーションをデバッグできることもあります。あるいは、宣言的でないJavaコードで追加のブレークポイントを追加する必要が生じることもあります。Javaコード・ブレークポイントの詳細は、31.9.1項「クラスおよびメソッド上にJavaブレークポイントを設定する方法」を参照してください。表31-1は、ADF宣言デバッガ・ブレークポイントの場所のリストです。

表31-1 ADF宣言デバッガ・ブレークポイント

ADF面 宣言ブレークポイント JDeveloperエディタ JDeveloperの場所 JDeveloperポップアップ・メニュー・コマンド 説明

ページ定義

実行可能ファイルの前/後:

  • イテレータ

  • invokeAction

  • リージョンのインスタンス化

ページ定義ファイルの概要エディタ

ページ定義の「概要」タブ、「実行可能ファイル」セクション

「ブレークポイントの設定」または[F5]

実行可能ファイルがリフレッシュする前または後にデバッグを一時停止します。タスク・フロー・バインディングの場合、1ライフサイクルにつき2回あり、最初はprepareModel(初期リージョン作成)、2回目はprepareRender(動的リージョンにより、対応するリージョンのタスク・フローIDが入れ替えられる)。

アクション・バインディングの前/後:

  • methodAction

  • ビルトイン操作

ページ定義の「概要」タブ、「バインディング」セクション

「ブレークポイントの設定」または[F5]

バインディングが実行される前または後にデバッグを一時停止します。

属性値バインディングの前/後

ページ定義の「概要」タブ、「バインディング」セクション

「ブレークポイントの設定」または[F5]

属性のsetInputValue() ADFソース・コード・メソッドが実行される前または後にデバッグを一時停止します。新しい値は、setInputValue()へのパラメータとなる。

ADFタスク・フロー

アクティビティの前

タスク・フロー・ダイアグラマ

タスク・フロー・ダイアグラマ

ブレークポイント・ウィンドウの「追加」ボタン

「ブレークポイントの設定」または[F5]

JSFアプリケーション起動フェーズ内でアクティビティが実行する前にデバッグを一時停止します。宣言ブレークポイントが定義されているアクティビティは未実行です。例外はビュー・アクティビティです。ビュー・アクティビティが実行された後で、新しいページがレンダリングする前に、JSFレスポンス・レンダリング・フェーズ内で一時停止します。このポイントで一時停止することにより、ADF構造ウィンドウとADFデータ・ウィンドウを使用してビュー・アクティビティ値を検査できます。

ADFライフサイクル・フェーズ

ADFライフサイクル・フェーズの前

ADFライフサイクル・フェーズの後

ADF構造ウィンドウ

タスク・フロー・ダイアグラマ

ブレークポイント・ウィンドウ

ADF構造ウィンドウのツールバー・ボタン

タスク・フロー・ダイアグラマ

ブレークポイント・ウィンドウの「追加」ボタン


BeforeブレークポイントはADFライフサイクル・フェーズの前にデバッグを一時停止します。

AfterブレークポイントはADFライフサイクル・フェーズの後でデバッグを一時停止します。

ADFライフサイクルのJSFレスポンス・レンダリング・フェーズとレンダリング準備フェーズのBeforeブレークポイントとAfterブレークポイントは、次の順序で実行されます。

  • jsfRenderResponseの前。

  • prepareRenderの前。(prepareRenderフェーズが実行します)。

  • prepareRenderの後。(jsfRenderResponseフェーズが実行します)。

  • jsfRenderResponseの後。


ブレークポイント・ウィンドウのツールバーには、図31-17に示すようにブレークポイントの追加、編集、削除、有効化、無効化のためのボタンが含まれます。「ブレークポイントの追加」ドロップダウン・メニューには、Javaコード・ブレークポイント、ADFライフサイクル・フェーズ・ブレークポイントおよびADFタスク・フロー・アクティビティ・ブレークポイントを追加する機能が含まれます。ADFタスク・フロー・アクティビティ・ブレークポイントとページ定義宣言ブレークポイントは、それぞれタスク・フロー・ダイアグラマまたはページ定義ファイルの概要エディタでも設定できます。

ADFタスク・フロー・ブレークポイントおよびページ定義宣言ブレークポイントは、条件やメソッド名以外の一般的なフィールドについては、ブレークポイント・ウィンドウの編集コマンドを使用して編集できます。

表31-2に、ブレークポイント・ウィンドウの「説明」列や「タイプ」列に表示されるADF宣言ブレークポイントを示します。ブレークポイント・ウィンドウでADF宣言ブレークポイントをダブルクリックすると、対応するタスク・フローのタスク・フロー・ダイアグラマまたは対応するページ定義ファイルがワークスペースに表示され、ブレークポイントの場所を示します。

表31-2 ブレークポイント・ウィンドウでのADF宣言ブレークポイントの表示

宣言ブレークポイントの型 「説明」列 「タイプ」列

ページ定義実行可能ファイルの前/後:

  • イテレータ

  • invokeAction

page definition@executable idの前

ページ定義@実行可能ファイルidの後

ページ定義実行可能ファイル・ブレークポイントの前

ページ定義アクション・バインディングの前/後:

  • methodAction

  • ビルトイン操作

page definition@binding idの前

ページ定義@バインディングidの後

ページ定義バインディング・ブレークポイントの前

ページ定義属性値バインディングの前/後

page definition@binding idの前

ページ定義@バインディングidの後

ページ定義バインディング・ブレークポイントの前

ADFタスク・フロー・アクティビティの前

task flow document#task flow id@activity idの前

タスク・フロー・アクティビティ・ブレークポイント

ADFライフサイクル・フェーズの前

adfライフサイクル・フェーズの前

ADFライフサイクル・フェーズ・ブレークポイント

ADFライフサイクル・フェーズの後

adfライフサイクル・フェーズの後

ADFライフサイクル・フェーズ・ブレークポイント


表31-3に、ADF宣言ブレークポイントとともに使用できるステップ・コマンドをリストします。

表31-3 ADF宣言デバッガのステップ・コマンド

ADFデバッガのステップ・コマンド 説明

実行ポイントの検索

宣言ブレークポイントで、開いておりアクティブな現在の実行ポイントを対応するエディタに表示できるようにする。

ステップ実行([F8])

タスク・フロー・アクティビティ宣言ブレークポイントで、タスク・フロー内でアクティビティからアクティビティにステップできるようにする。ユーザーとの対話処理が必要とされる場合(ページが表示される場合など)、これを受け取ると(ボタンが選択された場合など)処理を再開し、次のタスク・フロー・アクティビティの前で一時停止する。

ページ定義実行可能ファイルのブレークポイントに対応します。アプリケーションが、次のページ定義実行可能ファイル・ブレークポイントにステップします。

ADFライフサイクル・フェーズ宣言ブレークポイントが、ADFライフサイクル・フェーズの次のBeforeまたはAfterの位置にステップできるようにします。

トレース実行([F7])

タスク・フロー・コール・アクティビティ上で定義されているタスク・フロー・アクティビティ宣言ブレークポイントでのみ使用できます。タスク・フロー・アクティビティ宣言ブレークポイントは、アクティビティの実行直前でアプリケーションを一時停止します。トレース実行機能では、コールされたタスク・フローのデフォルト・アクティビティを実行する直前でデバッグを一時停止できます。このアクションは、コールされたタスク・フローのデフォルトのアクティビティ上に、タスク・フロー・アクティビティ宣言ブレークポイントを配置することと同じである。

ステップ・アウト([Shift]+[F7])

タスク・フロー・アクティビティ宣言ブレークポイントで、現在コールされているタスク・フローからステップ・アウトして、コール元(存在する場合)へ戻すことができるようにする。ユーザーとの対話処理が必要とされる場合(ページが表示される場合など)、ユーザーとの対話処理を受け取ると(ボタンが選択された場合など)処理を再開し、コール元タスク・フロー内の、次のユーザーとの対話処理またはアクティビティの前で一時停止する。

ステップ続行([Shift]+[F8])

宣言ブレークポイントではサポートされない。

メソッドの最後まで実行

宣言ブレークポイントではサポートされない。

カーソルまで実行

宣言ブレークポイントではサポートされない。

フレームに戻る

Javaコード用であるため、宣言ブレークポイントでは使用できません。前の実行ポイントに戻ることはできません。


ADF宣言デバッガは、ADF宣言ブレークポイントのステータスの設定、切り替えおよび表示のために、標準デバッガのアイコンと表記法を使用します。

ブレークポイント・ウィンドウには、ADF宣言ブレークポイントを含むすべてのブレークポイントが表示されます(図31-19)。

図31-19 ブレークポイント・ウィンドウでのADF宣言ブレークポイントとJavaコード・ブレークポイントの表示

ブレークポイント・ウィンドウでのADF宣言ブレークポイントの表示

設定されたADF宣言ブレークポイントは、タスク・フロー・アクティビティ(図31-20)、ページ定義のブレークポイント余白(図31-21)、ADFライフサイクル・ブレークポイント・ウィンドウ(図31-22)に、赤い点のアイコンとして表示されます。

図31-20 タスク・フロー・アクティビティ上で有効化されたADF宣言ブレークポイント

有効化されたADF宣言ブレークポイント

図31-21 ページ定義実行可能ファイルで有効化されたADF宣言ブレークポイント

ページ定義で有効化されたADF宣言ブレークポイント

図31-22 ADFライフサイクル・ブレークポイント・ウィンドウで有効化されたADFライフサイクル・フェーズ・ブレークポイント

有効化されたADFライフサイクル・フェーズ・ブレークポイント

ADFタスク・フローまたはページ定義の宣言ブレークポイントを無効にすると、図31-23に示すように、赤いアイコンがグレーのアイコンになります。

図31-23 無効化されたADF宣言ブレークポイント

無効化されたADF宣言ブレークポイント

アクティブなADFタスク・フロー宣言ブレークポイントでは、図31-24に示すように、赤いアイコンに緑のチェックマークが付きます。

図31-24 アクティブなADF宣言ブレークポイント

アクティブなADF宣言ブレークポイント

アプリケーションがADF宣言ブレークポイントで一時停止すると、図31-25に示すように、実行ポイントのアイコンが表示されます。

図31-25 タスク・フローの実行ポイントで一時停止したアプリケーション

実行ポイントで一時停止したアプリケーション

アプリケーションがADFライフサイクル宣言ブレークポイントで一時停止すると、図31-26に示すように、ADFライフサイクル・ブレークポイント・ウィンドウのライフサイクル・フェーズの横に実行ポイントのアイコンが表示されます。現在のADFライフサイクル・フェーズの名前はADF構造ウィンドウにも表示されます。

図31-26 ADFライフサイクル・フェーズの実行ポイントで一時停止したアプリケーション

ADFライフサイクル・ブレークポイントでの一時停止

31.8.1 タスク・フロー・アクティビティ・ブレークポイントの設定方法および使用方法

タスク・フローチャートの作成後は、タスク・フロー・アクティビティ上にADF宣言ブレークポイントを設定することができます。

タスク・フロー・アクティビティ上にブレークポイントを設定するには:

  1. タスク・フロー・ダイアグラマでタスク・フローを開くか、ブレークポイント・ウィンドウで「追加」アイコンをクリックし、「ADFタスク・フロー・アクティビティ・ブレークポイント」を選択します。

  2. タスク・フロー・アクティビティ・ブレークポイントを設定します。

    • タスク・フロー・ダイアグラマを使用する場合は、右クリックしてポップアップ・メニューから「ブレークポイントの設定」を選択するか、[F5]を押します。

      タスク・フロー・アクティビティ上にブレークポイント・アイコンが表示されます。

    • ブレークポイント・ウィンドウで「ADFタスク・フロー・アクティビティ・ブレークポイントの作成」ダイアログを起動した場合は、「参照」をクリックしてタスク・フロー定義を選択し、「タスク・フロー」ドロップダウン・リストからタスク・フローを選択し、「アクティビティ」ドロップダウン・リストからタスク・フロー・アクティビティを選択し、「OK」をクリックします。

  3. 必要に応じて、次のようにデバッガを管理するためのブレークポイントの設定を構成します。

    1. 「ビュー」→「ブレークポイント」を選択して、ブレークポイント・ウィンドウを開きます。

    2. 構成するタスク・フロー・アクティビティ・ブレークポイントを選択し、「編集」アイコンをクリックします。

    3. 「ADFタスク・フロー・アクティビティ・ブレークポイントの編集」ダイアログで「条件」タブをクリックし、ブレークポイントに適用する条件を指定します。条件が有効な場合のみブレークポイントが発生します。

    4. 「アクション」タブをクリックし、ブレークポイントが発生したときにデバッガで行うアクションを指定して、「OK」をクリックします。

      たとえば、ブレークポイントの通常の処理では、デバッグ中のプログラムを停止しますが、プログラムを停止せずにビープ音を鳴らし、ログ・ウィンドウにログ情報を記録することもできます。

  4. デバッグ・プロセスを開始します。

    次のいずれかを実行します。

    • メイン・メニューから「実行」→「デバッグ」を選択します。

    • アプリケーション・ナビゲータでプロジェクト、adfc-config.xmlfaces-config.xml、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。

    • タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。

  5. アプリケーションがブレークポイントで一時停止されると、タスク・フロー・アクティビティ上のブレークポイント・アイコンの隣に「実行ポイント」アイコンが表示されます。各種デバッガ・ウィンドウを使用して、アプリケーションを調査することができます。


    注意:

    ブレークポイント・ウィンドウを確認するか、ブレークポイントの隣に「実行ポイント」アイコン(赤い右矢印)が表示されていることを確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。


    アプリケーションは、タスク・フロー・アクティビティが実行される前に一時停止されます(ビュー・アクティビティ以外)。

  6. デフォルトでは、ADF構造ウィンドウとADFデータ・ウィンドウ、およびいくつかのデバッガ・ウィンドウが表示されます。ADF構造ウィンドウでは実行時構造、ADFデータ・ウィンドウではそれに対応するデータを調べることができます。31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。

  7. ADF構造ウィンドウでノードを選択すると、ADFデータ・ウィンドウに関連情報が表示されます。タスク・フロー・アクティビティ宣言ブレークポイントは、タスク・フロー・アクティビティの実行直前でアプリケーションを一時停止します。トレース実行(F7)機能を使用すると、コールされたタスク・フローのデフォルト・アクティビティを実行する直前に、アプリケーションを一時停止できます。

  8. 必要に応じて、表31-3で説明したステップ機能を使用して、アプリケーションのデバッグを継続します。主要なステップ機能は、トレース実行(F7)です。

    アプリケーションが一時停止しているときに、既存のブレークポイントを削除または無効化し、新しいブレークポイントを設定できます。

31.8.2 ページ定義実行可能ファイル・ブレークポイントの設定方法および使用方法

ページ定義に実行可能ファイルがある場合は、その実行可能ファイルの前または後でアプリケーションを一時停止するブレークポイントを設定できます。たとえば、ブレークポイントを設定して、イテレータがリフレッシュされるか、invokeActionメソッドが実行されたときに、アプリケーションを一時停止することができます。


注意:

ビュー・オブジェクト問合せが実行された後でアプリケーションを一時停止するAfterイテレータ・ブレークポイントを設定している場合、アプリケーションがこのブレークポイントで複数回一時停止することに注意してください。また、問合せが実行されなかったときにも、このブレークポイントでアプリケーションが一時停止する可能性があります。問合せが実行されたかどうかを把握する必要がある場合は、関連するADFビジネス・コンポーネントをADF構造ウィンドウで選択して、ADFデータ・ウィンドウで対応するデータを確認します。これらのウィンドウの使用方法の詳細は、31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。

ビュー・オブジェクト問合せ実行でのJavaコード・ブレークポイントの使用方法の詳細は、31.9.8項「一般的なOracle ADFブレークポイントの使用方法」を参照してください。


ページ定義ファイルの実行可能ファイル上にブレークポイントを設定するには:

  1. アプリケーション・ナビゲータで、ブレークポイントを設定する実行可能ファイルを含むページ定義ファイルをダブルクリックします。

  2. 概要エディタの「バインディングと実行可能ファイル」タブをクリックし、「実行可能ファイル」リストで実行可能ファイルを選択し、項目の左側にあるブレークポイント余白をクリックします。

    項目の隣にある余白にブレークポイント・アイコンが表示されます。

  3. 必要に応じて、次のようにデバッガを管理するためのブレークポイントの設定を構成します。

    1. 「ビュー」→「ブレークポイント」を選択して、ブレークポイント・ウィンドウを開きます。

    2. 構成する実行可能ファイル・ブレークポイントを選択し、「編集」アイコンをクリックします。

    3. 「ADFページ定義バインディング・ブレークポイントの編集」ダイアログで「条件」タブをクリックし、ブレークポイントに適用する条件を指定します。条件が有効な場合のみブレークポイントが発生します。

    4. 「アクション」タブをクリックし、ブレークポイントが発生したときにデバッガで行うアクションを指定して、「OK」をクリックします。

      たとえば、ブレークポイントの通常の処理では、デバッグ中のプログラムを停止しますが、プログラムを停止せずにビープ音を鳴らし、ログ・ウィンドウにログ情報を記録することもできます。

  4. デバッグ・プロセスを開始します。

    次のいずれかを実行します。

    • メイン・メニューから「実行」→「デバッグ」を選択します。

    • アプリケーション・ナビゲータでプロジェクト、adfc-config.xmlfaces-config.xml、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。

    • タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。

  5. アプリケーションがブレークポイントで一時停止されると、実行可能項目のブレークポイント・アイコンの隣にある余白に、「実行ポイント」アイコンが表示されます。各種デバッガ・ウィンドウを使用して、アプリケーションを調査することができます。

    実行可能バインディングがリフレッシュされると、アプリケーションが一時停止します。taskFlow実行可能ファイルの場合、prepareModelおよびprepareRenderライフサイクルで一時停止が発生します。


    注意:

    ブレークポイント・ウィンドウを確認するか、ブレークポイントの隣の「実行ポイント」アイコン(赤い右矢印)を確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。


  6. デフォルトでは、ADF構造ウィンドウとADFデータ・ウィンドウ、およびいくつかのデバッガ・ウィンドウが表示されます。ADF構造ウィンドウでは実行時構造、ADFデータ・ウィンドウではそれに対応するデータを調べることができます。31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。

  7. ADF構造ウィンドウでノードを選択すると、ADFデータ・ウィンドウに関連情報が表示されます。

  8. アプリケーションが一時停止しているときに、既存のブレークポイントを削除または無効化し、新しいブレークポイントを設定できます。

31.8.3 ページ定義アクション・バインディング・ブレークポイントの設定方法および使用方法

ページ定義ファイルで、アクション・バインディング上およびmethodActionバインディング上にブレークポイントを設定することができます。バインディングが実行されると、アプリケーションが一時停止します。

ページ定義ファイルのアクション・バインディング上にブレークポイントを設定するには:

  1. アプリケーション・ナビゲータで、ブレークポイントを設定するバインディングを含むページ定義ファイルをダブルクリックします。

  2. 概要エディタの「バインディングと実行可能ファイル」タブをクリックし、「バインディング」リストでmethodActionバインディングまたは組込み操作項目を選択し、項目の左側にあるブレークポイント余白をクリックします。

    項目の隣にブレークポイント・アイコンが表示されます。

  3. 必要に応じて、次のようにデバッガを管理するためのブレークポイントの設定を構成します。

    1. 「ビュー」→「ブレークポイント」を選択して、ブレークポイント・ウィンドウを開きます。

    2. 構成するアクション・バインディング・ブレークポイントを選択し、「編集」アイコンをクリックします。

    3. 「ADFページ定義バインディング・ブレークポイントの編集」ダイアログで「条件」タブをクリックし、ブレークポイントに適用する条件を指定します。条件が有効な場合のみブレークポイントが発生します。

    4. 「アクション」タブをクリックし、ブレークポイントが発生したときにデバッガで行うアクションを指定して、「OK」をクリックします。

      たとえば、ブレークポイントの通常の処理では、デバッグ中のプログラムを停止しますが、プログラムを停止せずにビープ音を鳴らし、ログ・ウィンドウにログ情報を記録することもできます。

  4. デバッグ・プロセスを開始します。

    次のいずれかを実行します。

    • メイン・メニューから「実行」→「デバッグ」を選択します。

    • アプリケーション・ナビゲータでプロジェクト、adfc-config.xmlfaces-config.xml、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。

    • タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。

  5. アプリケーションがブレークポイントで一時停止されると、アクション・バインディング項目上のブレークポイント・アイコンの隣に「実行ポイント」アイコンが表示されます。各種デバッガ・ウィンドウを使用して、アプリケーションを調査することができます。

    バインディングが実行されると、アプリケーションが一時停止します。


    注意:

    ブレークポイント・ウィンドウを確認するか、ブレークポイントの隣に「実行ポイント」アイコン(赤い右矢印)が表示されていることを確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。


  6. デフォルトでは、ADF構造ウィンドウとADFデータ・ウィンドウ、およびいくつかのデバッガ・ウィンドウが表示されます。ADF構造ウィンドウでは実行時構造、ADFデータ・ウィンドウではそれに対応するデータを調べることができます。31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。

  7. ADF構造ウィンドウでノードを選択すると、ADFデータ・ウィンドウに関連情報が表示されます。

  8. アプリケーションが一時停止しているときに、既存のブレークポイントを削除または無効化し、新しいブレークポイントを設定できます。

31.8.4 ページ定義属性値バインディング・ブレークポイントの設定方法および使用方法

ページ定義に属性値バインディングがある場合、属性値バインディング上にブレークポイントを設定して、アプリケーションを一時停止することができます。

ページ定義ファイルの属性値バインディング上にブレークポイントを設定するには:

  1. アプリケーション・ナビゲータで、ブレークポイントを設定するバインディングを含むページ定義ファイルをダブルクリックします。

  2. 概要エディタの「バインディングと実行可能ファイル」タブをクリックし、「バインディング」リストで属性値を選択し、項目の左側にあるブレークポイント余白をクリックします。属性値バインディングの隣にブレークポイント・アイコンが表示されます。

  3. 必要に応じて、次のようにデバッガを管理するためのブレークポイントの設定を構成します。

    1. 「ビュー」→「ブレークポイント」を選択して、ブレークポイント・ウィンドウを開きます。

    2. 構成するバインディング・ブレークポイントを選択し、「編集」アイコンをクリックします。

    3. 「ADFページ定義バインディング・ブレークポイントの編集」ダイアログで「条件」タブをクリックし、ブレークポイントに適用する条件を指定します。条件が有効な場合のみブレークポイントが発生します。

    4. 「アクション」タブをクリックし、ブレークポイントが発生したときにデバッガで行うアクションを指定して、「OK」をクリックします。

      たとえば、ブレークポイントの通常の処理では、デバッグ中のプログラムを停止しますが、プログラムを停止せずにビープ音を鳴らし、ログ・ウィンドウにログ情報を記録することもできます。

  4. デバッグ・プロセスを開始します。

    次のいずれかを実行します。

    • メイン・メニューから「実行」→「デバッグ」を選択します。

    • アプリケーション・ナビゲータでプロジェクト、adfc-config.xmlfaces-config.xml、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。

    • タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。

  5. アプリケーションがブレークポイントで一時停止されると、属性値バインディング上のブレークポイント・アイコンの隣に「実行ポイント」アイコンが表示されます。各種デバッガ・ウィンドウを使用して、アプリケーションを調査することができます。

    アプリケーションは、ADFソース・コード・メソッドのsetInputValue()メソッドの前で一時停止します。新しい値は、このメソッドに入るパラメータになります。


    注意:

    ブレークポイント・ウィンドウを確認するか、ブレークポイントの隣に「実行ポイント」アイコン(赤い右矢印)が表示されていることを確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。


  6. デフォルトでは、ADF構造ウィンドウとADFデータ・ウィンドウ、およびいくつかのデバッガ・ウィンドウが表示されます。ADF構造ウィンドウでは実行時構造、ADFデータ・ウィンドウではそれに対応するデータを調べることができます。31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。

  7. ADF構造ウィンドウでノードを選択すると、ADFデータ・ウィンドウに関連情報が表示されます。

  8. 必要に応じて、表31-3で説明したステップ機能を使用して、アプリケーションのデバッグを継続します。主要なステップ機能は、ステップ実行(F8)です。

    アプリケーションが一時停止しているときに、既存のブレークポイントを削除または無効化し、新しいブレークポイントを設定できます。

31.8.5 ADFライフサイクル・フェーズ・ブレークポイントの設定方法および使用方法

ADFライフサイクル・フェーズのBeforeブレークポイントとAfterブレークポイントを任意のADFライフサイクル・フェーズに設定できます。各フェーズに、Beforeのみ、Afterのみ、または両方を設定できます。必要な数のフェーズにブレークポイントを設定できます。

ブレークポイント・ウィンドウのメニューから「ADFライフサイクル・フェーズ・ブレークポイントの作成」ダイアログを使用し、ブレークポイントを作成して、オプションをカスタマイズできます。または、ADFライフサイクル・ブレークポイント・ウィンドウを使用してデフォルト・オプションのブレークポイントを作成できます。ライフサイクル・ブレークポイントを設定した後で、ブレークポイント・ウィンドウから開始できる「ADFライフサイクル・フェーズ・ブレークポイントの編集」ダイアログを使用してオプションを編集できます。

ADFライフサイクル・ブレークポイントは次に示す任意のADFライフサイクル・フェーズに設定できます。

  • JSFのビューのリストア

  • コンテンツの初期化

  • モデルの準備

  • JSFのリクエスト値の適用

  • JSFの検証処理

  • JSFのモデル値の更新

  • モデル更新の検証

  • JSFのアプリケーションの起動

  • メタデータのコミット

  • レンダリング準備

  • JSFのレスポンス・レンダリング

ブレークポイント・ウィンドウでADFライフサイクル・フェーズ・ブレークポイントを設定または管理するには:

  1. 「ビュー」→「ブレークポイント」を選択して、ブレークポイント・ウィンドウを開きます。

  2. 「追加」アイコンをクリックし、「ADFライフサイクル・フェーズ・ブレークポイント」を選択します。

  3. 「ADFライフサイクル・フェーズ・ブレークポイントの作成」ダイアログの「定義」タブで、次の手順を実行します。

    • ブレークポイントを設定するADFライフサイクル・フェーズを選択します。

    • 「フェーズの前」または「フェーズの後」のブレークポイントを選択します。

  4. 「条件」タブで必要なオプションを選択し、「OK」をクリックします。

  5. 「アクション」タブで必要なオプションを選択し、「OK」をクリックします。

ブレークポイント・アイコンを使用してADFライフサイクル・フェーズ・ブレークポイントを設定するには:

  1. タスク・フロー・ダイアグラマまたはADF構造ウィンドウで、ADFライフサイクル・ブレークポイントのアイコン(図31-27)をクリックします

    図31-27 ADFライフサイクル・ブレークポイントのアイコン

    ADFライフサイクル・ブレークポイントのアイコン
  2. ADFライフサイクル・ブレークポイント・ウィンドウで、ADFライフサイクル・フェーズの左預保あくをクリックしてBeforeブレークポイントを設定し、右余白をクリックしてAfterブレークポイントを設定します。図31-28に示すように、ブレークポイントを示す赤い点アイコンが設定されます。このブレークポイントはデフォルトのブレークポイント・オプションで設定されます。ブレークポイントを削除するには赤い点アイコンをクリックします。

    図31-28 ADFライフサイクル・ブレークポイント・ウィンドウでのブレークポイントの設定

    ADFライフサイクル・ブレークポイント・ウィンドウの使用
  3. ブレークポイント・オプションを編集する場合は、ブレークポイント・ウィンドウでブレークポイントを選択し、「編集」アイコンを選択します。

ADFライフサイクル・フェーズ・ブレークポイントを使用してアプリケーションをデバッグするには:

  1. デバッグ・プロセスを開始します。

    次のいずれかを実行します。

    • メイン・メニューから「実行」→「デバッグ」を選択します。

    • アプリケーション・ナビゲータでプロジェクト、adfc-config.xmlfaces-config.xml、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。

    • タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。

  2. アプリケーションがADFライフサイクル・フェーズ・ブレークポイントで一時停止すると、図31-29に示すように、ADFライフサイクル・ブレークポイント・ウィンドウで、実行ポイントのアイコンがブレークポイント・アイコンの横に表示され、ADFライフサイクル・フェーズが太字になります。各種デバッガ・ウィンドウを使用して、アプリケーションを調査することができます。

    図31-29 ADFライフサイクル・ブレークポイント・ウィンドウでの実行ポイントの表示

    ADFライフサイクル・ブレークポイント・ウィンドウ

    注意:

    ブレークポイント・ウィンドウでブレークポイントの到達を確認するか、ブレークポイントの隣に「実行ポイント」アイコン(赤い右矢印)が表示されていることを確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。


  3. デフォルトでは、ADF構造ウィンドウとADFデータ・ウィンドウ、およびいくつかのデバッガ・ウィンドウが表示されます。ADF構造ウィンドウでは実行時構造、ADFデータ・ウィンドウではそれに対応するデータを調べることができます。現在のADFライフサイクル・フェーズはADF構造ウィンドウの一番上に表示されます。詳細は、31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。

  4. ADF構造ウィンドウでノードを選択すると、ADFデータ・ウィンドウに関連情報が表示されます。

  5. 必要に応じて、表31-3で説明したステップ機能を使用して、アプリケーションのデバッグを継続します。主要なステップ機能は、ステップ実行(F8)です。

    アプリケーションが一時停止しているときに、既存のブレークポイントを削除または無効化し、新しいブレークポイントを設定できます。

31.8.6 ADF構造ウィンドウの使用方法

アプリケーションがブレークポイントで停止すると、ADF構造ウィンドウに、アプリケーション内でのADFランタイム・オブジェクトやその相互関係がツリー構造として表示されます。特に、メイン・ブラウザ・ウィンドウまたは含まれているリージョンやポートレットを表現する、ビュー・ポートの階層が表示されます。ADF構造ウィンドウで各種の項目を選択すると、対応するADFデータ・ウィンドウに表示される関連情報が変化します。ADFデータ・ウィンドウの詳細は、31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。

次のどちらかがtrueのとき、デバッグ・セッションでは、デフォルトでADF構造ウィンドウとADFデータ・ウィンドウが表示されます。

  • デバッグしているプロジェクトに、WEB-INF/adfc-config.xmlファイルが含まれる。

  • デバッグしているプロジェクトに、ADF Facesタグ・ライブラリが含まれる。

ADF構造ウィンドウを開くには、メイン・メニューから「表示」→「デバッガ」→「ADF構造」を選択します。ADF構造ウィンドウでADFライフサイクル・ブレークポイントのアイコンを使用して、ADFライフサイクル・ブレークポイント・ウィンドウを開きます。

ブレークポイントに到達すると、図31-30に示すように、ADF構造ウィンドウにADFライフサイクル・フェーズとランタイム・オブジェクトのツリー構造が表示されます。

図31-30 ADF構造ウィンドウでのランタイム・オブジェクトの表示

「ADF構造」ペイン

ADF構造ウィンドウで項目を選択すると、その項目に関連付けられているデータと値がADFデータ・ウィンドウに表示されます。図31-31に、ADF構造ウィンドウで選択されたタスク・フローと、ADFデータ・ウィンドウに表示された関連情報を示します。

図31-31 ADF構造ウィンドウの選択内容とADFデータ・ウィンドウのデータ

ADF構造ウィンドウの選択内容とADFデータ・ウィンドウのデータ

階層のルートは、兄弟ノードである「スコープ」「ADFコンテキスト」です。処理が停止した現在のビュー・ポートは、太字で表示されます。ツリー内のデフォルトの選択内容は前のブレークポイントから保持されるため、ブレークポイント間での変化を監視することができます。ADF宣言ブレークポイントが定義されているADFオブジェクトは、対応するJDeveloperエディタ(タスク・フロー・ダイアグラマ、またはページ定義ファイルの概要エディタ)で開かれます。

ADF構造ツリーは、変更されたオブジェクト状態を反映するため、アプリケーションがブレークするたびに、また後続のステップでも再ビルドされます。全体のツリー階層が表示されますが、選択したり、さらに調査したりできるのは、現在のビュー・ポートとその親ビュー・ポートの範囲内の項目のみです。現在のコンテキストにない、ツリー階層の他のすべての項目は、淡色表示され、無効にされます。また、この階層を使用して、アプリケーションの範囲内でのランタイム・オブジェクト間の関係を特定することもできますが、現在のコンテキスト(およびその親のビュー・ポート)に限定されます。

表31-4に、ADF構造ウィンドウの階層ツリーに表示できる、各種の項目を示します。

表31-4 ADF構造ウィンドウの項目

ADF構造ツリーの項目 説明

スコープ

ADF構造階層の一番上で兄弟ノードの「ADFコンテキスト」よりも上に表示されます。ADF構造階層には「スコープ」ノードは1つしかありません。「スコープ」ノードを展開すると、子スコープ・ノード(viewScopepageFlowScopeなど)のリストが表示されます。子スコープ・ノードを選択すると、ADFデータ・ウィンドウにそのスコープの変数と値が表示されます。

ADFコンテキスト

ADF構造階層のルート・ノードとして、兄弟ノードの「スコープ」の下に表示されます。ADF構造階層内にはADFコンテキストは1つのみ存在する。

ビュー・ポート

ビュー・ポートは、ADFコントローラの概念。このため、デバッグしているアプリケーションがADFコントローラを利用するときだけ、ADF構造階層の範囲内でビュー・ポートが表示される。

ビュー・ポートは、次のいずれかを表現可能。

  • ブラウザ: メイン・ブラウザ・ビュー・ポート(ルート・ビュー・ポート)は、ルートの「ADFコンテキスト」の子として表示されます。ランタイムのデバッグ・セッション中に複数のブラウザ・ウィンドウが開いている場合、複数のブラウザ・ビュー・ポートが階層内に示されます。各ブラウザ・ビュー・ポートのラベルにはブラウザというテキストが表示されます。ビュー・ポートにはビュー・ポートIDを示すツールチップも用意されており、ビュー・ポート: 999999のように表示されます。

  • リージョン: リージョン・ビュー・ポートは、ページまたはページ・フラグメントの子として表示される。これらは子ビュー・ポートとも呼ばれます。各リージョン・ビュー・ポートのラベルには、テキスト「リージョン」が表示される。リージョンにはビュー・ポートIDを示すツールチップも用意されており、子ビュー・ポート: 999999のように表示されます。

ADFタスク・フロー

各ビュー・ポートに対応するページ・フロー・スタックは、ADFタスク・フローの階層として表示されます。スタックに対応してコールされる最初のADFタスク・フローは、対応するビュー・ポートの直接の子である。各ADFタスク・フローのラベルは、対応するADFタスク・フロー表示名(存在する場合)、またはそのタスク・フローIDを反映する。リージョン・ビュー・ポートには、内包された無制限タスク・フローのためのページ・フロー・スタック階層内の項目は表示されません。タスク・フローにも、ADFタスク・フロー・パスを表示するツールチップと、エディタ・ワークスペース内の、対応するADFタスク・フローを開くポップアップ・メニュー項目が用意されている。

アプリケーションがADFコントローラを利用しない場合(またはページがADFタスク・フローのコンテキストの外部で実行される場合)、ADFタスク・フローは階層内に表示されない。

ページ

ブラウザ・ビュー・ポート内で現在表示されているページ(ビュー)を表します。関連付けられたバインディング・コンテナ(ある場合)と一緒に子として示されます。デバッグしているアプリケーションがADFコントローラを利用する場合、ページは各ブラウザ・ビュー・ポートの子です。各ページのラベルは、対応するランタイム・ビューIDを反映する。ページにも、ページ・パスを表示するツールチップと、エディタ・ワークスペース内の、対応するページを開くポップアップ・メニュー項目が用意されている。アプリケーションでビジュアル・ユーザー・インタフェースが実装されていない場合、ページは階層内に表示されない。

ページ・フラグメント

リージョン・ビュー・ポート内で現在表示されているページ・フラグメントを表す。関連付けられたバインディング・コンテナ(ある場合)と一緒に子として示されます。デバッグしているアプリケーションがADFコントローラを利用する場合、ページ・フラグメントは各リージョン・ビュー・ポートの子である。各ページ・フラグメント・ノードのラベルは、対応するランタイム・ビューIDを反映する。ページ・フラグメントにも、ソース・ファイル・ページ定義パスを表示するツールチップと、エディタ・ワークスペース内の、対応するページ・フラグメントを開くポップアップ・メニュー項目が用意されています。

バインディング・コンテナ

対応するページまたはページ・フラグメントのバインディング・コンテナを表す。各バインディング・コンテナのラベルは、対応するファイル名(ページ定義ファイル)から拡張子を除いたものを反映する。バインディング・コンテナ・ノードにも、ページ・フラグメント・パスを表示するツールチップが用意されています。タスク・フロー・アクティビティ・バインディング(たとえば、メソッド・コール・アクティビティ・バインディング)を表すために使用される場合は、バインディング・コンテナも現在のタスク・フローの下に表示される。

アプリケーションでADFモデルが利用されない場合、バインディング・コンテナは表示されない。

アプリケーション・データ

対応するビュー・ポート(または、ADFコントローラが使用されない場合はバインディング・コンテナ)のデータ・コントロール・フレーム内でインスタンス化されたアプリケーション・データ・オブジェクト(ADFビジネス・コンポーネント・オブジェクトまたはADFビジネス・コンポーネント・ビジネス・サービス・オブジェクトなど)を表します。現在、アプリケーション・データ・ノードを表示するために、アプリケーション・データ・オブジェクトをインスタンス化する必要はありません。


31.8.7 ADFデータ・ウィンドウの使用方法

アプリケーションがADF宣言ブレークポイントで一時停止されるとき、ADFデータ・ウィンドウには、ADF構造ウィンドウ内での選択内容に基づく関連データが表示されます。ADFデータ・ウィンドウを開くには、メイン・メニューから「表示」→「デバッガ」→「ADFデータ」を選択します。ADF構造ウィンドウでの選択内容に基づくADFデータ・ウィンドウの内容を、表31-5に示します。

表31-5 ADF構造ウィンドウの選択内容に対応するADFデータ・ウィンドウの内容

ADF構造ウィンドウ ADFデータの内容

スコープ

現在のコンテキストに基づくメモリー・スコープ値が表示されます。pageFlowScopeもADFタスク・フローの内容に表示されます。選択されたADFタスク・フロー(現在のコンテキストとはかぎらない)に固有のpageFlowScope値です。viewScopeもビュー・ポートの内容に表示されます。選択されたビュー・ポート(現在のコンテキストとはかぎらない)に固有のviewScope値です。

ADFコンテキスト

ADFコンテキストの変数と値の階層が表示されます。#(data.adfContext) EL式をELエバリュエータで評価して、ADFコンテキストの変数と値を検査することができます。

ビュー・ポート

viewScopeの内容などの、ビュー・ポート詳細が表示されます。

ページ・フロー・スタック・エントリ

現在のトランザクション・ステータスやADFモデル・セーブポイント・ステータスなど、選択されているページ・フロー・スタック・エントリの情報が表示されます。

ページ/ページ・フラグメント

ページまたはページ・フラグメントがレンダリングされた場合は、選択されたページまたはページ・フラグメントに対応する、ページまたはページ・フラグメントUIコンポーネント・ツリー階層が表示される。

バインディング・コンテナ

パラメータ、バインディング、実行可能ファイルなど、バインディング・コンテナの実行時値が表示されます。

アプリケーション・データ

現在のバインディング・コンテキストでインスタンス化されたアプリケーション・データ・オブジェクト(たとえばADFビジネス・コンポーネント・オブジェクト)が表示されます。ビジネス・サービス・レイヤーがADFビジネス・コンポーネント・オブジェクト(たとえばEJB)以外のテクノロジで実装されている場合、アプリケーション・データ・オブジェクトはより一般的な形式で表示されます。


ADF構造ウィンドウの「スコープ」ノードを展開すると、子スコープ・ノードのリストが表示されます。ADF構造ウィンドウで子スコープ・ノードを選択すると、ADFデータ・ウィンドウに、選択したメモリー・スコープの現在のコンテキスト値が表示されます(図31-32)。

図31-32 ADF構造ウィンドウで選択された子スコープ

ADF構造ウィンドウで選択された子スコープ

「スコープ」ノードそのものを選択した場合は、メモリー・スコープすべてのリストがADFデータ・ウィンドウにも表示されます。このリストも検査のために展開できます。図31-33では、ADF構造ウィンドウで「スコープ」ノードが選択され、ADFデータ・ウィンドウではviewScope子ノードが選択されて値が表示されています。requestScopeviewScopepageFlowScopeapplicationScopeおよびsessionScopeに対応する各ノードを展開して値を検査できます。pageFlowScopeも、ADFタスク・フローの内容に表示され、ADF構造ウィンドウで現在選択されているADFタスク・フロー固有の値を反映します。viewScopeも、ビュー・ポートの内容に表示され、ADF構造ウィンドウで現在選択されている特定のビュー・ポートの値を反映します。

図31-33 ADF構造ウィンドウで選択された「スコープ」ノード

「スコープ」コンテキスト

図31-34のようにADF構造ウィンドウで「ADFコンテキスト」が選択されると、ADFコンテキスト変数の現在の値がADFデータ・ウィンドウに表示されます。#(data.adfContext) EL式をELエバリュエータで評価して、ADFコンテキストの変数と値を検査することもできます。詳細は、31.7.4項「EL式エバリュエータの使用」を参照してください。

図31-34 「ADFコンテキスト」が選択されたADFデータ・ウィンドウ

ADFコンテキストが選択された「ADFデータ」ペイン

ADF構造階層内でビュー・ポートを選択すると、図31-35に示すように、そのビュー・ポートの現在のビュー・ポート詳細がADFデータ・ウィンドウに表示されます。各ビュー・ポートで表示される値の概要を、表31-6に示します。

図31-35 ビュー・ポートが選択されたADFデータ・ウィンドウ

ビュー・ポートが選択された「ADFデータ」ペイン

表31-6 ビュー・ポートに対応するADFデータ・ウィンドウの内容

ビュー・ポート 説明

ビュー・ポートID

表示されます

クライアントID

表示されます

初期タスク・フローID

ビュー・ポート・ページ・フロー・スタック上の初期ADFタスク。無制限タスク・フローの場合は表示されません。対応するタスク・フロー定義をエディタ・ワークスペースで開くためのリンクとして表示される。

現在のタスク・フローID

バインド・タスク・フローでは表示され、無制限タスク・フローでは表示されません。ビュー・ポートのページ・フロー・スタック上の現在のADFタスク。対応するタスク・フロー定義をエディタ・ワークスペースで開くためのリンクとして表示される。

ビュー・アクティビティID

現在のADFタスク・フロー・ビュー・アクティビティID。現在のADFタスク・フロー・アクティビティがビュー・アクティビティである場合のみ適用される。

発行済アクティビティID

現在のリクエストを発行しているADFタスク・フロー・アクティビティ。

最終アクティビティID

現在のリクエストを受け取っているADFタスク・フロー・アクティビティ。

未処理のブックマーク・リダイレクト

(ブール)

例外

(存在する場合)

ビュー・メモリー・スコープ

選択したビュー・ポートのビュー・メモリー・スコープ変数と値。


ADF構造ウィンドウでは、ページ・フロー・スタック階層内の各ADFタスク・フローを選択できます。ADF構造ウィンドウでADFタスク・フローを選択すると、現在のタスク・フロー情報がADFデータ・ウィンドウに表示されます(図31-36)。選択したADFタスク・フローで使用されるタスク・フロー・テンプレートを判別するには、ADFタスク・フロー・ソース・ファイルに手動でナビゲートします。これは、Javaソース・ファイルで同様の機能を処理する方法と似ています。選択されたADFタスク・フローの現在の情報を表31-7に示します。

図31-36 タスク・フローが選択されたADFデータ・ウィンドウ

タスク・フローが選択された「ADFデータ」ペイン

表31-7 タスク・フローに対応するADFデータ・ウィンドウの内容

タスク・フロー 説明

ADFタスク・フローの参照

ADFタスク・フローの参照

タスク・フロー・コール・アクティビティID

コール元タスク・フローのタスク・フロー・アクティビティID。各ビュー・ポート・タスク・フロー・コール階層の最初のADFタスク・フローではnullとなる。

ビュー・アクティビティIDのコール中

ADFタスク・フロー(存在する場合)によって表示されている現在の表示アクティビティのコール元表示アクティビティ。

ビュー到達済

(ブール)

トレイン・モデル

現在のADFタスク・フロー・アクティビティがビュー・アクティビティである場合のみ適用される。

トランザクション開始済

(ブール)ADFタスク・フローのトランザクション状態の現行ステータスを特定する。たとえば、ADFタスク・フローが、新しいトランザクションを開始したかどうか。

トランザクション共有

(ブール)ADFタスク・フローのトランザクション状態の現行ステータスを特定する。たとえば、ADFタスク・フローが、既存のトランザクションに結合されたかどうか。

セーブポイント

ADFタスク・フローのADFモデル・セーブポイント作成状態の現行ステータスを特定します。たとえば、モデル・セーブポイントが、ADFタスク・フロー・エントリ上に作成されたか。

リモート・タスク・フロー・コール済

(ブール)

リモート・タスク・フロー・リターンURL

ADFタスク・フローをリモートからコールする場合にのみ適用される。リモートからコールされたタスク・フローが完了したときに戻すURLを特定する。

データ・コントロール・フレーム作成済

(ブール)

データ・コントロール・フレーム

ADFタスク・フローに関連付けられたデータ・コントロール・フレームの名前。

ページ・フロー・メモリー・スコープ

展開できるノードとして表示されます。ADF構造ウィンドウで選択されたタスク・フローのページ・フロー・メモリー・スコープの値を検査できます。

ページ・フロー・メモリー・スコープは、ADF構造ウィンドウの「スコープ」ノードにも表示されます。ただし、「スコープ」ノードのページ・フロー・メモリー・スコープは、常にアプリケーションの現在のコンテキストに対応し、選択されているタスク・フローには対応していません。


ADF構造階層でページまたはページ・フラグメント・ノードを選択すると、図31-37に示すように、対応するUIコンポーネント・ツリーがADFデータ・ウィンドウに表示されます。ページまたはページ・フラグメントがページ・テンプレートに基づいている場合、ページ・テンプレートに由来する内容をファセット参照項目の外部に組み込むことができます。これには、ADFデータ・ウィンドウの一番上で「ページ・テンプレート・コンテンツを含める」チェックボックスを選択します。ページ・テンプレートの内容が組み込まれない場合、ページまたはページ・フラグメントのUIコンポーネント・ツリーはソース・ファイルのツリーと似た構造になります。

図31-37 ページが選択されたADFデータ・ウィンドウ

ページが選択された「ADFデータ」ペイン

ADF構造階層でバインディング・コンテナを選択すると、表31-8に示すノードの選択肢がADFデータ・ウィンドウに表示されます。

表31-8 バインディング・コンテナに対応するADFデータ・ウィンドウの内容

バインディング・コンテナ 説明

ページ定義リンク

対応するページ定義ソース・ファイルに移動して、エディタ・ワークスペースで開く。

データ・コントロール

バインディング・コンテナのデータ・コントロールが表示されます。

ADFビジネス・コンポーネント・オブジェクトよって実装されたデータ・コントロールと非ADFビジネス・コンポーネント・オブジェクトによって実装されたデータ・コントロールの表示は少し異なります。ADFビジネス・コンポーネント・ベースのデータ・コントロールの表示は、行コレクションを使用する実際のビジネス・サービス実装と似ています。非ADFビジネス・コンポーネント・ベースのデータ・コントロールは、通常、RAWメンバー変数として表示されます。これはADF宣言デバッガのデータ・ウィンドウに表示される項目と似ています。ADFデータ・ウィンドウには、メンバー変数や配列など、キャッシュされた情報しか表示されません。標準デバッガ機能を使用して、各項目をカスタマイズすることもできます。

各ADFビジネス・コンポーネント・データ・コントロールについて次の情報が表示されます。

  • 行コレクション

  • 各行コレクションの問合せ文字列

  • 各行コレクションに対する変数での置換を含む問合せ文字列

  • アプリケーション・データ行

  • 現在行のインジケータ

  • 更新識別子

  • 現在の値と元の値(同じリクエスト内で変更される場合)

パラメータ

すべてのバインディング・コンテナ・パラメータの現在の値。

実行可能ファイル

実行可能ファイルが表示され、現在行のインジケータと、現在と元の値(同じリクエスト内で変更された場合)が示されます。これには次のタイプの実行可能ファイルが含まれます。

  • イテレータ - 対応する属性バインディングがRefreshプロパティおよびRefreshConditionプロパティと一緒に表示されます。

  • タスク・フロー - タスク・フロー・バインディングに割り当てられたタスク・フローIDの現在の値、および関連するすべてのパラメータ値。タスク・フローIDは、対応するタスク・フロー定義ソース・ファイルをエディタ・ワークスペースで開くためのリンクとして表示される。リンク・テキストは、<task flow source document>#<task flow id>のように構成されます。

  • 検索リージョン - イテレータと似ていますが、基準と置換情報を含む基準も表示されます。

バインド

値、表、ツリーおよびメソッドのバインディングが表示されます。各バインディングには次の情報が含まれます。

  • 関連付けられた実行可能ファイル

  • 更新識別子

  • 現在の値と元の値(同じリクエスト内で変更される場合)

ページ・テンプレートのバインディング・コンテナ

対応するページまたはページ・フラグメントがページ・テンプレートを利用していた場合、ページ・テンプレートのバインディング・コンテナは、ページまたはページ・フラグメント・バインディング・コンテナの内容の子として表示されます。


非ADFビジネス・コンポーネント・オブジェクトに基づくアプリケーションのバインディング・コンテナを選択すると、ADFデータ・ウィンドウにバインディング・コンテナの内容が表示されます(図31-38)。

図31-38 バインディング・コンテナ(非ビジネス・コンポーネント)が選択されたADFデータ・ウィンドウ

非BC4Jデータ・コントロールのバインディング・コンテナ

ADFビジネス・コンポーネント・オブジェクトに基づくアプリケーションのバインディング・コンテナを選択すると、ADFデータ・ウィンドウに標準の行コレクション・アイコンが表示されます(図31-2)。

図31-39 バインディング・コンテナ(ビジネス・コンポーネント)が選択されたADFデータ・ウィンドウ

BC4Jデータ・コントロールのバインディング・コンテナ。

ADFデータ・ウィンドウの「パラメータ」ノードを展開すると、図31-40のように情報が表示されます。

図31-40 「パラメータ」が選択されたADFデータ・ウィンドウ

ADFデータ・ウィンドウでのバインディング・コンテナの「パラメータ」ノード

ADFデータ・ウィンドウの「実行可能ファイル」ノードを展開すると、図31-41のように情報が表示されます。

図31-41 「実行可能ファイル」が選択されたADFデータ・ウィンドウ

ADFデータ・ウィンドウの「実行可能ファイル」ノード

値が変更された場合、変更された項目は左側に青い点が付いてマークされ、以前の値がカッコ内に表示されます。たとえば、OrderTotalの値が7895.81から7670.11に変更されたとします。ADFデータ・ウィンドウでは、OrderTotalと親のOrdersView1Iteratorの横に青い点が表示され、「値」列に現在の値と前の値が表示されます(図31-42)。

図31-42 値の変更が青い点で示されるADFデータ・ウィンドウ

青い点で示されるバインディング・コンテナの値変更

メソッドのバインディング情報はADFデータ・ウィンドウで図31-43のように表示されます。

図31-43 メソッドのバインディングが選択されたADFデータ・ウィンドウ

ADFデータ・ウィンドウでのメソッドのバインディングの表示

ADF構造ウィンドウでアプリケーション・データ・ノードを選択すると、対応するビュー・ポート(または、ADFコントローラが使用されない場合はバインディング・コンテキスト)の現在のデータ・コントロール・フレーム内でインスタンス化されたアプリケーション・オブジェクト(ADFビジネス・コンポーネント・オブジェクトなど)が、ADFデータ・ウィンドウに表示されます。

ADFビジネス・コンポーネント・オブジェクトで実装されたビジネス・サービスによって、図31-44のようにアプリケーション・データの内容が表示されます。これは表31-9で説明します。

図31-44 ADFビジネス・コンポーネント・ビジネス・サービスのアプリケーション・データ

ADFデータ・ウィンドウでのBC4Jサービスの表示

表31-9 アプリケーション・データに対応するADFデータ・ウィンドウの内容

バインディング・コンテナ 説明

アプリケーション・モジュール

対応するビュー・ポートのデータ・コントロール・フレームのアプリケーション・モジュールが、アプリケーション・データ階層にルート・ノードとして表示されます。アプリケーション・モジュールの設計時のアイコンによってノードが示されます。アプリケーション・モジュール・ノードでは次の情報が提供されます。

  • アプリケーション・モジュール・リンク - 対応するアプリケーション・モジュールのソース・ファイルをエディタ・ワークスペースで開くためのリンク。

  • トランザクション - アプリケーション・モジュールの現在のトランザクション・ステータス(該当する場合)

  • ビュー・オブジェクト

  • エンティティ・オブジェクト

ビュー・オブジェクト

対応するビュー・ポートのデータ・コントロール・フレーム内でインスタンス化されたビュー・オブジェクトが、対応するアプリケーション・モジュール・ルート・ノードの下に下位ノードとして表示されます。設計時のアイコンによって示されます。子ビュー・オブジェクトは、親ビュー・オブジェクトの下位階層に表示されます。名前付き行セットはビュー・オブジェクトと同様に表示されます。ビュー・オブジェクトの名前付きイテレータは子ビュー・オブジェクトと同様に表示されます。各ビュー・オブジェクト・ノードでは次の情報が提供されます。

  • ビュー・オブジェクト・リンク - 対応するビュー・オブジェクトのソース・ファイルをエディタ・ワークスペースで開くためのリンク。

  • 問合せ - 最後に実行されたビュー・オブジェクトのSQL文。値の置換を含まないバインド変数が表示されます。

  • 置換を含む問合せ - 最後に実行されたビュー・オブジェクトのSQL文。値の置換を含むバインド変数が表示されます。

  • バインド変数 - 最後に実行されたビュー・オブジェクトのSQL文のバインド変数とその値

  • ビュー・オブジェクト行 - 表示される各行は、連結されたキー値で示されます。現在行は特別なアイコンで示されます。

  • 属性 - 各行に含まれる属性では、含まれるエンティティ・オブジェクトと一緒に現在の値が表示されます。一時属性も表示されます。

  • 変更 - 同じリクエストで行われた変更は、属性、行およびビュー・オブジェクトのノード・ラベルの左側の青い点で示されます。変更前と変更後の値が両方とも表示されます。

エンティティ・オブジェクト

対応するビュー・ポートのデータ・コントロール・フレーム内でインスタンス化されたエンティティ・オブジェクトが、アプリケーション・モジュール・ルート・ノードの下に下位ノードとして表示されます。設計時のアイコンによって示されます。各エンティティ・オブジェクト・ノードでは次の情報が提供されます。

  • エンティティ・オブジェクト・リンク - 対応するエンティティ・オブジェクトのソース・ファイルをエディタ・ワークスペースで開くためのリンク。

  • エンティティ・オブジェクト行 - 表示される各行は、連結されたキー値で示されます。行の現在のエンティティ状態とポスト状態(たとえばSTATUS_MODIFIED)も表示されます。

  • 属性 - 各行に含まれる属性については現在の値が表示されます。

  • 変更 - 同じリクエストで行われた変更は、属性、行およびエンティティ・オブジェクトのノード・ラベルの左側の青い点で示されます。変更前と変更後の値が両方とも表示されます。


非ADFビジネス・コンポーネント・オブジェクトによって実装されたビジネス・サービスでは、アプリケーション・データの内容がRAWメンバー変数を使用して表示されます。この形式は、図31-38に示す、バインディング・コンテナに関する非ADFビジネス・コンポーネントの内容の表示と似ています

31.8.8 ADF宣言ブレークポイント設定時の処理

ADF宣言ブレークポイントを設定すると、ADFソースJavaコード内の対応する適切なクラス、メソッドまたは他の構造体に、JDeveloperによってブレークポイントが追加されます。コードにブレークポイントが設定されると、アプリケーションがブレークポイントに到達したときに、標準Javaデバッガ・メカニズムによって実行が一時停止されます。ブレークポイントに到達すると、ブレークポイント・ウィンドウにおいて赤い点のアイコンで示されます。到達した宣言ブレークポイントのタイプに応じて、タスク・フロー・アクティビティ、ページ定義ブレークポイント余白、またはADFライフサイクル・ブレークポイント・ウィンドウでも、赤い点のアイコンとして示されます。

タスク・フロー・アクティビティ・ブレークポイントの場合、JSFアプリケーション起動フェーズ内で、ブレークポイントが設定されたアクティビティの前にアプリケーションがデバッガによって一時停止されます。つまり、ブレークポイントが設定されているアクティビティは実行されません。

ただし、タスク・フロー・ビュー・アクティビティの場合、アプリケーションは、ビュー・アクティビティが実行された後で、新しいページがレンダリングする前に、JSFレスポンス・レンダリング・フェーズ内で一時停止します。

ページ定義の実行可能ファイルのBeforeブレークポイントの場合、実行可能ファイルがリフレッシュされるとアプリケーションがデバッガによって一時停止されます。ページ定義のアクション・バインディングのBeforeブレークポイントの場合、バインディングが実行されるとアプリケーションがデバッガによって一時停止されます。ページ定義の属性値バインディングのBeforeブレークポイントの場合、ADFソース・コードの属性のsetInputValue()メソッドが実行される前に、アプリケーションがデバッガによって一時停止されます。

ライフサイクルのBeforeブレークポイントの場合、アプリケーションが次のライフサイクル・フェーズに入る前にデバッガによって一時停止されます。ライフサイクルのAfterブレークポイントの場合は、ライフサイクル・フェーズの後で次のフェーズの前にアプリケーションがデバッガによって一時停止されます。

31.9 Javaコード・ブレークポイントの設定

標準的なJavaコード・デバッガと同様に、ADF宣言デバッガを使用してJavaのクラスおよびメソッド上にブレークポイントを設定することができます。Javaコード・ブレークポイントは、ADF宣言ブレークポイントと組み合せて、または単独で使用できます。大部分のADFアプリケーションでは、ADF宣言ブレークポイントから、アプリケーションのトラブルシューティングに十分なデバッグ情報を得ることができます。ADF宣言ブレークポイントの使用方法の詳細は、31.8項「ADF宣言ブレークポイントの設定」を参照してください。ただし、詳しい検査を行うには、場合によって特定のクラスまたはメソッドにブレークポイントを設定する必要があります。あるいは、非ADFアプリケーションをデバッグする場合に、Javaコード・ブレークポイントを使用できます。

JDeveloperでは、ブレークするクラスを見つけるためのクラス・ロケータ機能が提供されます。Oracle ADFソース・コードを取得できる場合、様々なADFクラスおよびメソッドにアクセスして、デバッグの効率を上げることができます。ADFソース・コードの取得方法の詳細は、31.7.1項「デバッガでのADFソース・コードの使用」を参照してください。ADFソースを取得すると、31.9.4項「シンボリック・デバッグでデバッグ・ライブラリを使用する方法」で説明するように、ADFソースのデバッグ・ライブラリ・バージョンを使用してデバッグの効率を上げることができます。

31.9.1 クラスおよびメソッド上にJavaブレークポイントを設定する方法

クラスおよびメソッド上にJavaブレークポイントを設定できます。ADFソース・コードがある場合、ソースにもJavaブレークポイントを設定することができます。ADFアプリケーションをデバッグしている場合、Javaコード・ブレークポイントでなくADF宣言ブレークポイントを使用することができないか確認することをお薦めします。詳細は、31.8項「ADF宣言ブレークポイントの設定」を参照してください。

ブレークポイントの使用を試みる前に、アプリケーションを実行し、欠落しているデータや不完全なデータ、無視されるアクションとメソッド、正しく実行されていないアクションとメソッド、あるいはその他の予期しない結果があるか調べることをお薦めします。問題がなければ、ADFログを有効にしてOracle ADFメッセージをログ・ウィンドウに送信するデバッグ構成を作成します。詳細は、31.5.2項「Oracle ADFデバッグ構成の作成方法」を参照してください。

Javaブレークポイントを設定してアプリケーションをデバッグするには:

  1. メイン・メニューで「ナビゲート」→「Javaタイプに移動」を選択し(または[Ctrl]を押しながら[-]を押し)、ダイアログを使用して、処理が失敗しているエントリ・ポイントを表すOracle ADFクラスを見つけます。


    注意:

    JDeveloperにより、「アプリケーション・ナビゲータ」内で現在フォーカスのあるユーザー・インタフェース・プロジェクトからのクラスが特定されます。ワークスペースに複数のユーザー・インタフェース・プロジェクトが含まれている場合は、デバッグの対象となるプロジェクトに現在フォーカスがあることを確認してください。


  2. ソース・エディタでクラス・ファイルを開き、メソッドの文をトレース実行できるOracle ADFメソッド・コールを見つけます。

  3. 目的のメソッドにブレークポイントを設定し、デバッガを実行します。

  4. アプリケーションがブレークポイントで停止したら、データ・ウィンドウを使用して、現在のコンテキストのローカル変数および引数を調べます。


ヒント:

データ、監視またはスマート・データ・ウィンドウで「ソースへ移動」ポップアップ・メニュー・コマンドを使用している場合、「戻る」ボタンを使用することにより実行ポイントに戻ることができます。「ナビゲート」メニューを使用して「戻る」ボタンにアクセスすることもできます。


アプリケーションを一時停止するブレークポイントをキー・ポイント上に設定した後は、データ・ウィンドウにデータを表示できます。WebページとADFモデル・レイヤーの対話を効率的にデバッグするには、次のことを理解する必要があります。

  • ADFページのライフサイクルと、起動されるメソッド・コール

  • アプリケーションの処理過程でADFモデル・レイヤーに含まれる必要のあるローカル変数および引数

Oracle ADFの処理を理解しておくことは、ブレークポイントを選択的に設定し、アプリケーションによりロードされたデータを調べ、エラーの要因を特定するための手がかりとなります。


注意:

JSF Webページでは、ページのコンポーネントとデータの間の対話を管理するためにバッキングBeanを使用している場合もあります。他のJavaクラス・ファイルと同様に、ブレークポイントを設定してバッキングBeanをデバッグします。


31.9.2 ソース・エディタの使用を最適化する方法

ADFソース・ライブラリをプロジェクトに追加すると、ソース・エディタで使用可能になる有用なQuick JavaDoc機能([Ctrl]+[D])([Ctrl]+[D])にアクセスできるようになります。図31-45に、findSessionCookie()などのメソッドのためのQuick Javadoc機能を示します。

図31-45 ソース・エディタでのADF API上のQuick JavaDocの使用

コード・エディタでのQuick JavaDocのスクリーンショット

31.9.3 ADFソース・コードを使用してブレークポイントを設定およびデバッグする方法

ADFソース・コードをロードした後、Javaコードと同じ方法で、現在のプロジェクトに対するOracle ADFコードをデバッグできます。つまり、[Ctrl]+[-]キーを押してOracle ADFで任意のクラス名を入力すると、JDeveloperによってそのソース・ファイルが自動的に開かれるため、必要に応じてブレークポイントを設定できます。

31.9.4 シンボリック・デバッグでデバッグ・ライブラリを使用する方法

Oracle ADFソース・コードをデバッグする際、デフォルトでは現在実行中のメソッドのパラメータまたはメンバー変数の記号情報は表示されません。

たとえば、ADFソース・コード・デバッグ・ライブラリのないデバッグ・セッションでは、図31-46に示すように、「_slot」など認識できない名前があることがあります。

図31-46 デバッグ・ライブラリがないとわかりにくいローカル記号

デバッグ・ライブラリがないデバッガでの記号のスクリーンショット

これらの名前はわかりにくいため、デバッグが困難になります。開発環境でデバッグする場合、ソースとともに提供されるADF JARファイルのデバッグ・バージョンを使用することにより、デバッグを容易にできます。


注意:

通常、提供されたデバッグ・ライブラリは、JDeveloperに同梱されている最適化されたJARファイルに比べ、実行時パフォーマンスがわずかに劣るため、テスト環境または本番環境では使用しないでください。


デバッグ・ライブラリJARは、デバッグ情報を追加してコンパイルされたバージョンのOracle ADF JARファイルです。デフォルトの最適化されたJARファイルでなく、これらのデバッグ用JARを使用すると、デバッガにすべての情報が表示されます。たとえば、図31-47に示すように、変数evidの名前が、デバッガで確認できるようになります。

図31-47 デバッガに表示されるシンボル情報

デバッグ・ライブラリのあるデバッガ

標準ライブラリJARを置き換える前に、JDeveloperが実行中でないことを確認します。実行中の場合、先に進まずにその製品を終了します。

標準ライブラリJARをデバッグ・ライブラリJARに置き換えるには:

  1. JDeveloperを終了した状態で、JDeveloperインストール先の./BC4J/libディレクトリで、既存の最適化されたJARファイルすべてのbackupサブディレクトリを作成します。たとえば、jdev11をJDeveloperのホーム・ディレクトリとすると、次のようになります。

    C:\jdev11\BC4J\lib> mkdir backup
    C:\jdev11\BC4J\lib> copy *.jar backup
    
  2. デバッグ時にデバッグ記号を使用する各ADFライブラリに対して、C:\jdev11\BC4J\libディレクトリで対応する既存のライブラリに、一致するライブラリの_g.jarバージョンをコピーします。

    これは、手順2で最適化されたJARファイルのバックアップをbackupディレクトリに作成してあるため安全です。

    通常、デバッグ・ライブラリはデバッグ情報なしでコンパイルされたライブラリよりも実行速度が劣るため、この診断メッセージは実行タイミングでデバッグ・ライブラリを使用しないように注意を促すものです。

    **************************************************************************
    *** WARNING: Oracle BC4J debug build executing - do not use for timing ***
    **************************************************************************
    
  3. 最適化されたライブラリに戻すには、該当するJARファイルを./BC4J/lib/backupディレクトリから./BC4J/libディレクトリにコピーして戻します。

31.9.5 様々なJavaコード・ブレークポイントの使用方法

最初に、様々なJavaコード・ブレークポイントとそれを作成する場所を理解する必要があります。

デバッガのブレークポイント・ウィンドウを表示するには、メイン・メニューで「ビュー」→「ブレークポイント」を選択するか、[Ctrl]、[Shift]、[R]を同時に押します。

ブレークポイント・ウィンドウで、ポップアップ・メニューから「ブレークポイントの作成」を選択することで、新規のJavaコード・ブレークポイントを作成できます。表31-10に示すように、「ブレークポイント型」ドロップダウン・リストでは、作成するブレークポイントの種類をコントロールします。


注意:

「ブレークポイントの作成」ダイアログを使用して、ADFライフサイクル・フェーズ宣言ブレークポイントを作成することもできます。ADF宣言ブレークポイントの作成の詳細は、31.8.5項「ADFライフサイクル・フェーズ・ブレークポイントの設定方法および使用方法」を参照してください。


表31-10 様々な型のJavaブレークポイント

ブレークポイント型 ブレークポイントが発生する条件 使用方法

例外

このクラス(またはサブクラス)の例外がスローされる場合。

例外ブレークポイントは、例外がどこで発生するかわからないが、例外の種類(たとえば、java.lang.NullPointerExceptionjava.lang.ArrayIndexOutOfBoundsExceptionoracle.jbo.JboException)はわかっているときに便利です。チェック・ボックス・オプションを使用することで、このクラスの例外を捕捉した場合にブレークするか、捕捉しなかった場合にブレークするかを制御できます。「参照」ボタンは、例外の完全修飾されたクラス名を検索するのに役立ちます。「例外クラス」コンボ・ボックスでは、最近使用した例外ブレークポイント・クラスが記憶されています。これはブレークポイント・ウィンドウでブレークポイントを作成する場合の、デフォルトのブレークポイント型であることに注意してください。

ソース

特定のパッケージで特定クラスの特定ソース行を実行する場合。

「ブレークポイントの作成」ダイアログでソース・ブレークポイントを作成することはほとんどありません。「ナビゲート」→「Javaタイプに移動」メニュー([Ctrl]を押しながら[-]を押す)を使用した後、必要な行番号までスクロールしてから(または「ナビゲート」→「指定行に移動」([Ctrl]を押しながら[G]を押す))、ブレークする行の左のブレークポイント余白をクリックする方法が簡単なためです。これは、新規のソース・ブレークポイントの作成と同じですが、パッケージ、クラスおよび行番号を手入力する必要がありません。

メソッド

指定されたクラスのメソッドが起動する場合。

メソッド・ブレークポイントは、問題のデバッグ中にコール・スタックで表示される、特定のメソッドにブレークポイントを設定するのに便利です。ソース・ブレークポイントを設定できるソースがそのクラスにある場合でも、この種のブレークポイントでは、クラスに対するソースがない場合もデバッガで停止します。

クラス

指定されたクラスのメソッドのいずれかが起動する場合。

クラス・ブレークポイントは、問題に関連するクラスのみが判明している場合に使用できますが、停止のための厳密なメソッドではありません。この種のブレークポイントはソースを必要としません。「参照」ボタンにより、ブレークするクラスの完全修飾名を迅速に検索できます。

監視ポイント

指定されたフィールドがアクセスまたは変更される場合。

監視ポイント・ブレークポイントは、クラス内部のコードが複数の異なる場所からメンバー・フィールドを直接変更する場合の問題の検出に使用できます。任意のフィールドが変更される際にデバッガを一時停止できます。クラスのソースのメンバー・フィールドを指し示し、ポップアップ・メニューから「監視ポイントの設定」メニュー項目を使用すると、このタイプのブレークポイントを作成できます。


31.9.6 コントロール向上のためのブレークポイントの編集方法

Javaコード・ブレークポイントの作成後は、ブレークポイントを右クリックして、ポップアップ・メニューから「編集」を選択すると、ブレークポイント・ウィンドウでブレークポイントを編集できます。


注意:

「ブレークポイントの編集」ダイアログを使用して、ADF宣言ブレークポイントを編集することができます。ただし、他の一部の情報、たとえば「定義」タブの情報などは編集できません。ブレークポイント・ウィンドウで、ポップアップ・メニューから「編集」を選択することで、「ブレークポイントの編集」ダイアログを起動することができます。ADF宣言ブレークポイントの作成の詳細は、31.8項「ADF宣言ブレークポイントの設定」を参照してください。


ブレークポイントの編集で使用できる機能は次のとおりです。

  • このブレークポイントをグループ化する、論理ブレークポイント・グループ名を、同じグループ名の他のグループに関連付けます。ブレークポイント・グループは、1つの操作でブレークポイントのセット全体を簡単に有効化または無効化できます。

  • ブレークポイントをヒットしたときに、デバッガ・アクションをブレークポイントに関連付けます。デフォルト・アクションでは、アプリケーションの状態を調査できるようにデバッガを停止しますが、警告音の追加、ログ・ファイルへの情報の書込み、ブレークポイントのグループの有効化または無効化も可能です。

  • 条件が合う場合にのみデバッガを停止するよう、条件式をブレークポイントに関連付けます。次のように、ほとんどすべてのブール式が可能です。

    • expr ==value

    • expr.equals("value")

    • expr instanceof.fully.qualified.ClassName


    注意:

    デバッガの監視ウィンドウを使用して、まず式を評価してその式が有効であるか確認します。


31.9.7 クラス・メンバーのビューのフィルタリング方法

デバッガを使用して、あらゆるクラスに対して、デバッガ・ウィンドウに表示されるメンバーをフィルタすることができます。デバッガのデータ・ウィンドウで任意の項目を選択し、ポップアップ・メニューから「プリファレンス」を選択すると、デバッガに表示されるメンバーと表示されないメンバー(場合によっては重要)をカスタマイズできるダイアログが表示されます。クラス・タイプを基準にフィルタすることで、デバッガのデータ・ウィンドウで必要になるスクロールの量を減らすことができます。これは特に、クラスのメンバーの少数のみに関連する場合に役立ちます。

31.9.8 一般的なOracle ADFブレークポイントの使用方法

Oracle ADFソース・コードをロードした場合、表31-11にリストされているブレークポイントを使用してアプリケーションをデバッグできます。

これらのブレークポイントをヒットした際にスタック・ウィンドウを参照してソースを確認することで、現状をよりよく把握することができます。

表31-11 よく使用されるADFブレークポイント

ブレークポイント ブレークポイント型 使用方法

oracle.jbo.JboException

例外

このブレークポイントは、すべてのADFビジネス・コンポーネントの実行時例外のベース・クラス上にブレークポイントを設定するために便利です。

oracle.jbo.DMLException

例外

これは、トリガーまたは制約違反によって発生する例外が原因で失敗したDML操作など、データベースから生じる例外のベース・クラスです。

doIt()

メソッド

同じデバッグ機能を、ページ定義アクション・バインディング上にADF宣言ブレークポイントを設定することによって実行することもできます。31.8.3項「ページ定義アクション・バインディング・ブレークポイントの設定方法および使用方法」を参照してください。

このJavaブレークポイントの方を使用する場合、JUCtrlActionBindingクラス(oracle.jbo.uicli.bindingパッケージ)にあります。

これは、任意のADFアクション・バインディングの起動時に実行されるメソッドです。関連する場合、ロジックに踏み込んでパラメータを確認できます。

oracle.jbo.server.ViewObjectImpl.executeQueryForCollection

メソッド

これはビュー・オブジェクトがSQL問合せを実行する際にコールされるメソッドです。

oracle.jbo.server.ViewRowImpl.setAttributeInternal

メソッド

これは任意のビュー行属性が設定される際にコールされるメソッドです。

oracle.jbo.server.EntityImpl.setAttributeInternal

メソッド

同じデバッグ機能を、ページ定義属性値バインディング上にADF宣言ブレークポイントを設定することによって実行することもできます。31.8.4項「ページ定義属性値バインディング・ブレークポイントの設定方法および使用方法」を参照してください。

これは任意のエンティティ・オブジェクト属性が設定される際にコールされるメソッドです。


31.10 JUnitを使用した回帰テスト

ビジネス・サービスのテストは、アプリケーション開発プロセスの重要な部分です。アプリケーション・モジュールで提供される機能を実行する一連のJUnit回帰テストを作成することで、新機能、バグ修正またはリファクタ実行のためにアプリケーションが不安定にならないことを確認できます。JDeveloperにはJUnit回帰テストの作成に対する統合サポートがあり、アプリケーションのテストを簡単に実行できます。JUnitテストの実行に関する統合サポートでは、チームの開発者であれば、マウスを1回クリックするだけでテスト・スイートを実行できます。すべてのチーム・メンバーがシステムの自らの変更箇所を確認するためにテストを実行する機会が増加します。また、Apache Antビルド・スクリプトを作成および実行するためにJDeveloperの統合サポートを使用すると、テストの実行を自動ビルド・プロセスに簡単に組み込むこともできます。アプリケーション・モジュールのJUnitテストの作成、実行、およびAntビルド・スクリプトへの統合を行うことができます。

JDeveloperでは、JUnitテスト・ケース、テスト・フィクスチャ、およびテスト・スイートを生成できます。テスト・ケースを作成し、単一または複数のJavaクラスを含む個別のJavaファイルをテストすることができます。JUnitテスト・ケースによって再利用されるJUnitテスト・フィクスチャを作成できます。これらのすべてのテスト・ケースは、JUnitテスト・スイートにグループ化し、ユニットとして一括して実行できます。

アプリケーション・モジュールがプロジェクトにあるときは、JUnit BC4Jテスト・スイート・ウィザードを使用してテスト・スイートを作成することもできます。ウィザードでは、アプリケーション・モジュールの各ビュー・オブジェクトについてテスト・スイート、テスト・フィクスチャおよびテスト・ケースが生成されます。

回帰テストを含む個別のプロジェクトを作成するか、テスト・ファイルを既存のプロジェクトに統合することもできます。ADFビジネス・コンポーネント・テストを作成している場合は、テスト用に別のプロジェクトを作成する必要があります。

テスト用のプロジェクトを別個に作成することには、次の利点があります。

JUnitテストのために別個のプロジェクトを作成する場合、テスト対象パッケージの構造と同一のディレクトリ構造を作成することをお薦めします。テスト・クラスに名前を付ける場合、テストされているパッケージを簡単に特定できるネーミング規則を使用することをお薦めします。たとえば、myClass.javaをテストする場合、テスト・クラスにmyClassTest.javaという名前を付けます。

プロジェクトを別々にすることにも多くの利点がありますが、場合によっては、テストをプロジェクトに含める方が簡単です。たとえば、Fusion Order Demoアプリケーションでは、FODCustomizationワークスペースのCustomization Extensionプロジェクト内にJUnit回帰テスト・スイートがあります。

プロジェクトについてテストの作成ウィザードを使用すると、JUnitテスト・ケース、テスト・フィクスチャ、またはテスト・スイートを作成できます。ただし、これらのテストがデプロイメントに含まれないようにする場合は、テストを外部に切り離して独自のプロジェクトにすることもできます。


ヒント:

テスト作成のウィザードが表示されない場合は、続行する前にJDeveloperの「ヘルプ」→「更新の確認」機能を使用して、JUnit統合拡張機能をインストールします。


各テスト・ケース・クラスには、テスト・ケースによって必要とされるリソースの初期化を可能にし、その後それらをクリーン・アップするためにJUnitによって起動される、setUp()およびtearDown()メソッドが含まれます。これらのテスト・ケース・メソッドは、対応するsetUp()およびtearDown()メソッドを起動して、各テスト・ケース実行のテスト・フィクスチャを準備およびクリーン・アップします。テスト・ケース内のテストの1つがアプリケーション・モジュールへのアクセスを必要とする場合は常に、テスト・フィクスチャのgetApplicationModule()メソッドを使用します。このメソッドは、テスト・ケースの最後で、setUp()への最初のコールからtearDown()への最後のコールまでの間に、テスト・フィクスチャ・クラスのメンバー・フィールドに保存された、同じアプリケーション・モジュールのインスタンスを戻します。

JDeveloperはJUnit 4をサポートしているため、明示的にメソッドsetUp()およびtearDown()に名前を付けなくても注釈を使用することができます。これらの注釈、@Beforeおよび@Afterを使用すると、必要に応じて、複数のsetupおよびteardownメソッド(たとえば、継承したメソッドなど)を使用することができます。

生成されたExampleModuleConnectFixtureは、アプリケーションの取得および解放の詳細をカプセル化する、JUnitテスト・フィクスチャです。これには、アプリケーション・モジュールのインスタンスを作成するためにConfigurationクラスのcreateRootApplicationModule()メソッドを使用する、setUp()メソッドが含まれます。tearDown()メソッドは一致するreleaseRootApplicationModule()メソッドをコールして、アプリケーション・モジュールのインスタンスを解放します。

自身のテスト・メソッドでは、oracle.jboパッケージで使用可能な任意のプログラムのAPIを使用して、アプリケーション・モジュールおよびそのデータ・モデル内のビュー・オブジェクト・インスタンスを扱うことができます。また、ApplicationModuleインタフェースをカスタム・インタフェースにキャストして、テストがそのジョブの一部としてカスタム・サービス・メソッドを起動するようにします。それぞれのテスト中に、JUnitフレームワークによって提供されている1つ以上のassertXxx()メソッドをコールして、特定の式の予測結果がどのようになる必要があるかをアサートします。テスト・スイートを実行する際、任意のテスト・ケースの任意のテストに失敗したアサーションが含まれる場合、JUnitテスト・ランナー・ウィンドウに失敗したテストが赤の失敗アイコンとともに表示されます。

JUnitテスト生成ウィザードによってデータ・モデルの各ビュー・オブジェクト・インスタンスに対してスケルトン・テスト・ケース・クラスが生成され、それぞれのクラスにはtestAccess()という名前の1つのテスト・メソッドが含まれます。このメソッドには、ビュー・オブジェクト・インスタンスが存在することをテストするassertNotNull()メソッドへのコールが含まれます。

// In ViewInstanceNameTest.java test case class
  public void testSomeMeaningfulName() {
  // test assertions here
  }

生成されたテスト・ケースそれぞれに、そのテスト・ケース実行の一部としてJUnitフレームワークが実行する1つ以上のテスト・メソッドを含めることができます。接頭辞testで始まる名前を持つクラスでpublic voidメソッドを作成するか、注釈@Testを使用するだけで、テストをテスト・ケースに追加できます。

31.10.1 JUnit拡張機能を取得する方法

JUnitを利用可能にし、メニュー・システムに表示されるようにするには、JDeveloperに拡張機能としてロードする必要があります。

JUnit拡張機能をロードするには:

  1. メイン・メニューから、「ヘルプ」「更新の確認」>を選択します。

  2. 「更新の確認」ダイアログの「ソース」ページで、「更新センターの検索」「Oracleの公式拡張機能と更新」を選択し、「次へ」をクリックします。

    JUnit zipファイルがある場合、またはJUnitの選択が「可能な更新」リストに表示されない場合は、「ローカル・ファイルからインストール」を選択してJUnit zipファイルをロードします。

  3. 「更新」ページで、図31-48に示すように、「JUnit統合」を選択し、「次へ」をクリックします。

    図31-48 JUnit拡張機能を追加するための「更新の確認」ダイアログ

    JUnit拡張機能用の「更新の確認」ダイアログ
  4. 「ライセンス契約」ページで、「同意します」「終了」の順にクリックします。

31.10.2 JUnitテスト・ケースの作成方法

JUnitテスト・ケースを作成する前に、テストされるプロジェクトの作成を完了している必要があります。

JUnitテスト・ケースを作成するには:

  1. アプリケーション・ナビゲータで、テスト・ケースを生成するプロジェクトを選択し、右クリックして「新規」を選択します。

  2. 「新規ギャラリ」で、「一般」を展開し、「ユニット・テスト (JUnit)」、続いて「テスト・ケース」を選択し、「OK」をクリックします。

  3. 「テスト・ケースの作成」ダイアログの「テストするクラスの選択」ページで、「テスト中のクラス」に入力するか、「参照」をクリックします。

  4. 「クラス・ブラウザ」ダイアログで、テストするクラスを確認します。または、「クラス名を一致」フィールドに最初の文字を入力します。「一致するクラス」リストは識別しやすいようにフィルタ処理されます。

    たとえば、FODと入力すると、図31-49に示すように、リストが3つの項目にまでフィルタされます。

    図31-49 テスト対象のクラス・ファイルを選択するためのクラス・ブラウザ

    JUnitクラス・ブラウザ

    クラスを選択し、「OK」をクリックして、ダイアログを閉じます。「次へ」をクリックします。

  5. テストする個別のメソッドを選択し、「次へ」をクリックします。

    たとえば、図31-50では、チェックされた4つのメソッドがテストされます。

    図31-50 テスト対象のメソッドを選択するための「テスト・ケースの作成」ダイアログ

    JUnitテストでのテスト・ケースの作成
  6. 「テスト・ケース・クラスの設定」ダイアログで、テスト・ケース、パッケージ、その拡張対象のクラスの名前を入力し、JUnitでスタブが作成される組込み機能のリストを選択します。「次へ」をクリックします。

    たとえば、図31-51では、JUnitは、oracle.fodemo.customizationパッケージに、FodCompanyCustomizationLayerTestテスト・ケースのためのsetUp()メソッドのスタブを作成します。

    図31-51 テスト対象のクラスを設定するための「テスト・ケースの作成」ダイアログ

    テスト・ケースの設定
  7. 「テスト・フィクスチャの選択」ページで、テスト・ケースに追加するテスト・フィクスチャを選択するか、「参照」をクリックします。

  8. テスト・ケースに追加するテスト・フィクスチャがすべてリスト中で選択されていることを確認し、「終了」をクリックします。

31.10.3 JUnitテスト・フィクスチャの作成方法

クラスまたはメソッドに対して複数のテストが必要な場合、JUnitテスト・フィクスチャを作成することをお薦めします。JUnitテキスト・フィクスチャを使用すると、テストを初期化するために必要なテスト・コードの重複作成を防止することができます。

JUnitテスト・フィクスチャを作成するには:

  1. アプリケーション・ナビゲータで、テスト・フィクスチャを生成するプロジェクトを選択し、右クリックして「新規」を選択します。

  2. 「新規ギャラリ」で、「一般」を展開し、「ユニット・テスト (JUnit)」、続いて「テスト・フィクスチャ」を選択し、「OK」をクリックします。

  3. 「テスト・フィクスチャの作成」ダイアログで、テスト・フィクスチャの名前、パッケージ、およびその拡張対象のクラスを入力します。

  4. 「OK」をクリックします。

31.10.4 JUnitテスト・スイートの作成方法

JUnitテスト・スイートを作成する前に、テスト・スイートに追加できるJUnitテスト・ケースの作成を完了しておくことをお薦めします。

JUnitテスト・スイートを作成するには:

  1. アプリケーション・ナビゲータで、テスト・フィクスチャを生成するプロジェクトを選択し、右クリックして「新規」を選択します。

  2. 「新規ギャラリ」で、「一般」を展開し、「一般」「テスト・スイート」の順に選択して、「OK」をクリックします。

  3. 「テスト・スイートの作成」ダイアログの「テスト・スイート・クラスの設定」ページで、テスト・スイート、パッケージ、およびその拡張対象のクラスの名前を入力します。「次へ」をクリックします。

    たとえば、図31-52では、java.lang.Objectクラスを拡張するAllTestsテスト・スイートが作成されます。

    図31-52 テスト・スイートの作成ウィザード

    「テスト・スイートの作成」ダイアログ
  4. 「テスト・スイートの作成」ダイアログの「テスト・ケースの選択」ページで、テスト・スイートに組み込むすべてのテスト・ケースが選択されていることを確認します。作成したテストケースは、リストに移入されます。組み込まないテスト・ケースがあれば、その選択を解除します。「終了」をクリックします。

    たとえば、図31-53では、テスト・スイートに入れるために両方のテストケースが選択されています。

    図31-53 テスト・スイート用のテスト・ケースの選択

    テスト・スイート用のテスト・ケースの選択

31.10.5ビジネス・コンポーネント・テスト・スイートの作成方法

作成されるテキスト・フィクスチャは、接続数を減らすシングルトン・クラスです。各テスト・ケースで接続または切断する場合は、JUnit 4の注釈、@Beforeおよび@Afterを使用してテスト・ケースをカスタマイズします。

JUnit BC4Jテスト・スイート・ウィザードでは、アプリケーション・モジュールの各ビュー・オブジェクトに対してテストが生成されます。アプリケーション・モジュールがメソッドをエクスポートしていない場合、ウィザードによって、アプリケーション・モジュールそのもののテストも生成されます。生成されるビュー・オブジェクト・クラスの形式はview_objectVOTest.javaです。パッケージにはpackage.view.viewobjectVOという形式で配置されます。このときpackageはアプリケーション・モジュール・パッケージです。生成されるアプリケーション・モジュール・テストの形式はapplication_moduleAMTest.javaです。パッケージにはpackage.applicationModuleという形式で配置されます。生成されるテスト・フィクスチャ・クラスの形式はapplicationmoduleAMFixture.javaです。アプリケーション・モジュール・テストと同じパッケージに配置されます。

生成されるすべてのテスト・スイート・クラスの形式はAllapplicationmoduleTest.javaです。アプリケーション・モジュールのパッケージ名と同じ名前でパッケージに配置されます。

各アプリケーション・モジュールまたはビュー・オブジェクト・テストについてテスト・ケースのXMLファイルも生成されます。このXMLファイルには、アプリケーション・モジュールまたはビュー・オブジェクト・テスト・ケースで定義されているテスト・メソッドが含まれます。重複が多くなりすぎる可能性があるため、ベース・クラス(ある場合)のテスト・メソッドは含まれません。

たとえば、パッケージStoreAPackのビュー・オブジェクトEmployees1View1およびEmployees1View2を含むアプリケーション・モジュールStoreAAppModuleに対してテスト・スイートを作成した場合、アプリケーション・ナビゲータに図31-17のようなテスト階層が表示されます。

図31-54 アプリケーション・ナビゲータでのビジネス・コンポーネントのテスト・スイート

アプリケーション・ナビゲータでのビジネス・コンポーネントのテスト・スイート

作業を始める前に、次のようにします。

プロジェクトでアプリケーション・モジュールを作成します。

ビジネス・コンポーネント・テスト・スイートを作成するには:

  1. アプリケーション・ナビゲータで「新規」をクリックします。

    ビジネス・コンポーネント・テスト用に別のプロジェクトを作成します。

  2. 「新規ギャラリ」で、「一般」を展開し、「プロジェクト」「Javaプロジェクト」の順に選択して、「OK」をクリックします。

  3. 「Javaプロジェクトの作成」ウィザードの「プロジェクト名」ページで、テスト・プロジェクトの名前とディレクトリ・パスを入力し、「次へ」をクリックします。

  4. 「プロジェクトのJava設定」ページで、パッケージ名、プロジェクトのJavaソース・コードのディレクトリ、および出力クラス・ファイルが配置される出力ディレクトリを入力し、「終了」をクリックします。

  5. アプリケーション・ナビゲータで、テストするアプリケーション・モジュールをダブルクリックします。

  6. 概要エディタで、「Java」ナビゲーション・タブをクリックします。

  7. Javaページで、「Javaクラス」セクションの「編集」アイコンをクリックします。

  8. 「Javaオプションの選択」ダイアログで「アプリケーション・モジュール・クラスの生成」を選択して、「OK」をクリックします。

  9. 概要エディタの「Java」タブで、クラス・インタフェース・セクションの「編集」アイコンをクリックします。

  10. 「クライアント・インタフェースの編集」ダイアログで、テストするメソッドを「選択済」ペインに移動して、「OK」をクリックします。

  11. アプリケーション・ナビゲータで、作成したテスト・プロジェクトを右クリックして「新規」を選択します。

  12. 「新規ギャラリ」で、「一般」を展開し、「ユニット・テスト」「ビジネス・コンポーネントのテスト・スイート」の順に選択して、「OK」をクリックします。

  13. JUnit BC4Jテスト・スイート・ウィザードのテストの構成ページで次の値を選択し、「次へ」をクリックします。

    • ビジネス・コンポーネント・プロジェクト: テストするアプリケーション・モジュールを含むプロジェクトを選択します。

    • アプリケーション・モジュール: テストするアプリケーション・モジュールを選択します。

    • 構成: ローカル・アプリケーション・モジュールまたは共有アプリケーション・モジュールを選択します。

    • 「ベース・クラスのテスト」→「アプリケーション・モジュール拡張」: 様々なベース・クラスを指定できます。生成されるテスト・ケース・クラスはそのベース・クラスから拡張されます。このとき、ベース・クラスのすべてのpublic抽象メソッドの本体は単純なデフォルトの実装になります。

    • 「ベース・クラスのテスト」→「ビュー・オブジェクト拡張」: ビュー・オブジェクトが拡張するクラスを指定できます。生成されるテスト・ケース・クラスはそのベース・クラスから拡張されます。このとき、ベース・クラスのすべてのpublic抽象メソッドの本体は単純なデフォルトの実装になります。

  14. サマリー・ページで選択内容を確認して、「終了」をクリックします。

31.10.6ビジネス・コンポーネント・テスト・フィクスチャの作成方法

ビジネス・コンポーネントのテスト・スイートを作成すると、ビジネス・コンポーネントのテスト・フィクスチャも一緒に作成されます。また、ビジネス・コンポーネントのテスト・フィクスチャを個別に作成することもできます。

生成されるテスト・フィクスチャ・クラスの形式はapplicationmoduleAMFixture.javaです。形式がpackage.applicationModuleのパッケージに収められます。このとき、packageはアプリケーション・モジュール・パッケージです。

作業を始める前に、次のようにします。

プロジェクトでアプリケーション・モジュールを作成します。

ビジネス・コンポーネント・テスト・フィクスチャを作成するには:

  1. アプリケーション・ナビゲータで「新規」をクリックします。

    ビジネス・コンポーネント・テスト用に別のプロジェクトを作成します。

  2. 「新規ギャラリ」で、「一般」を展開し、「プロジェクト」「Javaプロジェクト」の順に選択して、「OK」をクリックします。

  3. 「Javaプロジェクトの作成」ダイアログの「プロジェクト名」ページで、テスト・プロジェクトの名前とディレクトリ・パスを入力し、「次へ」をクリックします。

  4. 「プロジェクトのJava設定」ページで、パッケージ名、ソース・ディレクトリおよび出力ディレクトリを入力し、「終了」をクリックします。

  5. アプリケーション・ナビゲータで、テストするアプリケーション・モジュールをダブルクリックします。

  6. 概要エディタで「Java」ナビゲーション・タブをクリックし、「Javaクラス」セクションの「編集」アイコンをクリックします。

  7. 「Javaオプションの選択」ダイアログで「アプリケーション・モジュール・クラスの生成」を選択して、「OK」をクリックします。

  8. 概要エディタで、クラス・インタフェース・セクションの「編集」アイコンをクリックします。

  9. 「クライアント・インタフェースの編集」ダイアログで、テストするメソッドを「選択済」ペインに移動して、「OK」をクリックします。

  10. アプリケーション・ナビゲータで、作成したテスト・プロジェクトを右クリックして「新規」を選択します。

  11. 「新規ギャラリ」で、「一般」を展開し、「ユニット・テスト」「ビジネス・コンポーネントのテスト・フィクスチャ」の順に選択して、「OK」をクリックします。

  12. JUnit BC4Jテスト・フィクスチャ・ウィザードのテストの構成ページで次の値を選択し、「次へ」をクリックします。

    • ビジネス・コンポーネント・プロジェクト: テストするアプリケーション・モジュールを含むプロジェクトを選択します。

    • アプリケーション・モジュール: テストするアプリケーション・モジュールを選択します。

    • 構成: ローカル・アプリケーション・モジュールまたは共有アプリケーション・モジュールを選択します。

  13. サマリー・ページでテスト・フィクスチャ・クラスを確認して、「終了」をクリックします。

31.10.7 Antビルド・スクリプトの一部としてのJUnitテスト・スイートの実行方法

Apache Antは、JDeveloperによる設計時サポートが提供されている、一般的なクロス・プラットフォーム・ビルド・ユーティリティです。Antの組込みjunitおよびjunitreportタスクを使用することにより、JUnitテストの自動実行とテスト出力レポート生成を組み込むことができます。例31-3では、CustomizationExtensionプロジェクトのFODCustomizationsのAnt build.xmlファイルからのtestsと呼ばれるタスクを示します。これは、testsターゲットを実行する前にAntが確実に実行しているbuildおよびbuildTestsターゲットに依存します。

例31-3 JUnitテスト・スイートを実行するAntビルド・ターゲット

  <target name="testCustomizations" depends="compileExtensionClasses">
    <junit printsummary="yes" haltonfailure="yes">
      <classpath refid="customization.classpath">
        <pathelement location="${customization.build.dir}"/>
      </classpath>
      <formatter type="plain"/>
      <test name="oracle.fodemo.customization.tests.AllTests"/>
    </junit>
  </target>

junitタグには、実行するテスト・スイート・クラスを識別するネストされたtestタグが含まれ、結果をレポートするディレクトリが指定されます。junitreportタグにより、Javadocの形式に類似するHTMLページのコレクションにテスト結果を書式設定できるようになります。

AntタスクからJUnitテストを試行するには、アプリケーション・ナビゲータでbuild.xmlファイルを選択し、ポップアップ・メニューから「Antターゲットの実行」testsを選択します。