Oracle® Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド 11gリリース1(11.1.1.9.0) B52028-07 |
|
前 |
次 |
この章では、Oracle Application Development Framework (Oracle ADF)を使用するアプリケーションのロギングおよびテストを行うツールについて説明します。ADF宣言デバッガを使用してブレークポイントを設定するデバッグ手順も示します。最後に、ADFビジネス・コンポーネント・ベースのビジネス・サービスに対する回帰テストを記述し、実行する方法について説明します。
この章には次の項が含まれます:
WebアプリケーションとOracle Application Development Framework (Oracle ADF)との対話のデバッグは、他のデバッグ・タスクと同様に、特定の要因を切り分けするプロセスです。ただし、Webアプリケーションの場合は一般に、このプロセスでJavaソース・コードのコンパイルが行われません。このため、Webページにはコンパイル用のJavaソース・コードは含まれません。実際には、アプリケーションを実行して使用してみるまで、問題が存在しているかわからないことがあります。たとえば、次のような障害は実行時に初めて現れます。
ページが見つからないというサーブレット・エラー
ページは見つかるが、コンポーネントがデータなしで表示される
メソッド・コールまたは組込み操作(「Next」や「Previous」など)の実行後、ページにデータが表示されない
ページは表示されるが、メソッド・コールまたは組込み操作をまったく実行できない
ページは表示されるが、予期しない検証エラーが発生する
データを表示できない、またはメソッド・コールを実行できない場合、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を使用した回帰テスト」を参照してください。
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-2に示すように、ページ内のコンパイル・エラーも表示されます。
スキーマ検証エラーを確認し、修正するには:
メイン・メニューで「表示」→「構造」を選択して「構造」ウィンドウを開くか、「表示」→「ログ」を選択して「ログ」ウィンドウを開きます。
どちらかのウィンドウで、エラー・メッセージをダブルクリックします。
XMLエディタで、強調表示された行を特定します。
エラーのある行が強調表示されます。
エラーを修正します。
エラーを修正すると、それに対応するエラー・メッセージは自動的に「構造」ウィンドウから削除されます。
必要であれば、プロジェクトを再コンパイルします。「実行」→「メイク」を選択し、コンパイラでエラー・メッセージがまだ生成されるかどうかをチェックします。
ADFモデル・レイヤーの障害はJDeveloperコンパイラでは検出できません。1つには、ページのデータ表示とメソッド実行の動作が宣言ADFページ定義ファイルに依存するためです。ADFモデル・レイヤーはこのような宣言ファイルを実行時に使用して、ADFバインディング・コンテナのオブジェクトを作成します。
スキーマ検証だけでなく、Webページを定期的に実行およびテストして、次のいずれの条件も存在していないことを確認すると効果的です。
データ・モデル・プロジェクトとユーザー・インタフェース・プロジェクトの間のプロジェクト依存関係が無効である。
デフォルトでは、データ・モデル・プロジェクト内のデータ・コントロールにアクセスするWebページを作成すると、プロジェクト間の依存関係が有効になります。しかし、アプリケーションを実行しようとしたときに依存関係が無効化されて再び有効化されないと、実行時に次の内部サーブレット・エラーが生成されます。
oracle.jbo.NoDefException: JBO-25002: 型nullの定義model.DataControls.dcxが見つかりません。
このエラーを修正するには、ユーザー・インタフェース・プロジェクトをダブルクリックし、ダイアログで「依存性」ノードを選択します。パネル内にModelProjectName.jprオプションが表示されていることを確認してください。
ページ定義ファイルの名前が変更されたのに、DataBindings.cpx
ファイルが依然として元のページ定義ファイル名を参照している。
JDeveloperではIDE内でのこれらのファイルの名前変更は許可されていませんが、JDeveloperの外部でページ定義ファイルの名前が変更された場合、DataBindings.cpx
ファイル内の参照が更新されていないと、実行時に次の内部サーブレット・エラーが生成されます。
oracle.jbo.NoDefException: JBO-25002: 型フォーム・バインディング定義の定義oracle.<path>.pageDefs.<pagedefinitionName>が見つかりません。
このエラーを修正するには、DataBindings.cpx
ファイルを開き、ソース・エディタを使用して<pageMap>
要素と<pageDefinitionUsages>
要素にあるページ定義ファイル名を編集します。
Webページ・ファイル(.jsp
または.jspx
)の名前が変更されたが、DataBindings.cpx
ファイルが依然として同じWebページの元のファイル名を参照している。
ページ・コントローラでは、ページのURLを使用して、Webページ用のADFバインディング・コンテナの作成に使用する適切なページ定義を決定します。URLからのページの名前がDataBindings.cpx
ファイルの<pageMap>
要素と一致しない場合、実行時に次の内部サーブレット・エラーが生成されます。
javax.faces.el.PropertyNotFoundException: プロパティ<propertyname>のテスト中にエラーが発生しました。
このエラーを修正するには、DataBindings.cpx
ファイルを開き、ソース・エディタを使用して<pageMap>
要素にあるWebページ・ファイル名を編集します。
WebページのEL式でバインディングの名前が変更されたが、ページ定義ファイルが依然として元のバインディング・オブジェクト名を参照している。
Webページに期待どおりの情報が表示されない可能性があります。このエラーを修正するには、ページ定義ファイル内のバインディング名と、表示されていないページ部分に対応するEL式とを比較します。不一致は値バインディングで発生する可能性が最も高く、その結果として、コンポーネントがデータなしで表示されます。イテレータ・バインディング名で不一致が発生した場合、エラーはもっと軽微になり、不一致の原因を特定するためにさらに詳細なデバッグが必要になることがあります。
ページ定義ファイル内のバインディングの名前変更または削除が行われたが、EL式が依然として元のバインディング・オブジェクト名を参照している。
デフォルトのエラー処理メカニズムによりADFバインディング・コンテナからのランタイム・エラーが捕捉されるため、このタイプのエラーは非常に簡単に検出できます。たとえば、ページ定義ファイル内の、findUsersByNameIter
という名前のイテレータ・バインディング名が変更されたが、ページが依然として元の名前を参照している場合、Webページに次のエラーが表示されます。
JBO-25005: 型イテレータ・バインディング定義のオブジェクト名<iterator>が無効です。
このエラーを修正するには、Webページで名前をクリックして「ページ定義に移動」を選択し、EL式内に使用する適切なバインディング名を見つけます。
式ピッカー・ダイアログを使用せずに手動でEL式を記述し、無効なオブジェクト名またはプロパティ名が入力されている。
このエラーは見つけにくいことがあります。エラーが含まれているEL式によって、サーブレットのエラー・メッセージが表示されることと、表示されないことがあります。たとえば、ランタイム結果を持たないバインディング・プロパティ(ラベル名の表示など)においてエラーが発生した場合、ページは正常に機能しますが、ラベルは表示されません。しかし、メソッドを実行するバインディングにおいてエラーが発生した場合は、内部サーブレット・エラーjavax.faces.el.MethodNotFoundException:
methodname
が表示されます。また、メソッド式にプロパティ名を間違って入力した場合は、サーブレット・エラーjavax.faces.el.PropertyNotFoundException:
propertyname
が表示されます。
このような一般的なエラーのリストを調べても、ランタイム・エラーの特定と解決ができない場合は、原因を特定するためにJDeveloper内部のデバッグを開始できます。ADFアプリケーションの場合は、問題を特定するためにADF宣言ブレークポイントの設定を開始します。ADF宣言デバッガを使用してADF宣言ブレークポイントを設定する方法は、31.7項「ADF宣言デバッガの使用」と31.8項「ADF宣言ブレークポイントの設定」で説明します。このプロセスでは、アプリケーションを実行する際に一時停止してデータを調査します。また、ADF宣言デバッガを使用してJavaコード・ブレークポイントを設定することもできます。31.9項「Javaコード・ブレークポイントの設定」を参照してください。
ADFコントローラがメタデータを取得すると、基本的な検証が実行されます。デフォルト・アクティビティがないタスク・フローなど、最も重大なエラーでは例外が解析されます。
adf-config.xml
のenable-grammar-validation
設定を使用すると、アプリケーションのデプロイ前にADFコントローラのメタデータの文法を検証できるようになります。enable-grammar-validation
をtrue
設定すると、ADFコントローラのメタデータはADFコントローラのXSDに対して検証されます。たとえば、ビュー・アクティビティIDのスラッシュ(/)など、ADFコントローラのメタデータの無効な文字は、例外としてフラグを立てられます。
デフォルトでは、enable-grammar-validation
はfalse
に設定されています。パフォーマンス上の理由から、アプリケーションの開発時またはトラブルシューティング時にのみ、true
に設定してください。
Webページまたはその対応するページ定義ファイル内でエラーが簡単に見つからない場合、JDeveloperのデバッグ・ツールを使用して、アプリケーションの障害の発生箇所を調べることができます。
Oracle Diagnostic Logging Configurationでは、エディタを使用してlogging.xml
構成ファイルを編集することでロギング・セッションを構成できます。ロギング構成は、いつでも(アプリケーションがJDeveloperで実行していても)設定できます。
JDeveloperの多くのファイルとは異なり、logging.xml
ファイルを直接開くことはできません。かわりに、これらの場所でメニュー・コマンドを使用して、Oracle Diagnostic Logging Configurationのエディタを開きます。
「アプリケーション・サーバー・ナビゲータ」で、アクティブ・サーバー・インスタンスを右クリックします。
アプリケーションをデバッグ・モードで起動した後、ログ・ウィンドウのデバッガ・プロセス・パネルに表示される「アクション」ドロップダウン・メニューをクリックします。
Oracle Diagnostic Logging Configurationのエディタを使用して、必要なロギング・レベルを設定し、表示されるメッセージのレベルと数を制御します。永続ロガーと一時ロガー両方のロギング・レベルを設定し、各ロガーのハンドラを宣言できます。
JDeveloperは、Oracle Fusion Middlewareのコンポーネントで使用されるOracle Diagnostic Logging (ODL)形式で診断ログ・ファイルを作成します。ログ・ファイルの名前とログ・ファイルの内容の形式は、Oracle標準に準拠します。デフォルトでは、診断メッセージはテキスト形式です。ODL形式の詳細は、『Oracle Fusion Middleware管理者ガイド』を参照してください。
エディタでは、デフォルトのODL形式のかわりに、Javaロガーを構成してJava診断メッセージを表示できます。
ログを作成した後で、Oracle Diagnostic Log Analyzerでログ・メッセージを表示してフィルタ処理できます。このツールを使用すると、様々なログ・レベルでのフィルタ設定、メッセージの時間枠の定義、およびメッセージ・テキストの検索を行うことができます。
続いてADF宣言デバッガを使用して、ブレークポイントを設定し、アプリケーションを調べることができます。詳細は、31.8項「ADF宣言ブレークポイントの設定」と、31.9項「Javaコード・ブレークポイントの設定」を参照してください。
Oracle Diagnostic Logging Configurationのエディタを使用して、logging.xml
構成ファイルに指定されるロギング・レベルを構成できます。このファイルを構成できるのは、アプリケーションを統合WebLogic Serverで実行する前と実行しているときです。サーバーを再起動しなくても変更内容が適用されます。
統合WebLogic Serverが実行しているとき、永続ロガーと一時ロガーの両方を定義できます。統合WebLogic Serverが実行していないときは、永続ロガーしか定義できません。一時ロガーはセッションの間のみ存続し、logging.xml
構成ファイルには入力されません。サーバーが実行していない場合は、次の実行時に更新が有効になるように、構成の変更内容を明示的にlogging.xml
ファイルに保存する必要があります。
Oracle Diagnostic Logging Configurationのエディタは、「アプリケーション・サーバー・ナビゲータ」または「ログ」ウィンドウ(図31-3)から利用できます。
ただし、サーバーが実行しているときに「ログ」ウィンドウのメニューからエディタにアクセスすると、一時ロガーを追加する機能がエディタに含まれます。
図31-4にサーバーが実行しているときの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
ロギング・レベルは、テスト実行の前には「アプリケーション・サーバー・ナビゲータ」で、アプリケーションの実行中には「ログ」ウィンドウの実行パネル・ツールバーで、またはデバッグ・セッション中には「ログ」ウィンドウのデバッグ・プロセス・ツールバーで構成できます。
ログ・レベルを構成するには:
メイン・メニューで、「表示」を選択し、「アプリケーション・サーバー・ナビゲータ」を選択します。
「アプリケーション・サーバー・ナビゲータ」で「アプリケーション・サーバー」を開き、「IntegratedWebLogicServer」を右クリックして、「"IntegratedWebLogicServer"に対するOracle Diagnostic Loggingの構成」を選択します。
または、アプリケーションの開始後に、「ログ」ウィンドウの実行中: IntegratedWebLogicServerパネルで、「アクション」→「Oracle Diagnostic Loggingの構成」を選択します。「実行中のログ」ウィンドウは、アプリケーションの実行中のみ表示されます。
または、アプリケーションのデバッグ中に、「ログ」ウィンドウのデバッグ・プロセス・パネルで、「アクション」→「Oracle Diagnostic Loggingの構成」を選択します。デバッグ・プロセス・パネルは、アプリケーションをデバッグ・モードで起動した後のみ、「ログ」ウィンドウに表示されます。
Oracle Diagnostics Logging Configurationのエディタで、表示するロガー・タイプについて「ODLログ・レベル」または「Javaログ・レベル」を選択します。
永続ロガーのみを表示する場合は、「一時ロガーの非表示」を選択します。
ロガーを追加するには次のようにします。
サーバーが実行している場合は、「追加」アイコンのドロップダウン・メニューをクリックして、「永続ロガーの追加」または「一時ロガーの追加」を選択します。サーバーが実行していない場合は、「追加」をクリックして永続ロガーを追加します。一時ロガーは追加できません。
ロガーの追加ダイアログでロガーの名前を入力します。
ロギング・レベルを選択します。
「OK」をクリックします。
新たに作成したロガーを含むすべてのロガーについて、ハンドラを指定できます。これには、使用可能なハンドラのリストから選択して、「ハンドラ宣言」セクションの「追加」アイコンをクリックします。
または、「親ハンドラの使用」を選択して、親のハンドラをロガーに割り当てます。デフォルトではロガーは親のハンドラを使用します。
注意: ログ・ハンドラ定義を宣言して追加するには、「ソース」タブをクリックして、定義をXMLエディタに入力します。 |
Oracle ADFでは、デバッグ・セッションの実行時にロギング機能を提供するために、JavaロギングAPI (java.util.logging.Logger
)を使用します。Javaロギングは、Javaプラットフォーム(http://docs.oracle.com/javase/6/docs/api/java/util/logging/package-summary.html
)から入手できる標準APIです。
ADFイベント・メッセージの完全な階層ツリーをロギングするには、1つのパッケージに対してCONFIG
よりも制限が厳しくないJavaログ・レベル(またはNotification:16
よりも制限が厳しくないODLログ・レベル)を構成する必要があります。
oracle.adfdiagnostics
では、ADFモデル・データ・バインディング・レイヤー、ADFコントローラ・ソース・コード、ADFビジネス・コンポーネント、およびOracle ADF内部クラスのソース・コードで生成されるイベントがロギングされます。
図31-5に、最も詳細なOracle ADFログ・メッセージを有効にするように構成された特別なロガーを表示します。oracle.adfdiagnostics
パッケージはCONFIGに設定され、それよりも制限の厳しい(高い)ログ・レベルには設定されません(ここでは、SEVERE、WARNINGおよびINFOはCONFIGよりも高いJavaログ・レベルで、FINE、FINERおよびFINESTはCONFIGよりも低いレベルです)。oracle.adfdiagnostics
パッケージのロガーを有効化すると、ロガーはADFイベントの完全な階層を記録します。
後方互換性を保つため、Javaシステム・プロパティjbo.debugoutput
による値console
またはADFLogger
の設定がサポートされています(この設定を行うと、logging.xml
ファイルを介して標準の方法で制御できる標準ロガー実装に診断がルーティングされます)。JDeveloper内部でのアプリケーションの実行中、このシステム・プロパティを設定する最も簡単な方法は、プロジェクト・プロパティを編集し、「実行/デバッグ/プロファイル」ページで実行構成を選択して、「編集」をクリックすることです。次に、文字列-Djbo.debugoutput=console
を「Javaオプション」フィールドに追加します。
ADFモデルのデバッグ構成を作成するには:
メイン・メニューで、「表示」を選択し、「アプリケーション・サーバー・ナビゲータ」を選択します。
「アプリケーション・サーバー・ナビゲータ」で「アプリケーション・サーバー」を開き、IntegratedWebLogicServerを右クリックして、「Oracle Diagnostic Loggingの構成」を選択します。
または、アプリケーションの開始後に、「ログ」ウィンドウの実行中: IntegratedWebLogicServerパネルで、「アクション」→「Oracle Diagnostic Loggingの構成」を選択します。「実行中のログ」ウィンドウは、アプリケーションの実行中のみ表示されます。
または、アプリケーションのデバッグ中に、「ログ」ウィンドウのデバッグ・プロセス・パネルで、「アクション」→「Oracle Diagnostic Loggingの構成」を選択します。デバッグ・プロセス・パネルは、アプリケーションをデバッグ・モードで起動した後のみ、「ログ」ウィンドウに表示されます。
Oracle Diagnostics Logging Configurationのエディタで、表示するロガー・タイプについて「ODLログ・レベル」または「Javaログ・レベル」を選択します。
「oracle」ノードを開き、CONFIG
よりも制限が厳しくないログ・レベル(Javaログの場合)、またはNotification
よりも制限が厳しくないログ・レベル(ODLログの場合)を、次のパッケージに対して選択します。
oracle.adfdiagnosticsでは、ADFモデル・データバインディング・レイヤー、ADFコントローラ・ソース・コード、ADFビジネス・コンポーネントおよびOracle ADF内部クラスのソース・コードで生成されるイベントがロギングされます。
このパッケージのロガーを有効化すると、ロガーはADFイベントの完全な階層を記録します。
その他の必要なOracle ADFロガーに対しては、Javaログ・レベル「FINEST」を選択します。
ADFビューJavascriptロギング構成を作成するには:
アプリケーション・ナビゲータで、アプリケーションまたはプロジェクトのweb.xmlファイルをダブルクリックします。
ソース・エディタで、次の要素をファイルに追加します。
<context-param
>
<param-name>
oracle.adf.view.rich.LOGGER_LEVEL
</param-name>
<param-value>
FINE
</param-value>
</context-param>
Oracle ADF以外のロガーの場合、実際のデバッガを使用する前に、FINE、FINERまたはFINESTにJavaログ・レベルを設定した状態でアプリケーションを実行することで、フレームワークの診断ロギングが可能になります。デバッグ診断メッセージは、問題発生時の処理を確認する際に役立ちます。デバッグ診断メッセージを有効にするには、Oracle Diagnostics Logging Configurationのエディタを使用して、Javaログ・レベルを最も詳細に設定して必要なロガーを構成します。サポートされているロガーの診断ロギングが構成済の場合、JDeveloperは、デバッグ診断メッセージをJDeveloperの「ログ」ウィンドウに表示します。
現時点で、Oracle ADFは、Javaログ・レベルをFINE、FINERまたはFINESTに設定した状態のロギングはサポートしていません。Oracle ADFロガーの詳細は、31.5.2項「Oracle ADFデバッグ構成の作成方法」を参照してください。
Oracle Diagnostic Log Analyzerを使用してログ・ファイルのログ・エントリを表示できます。ログ・アナライザでは、ログ・レベル、エントリ・タイプ、ログの時刻、エントリの内容によってエントリをフィルタ処理できます(1つ以上の検索基準を使用)。見やすくするために、メッセージの並替えや、列の表示と非表示の切替えを行うこともできます。
図31-6に、Javaログ・レベルの表示に設定されているOracle Diagnostic Log Analyzerを示します。
他のテスト実行で作成されたログ・ファイルに対してもログ・アナライザを使用できます。たとえば、他のアプリケーションについて別の開発者から送信されたログを分析できます。
ロギング・レベルは、テスト実行の前にアプリケーション・サーバー・ナビゲータで、またはデバッグ・セッション中に「ログ」ウィンドウのメニューで構成できます。指定するレベルによって、ログ・メッセージのタイプと量が決まります。
ADFイベントの場合、ODLログについては「通知」
レベルで、Javaログに関しては「情報」
レベルで、すべてのメッセージが生成されます。「インシデント・エラー」
/「重度」
レベルや「エラー」
/「警告」
レベルでは、生成されるADFメッセージの数は少なくなります。
表示するメッセージのログ・レベルを選択した後で、「ログ・メッセージ別」ページの「検索」パネルを使用して、ログ・ファイルのメッセージをフィルタ処理して表示します。
ログ・アナライザを開始するには、テスト実行の前は「ツール」メニューを使用し、デバッグ・セッション中は「ログ」ウィンドウのツールバーを使用します。
始める前に:
ロギングの知識があると役立ちます。詳細は、31.5項「ADFロガーの使用」を参照してください。
次のタスクを完了します。
ロギング・レベルを設定します。31.5.1項「ADFロギング・レベルを設定する方法」を参照してください。
ロギングを有効にします。31.5.3項「Oracle ADF以外のロガーの診断ロギングを有効化する方法」を参照してください。
テスト実行または別のソースからログ・ファイルを作成します。
ログ・アナライザを開始するには:
メイン・メニューで、「ツール」→「Oracle Diagnostic Log Analyzer」を選択します。
あるいは、「ログ」ウィンドウの「アクション」メニューで、「ログの分析」を選択して、「コンソールのカレント」または「選択項目を開く」(サーバー・ログ・ディレクトリのログ・ファイルを参照する)のいずれかを選択します。
Oracle Diagnostic Log Analyzerのエディタで「ログ・メッセージ別」をクリックします。
「ログ・メッセージ別」ページで、「ログ」フィールドにログ・ファイルのパスと名前を入力するか、「ログ・ファイルの参照」をクリックしてログ・ファイルに移動します。
ヒント: 「ログ・ファイルの選択」ダイアログを使用して、JDeveloperで生成されたログ・ファイルを含むディレクトリにナビゲートできます。「ログ」テキスト・フィールドの横の「ログ・ファイルの参照」アイコンをクリックし、スクロール・リストの「サーバー・ログ」アイコンをクリックします。ログ・ファイルのリストから、一度に分析する複数のログ・ファイルを選択できます。 |
ドロップダウン・リストで「ODLログ・レベル」または「Javaログ・レベル」を選択します。
表示するログ・エントリのタイプごとに対応するチェックボックスを選択します。少なくとも1つのタイプを選択する必要があります。
選択できるODLログ・レベルのタイプは次のとおりです。
INCIDENT ERROR
ERROR
WARNING
NOTIFICATION: ADFイベント・メッセージに対応
TRACE
UNKNOWN
選択できるJavaログ・レベルのタイプは次のとおりです。
SEVERE
WARNING
INFO
CONFIG: ADFイベント・メッセージに対応
FINE
FINER
FINEST
UNKNOWN
表示するエントリの期間を指定します。一番新しい期間または範囲を選択できます。
結果をフィルタ処理するには、「検索」パネルを使用してログでテキスト・パターンを問い合せます。検索基準を追加するには、「追加」をクリックしてください。サポートされる検索基準は次のとおりです。
エンタープライズ名: エンタープライズ名ごとにログをフィルタ処理します。
詳細: メソッドが起動されたスタックの文からテキストをフィルタ処理します。
エンタープライズID: エンタープライズのIDごとにログをフィルタ処理します。
メッセージ: ロギングされたメッセージのテキストをフィルタ処理します。
ADFメッセージ・データ: ADFイベントの実行中にロギングされた、ADFライフサイクル・フェーズ名、ビュー・オブジェクト名、ビュー・オブジェクト問合せ文、データ・コントロール名、バインディング・コンテナ名およびイテレータ・バインディング名に関連するデータのログをフィルタ処理します。
ソース・メソッド: メッセージがロギングされるメソッドごとにログをフィルタ処理します。たとえば、メソッドexecute
についてフィルタ処理すると、ビュー・オブジェクトの問合せ実行またはADFライフサイクル・フェーズ実行でロギングされたすべてのメッセージを表示できます。
アプリケーション: メッセージがロギングされるアプリケーション名ごとにログをフィルタ処理します。これが役立つのは、アプリケーションがコンポジット・アプリケーション内で実行しているときに、特定のアプリケーションのメッセージを表示する場合です。
ソース・クラス: メッセージがロギングされるメソッドの完全修飾クラス名ごとにログをフィルタ処理します。表示されるメッセージ数を増やすには、パッケージ名の一部を入力します。たとえば、パッケージ名の一部oracle.adf
や完全なパッケージ名oracle.jbo
を入力すると、Oracle ADFに関連するすべてのクラスについてフィルタ処理できます。
モジュール: メッセージがロギングされるクラスの完全修飾パッケージ名ごとにログをフィルタ処理します。これはソース・クラスと同じパッケージです。
メッセージID: ロギングされたメッセージのIDごとにログをフィルタ処理します。IDが同じメッセージが多数あります。たとえば、メッセージID ADFC-52008
には、4つのINFO
メッセージと1つのWarning
メッセージがあります。ログ・アナライザの「結果」パネルで「IDでグループ化」を選択すると、共通のIDでメッセージをグループ化できます。
フィルタを開始して、ログ・メッセージを表示するには、「検索」をクリックします。
メッセージID順に結果を並べるには、「IDでグループ化」チェックボックスを選択します。
期間別またはリクエスト別にメッセージをグループ化するには、「関連付け」列で「時間による関連付け」または「リクエストによる関連付け」を選択します。
関連付けオプションを選択すると、ログ・アナライザによって「結果メッセージ」パネル内のメッセージが、選択した基準(時間、HTTPリクエストまたはエンタープライズ名)によってグループ化されます。
「関連付け」列で、メッセージがその一部となっているADFリクエスト(存在する場合)を開くには、「ADFリクエストによる関連付け」を選択します。
「ADFリクエストによる関連付け」を選択すると、ログ・アナライザの「ADFリクエスト別」ページには関連するリクエストが表示されます。
「結果」セクションで列の表示と非表示を切り替えるには、列ヘッダーの右側のドロップダウン・リストをクリックし、表示される列のリストを選択して、列の表示状態を変更します。
OracleではOracle ADFソース・コードを使用して、ADFライフサイクル・フェーズの実行中にログ・メッセージを生成するため、ログ・アナライザを使用すると、実行中のアプリケーションでのアクティブな(または以前の)ページ・リクエストの詳細を調査できます。特に、ログ・アナライザの「ADFリクエスト別」ページでは、実行順に整理された階層リストでADFイベント・メッセージを表示できます。また、各イベントのグラフィック表示も提供されます。アプリケーションを実行して、ADFロギングが構成されたログ・アナライザを開始したとき、実行時間が通常よりも長い場合は、このページを使用すると、アプリケーションのコンポーネントがパフォーマンス・ボトルネックに関与しているかどうかをすぐに判断できます。
注意: 「ログ・メッセージ別」ページとは異なり、ログ・アナライザの「ADFリクエスト別」ページにはADFイベント・メッセージが階層で表示されます。この2つのページの違いは、「ADFリクエスト別」ページでは、ページまたはリージョンが送信されたときに作成されたADFページ・リクエストのみに焦点を当てていることです。ADFページ・ライフサイクルの詳細は、第21章「Fusionページ・ライフサイクル」を参照してください。 |
「ADFリクエスト別」ページに検索基準を入力すると、ログ・ファイルの特定のリクエストを1つ以上表示できます。次のいずれかの検索基準を組み合せて、ログ・ファイルをフィルタ処理できます。
表示するリクエストの数
ログに記録されたリクエストのタイムスタンプ
ログインしているユーザー名、エンタープライズ名、リクエスト・ヘッダー(ページまたはリージョン名に基づく検索の指定用)、メッセージ、ソース・クラス、モジュール、サーバー、詳細、エンタープライズID、ADFメッセージ・データ、コンポジット・アプリケーション内のアプリケーション名、ソース・メソッド、メッセージIDまたはECID (すべてのトップレベル・タスクに関連付けられたグローバルに一意のID。そのトップレベル・タスクによって起動されるサブタスクは、同じECIDを共有する実行コンテキストによって機能します)。
リクエストの完了後、ログ・アナライザでは単一の表にADFリクエストのサマリーが表示されます。図31-7に、ADF Webリクエストを一覧したサマリー表を示します。
サマリー表に表示されたADFリクエストごとに、リクエスト・リンクをクリックして、リクエスト・イベント階層に関する詳細を表示できます。図31-8に示す「ADFリクエスト」パネルには、JSFライフサイクルのビューのリストア・フェーズおよびレスポンス・レンダリング・フェーズが表示されています(期間はミリ秒単位)。リクエスト・イベント階層のルート・ノード(ADF Webリクエスト)の棒グラフは合計実行時間を示します。
注意: リクエスト時間の割合の棒グラフの2色(黒とグレー)は、リクエストの実行時間のうち、ADFソース・コードのADFイベント・メッセージの生成に使用された部分(黒で表示)と、使用されなかったADFソース・コードの部分(ADFイベント・メッセージを生成できない、グレーで表示)に基づく時間を示します。また、リクエストの個々のフェーズを合計しても合計のリクエスト時間と等しくならないことに注意してください。これは、ライフサイクルの有効なフェーズのみがログ・アナライザに表示されるためです。 |
リクエストをさらに詳しく調べるには、ADFライフサイクル・ノードのツリーを展開して、アプリケーションのどこでパフォーマンス・ボトルネックが発生したかを調査します。リクエスト・メッセージ・パネルでドリルダウンしてADFイベント・ノードを選択すると、各ADFイベントに関連付けられたコンポーネントの詳細が表示されます。たとえば、JSFフェーズRENDER_RESPONSEノードを開くと、そのフェーズで生成されたすべてのADFイベントが表示されます。図31-9に、開かれたJSFフェーズRENDER_RESPONSEノードを示します。リクエスト期間を表す長い棒グラフが表示されたLOVリストの取得ノードと「問合せの実行」ノードがあります。「問合せの実行」ノードが選択されており、ビュー・オブジェクト名や問合せ文を含む詳細なADFデータが「ADFメッセージ・データ詳細」パネルの下部に表示されます。棒グラフが示す実行時間が長いADFイベントをドリルダウンして選択することで、たとえば、データ・モデル・プロジェクト内のビュー・オブジェクト名を取得できます。パフォーマンスを改善するためにはこれをチューニングする必要があります。
始める前に:
ロギングの知識があると役立ちます。詳細は、31.5項「ADFロガーの使用」を参照してください。
次のタスクを完了します。
ロギング・レベルを設定します。31.5.1項「ADFロギング・レベルを設定する方法」を参照してください。
ADFイベント・メッセージの完全な階層ツリーをロギングするには、1つのパッケージに対してNOTIFICATION:16
よりも制限が厳しくないODLログ・レベル、またはCONFIG
よりも制限が厳しくないJavaログ・レベルを構成する必要があります。
oracle.adfdiagnostics
では、ADFモデル・データ・バインディング・レイヤー、ADFコントローラ・ソース・コード、ADFビジネス・コンポーネント、およびOracle ADF内部クラスのソース・コードで生成されるイベントがロギングされます。
ヒント: Oracle Diagnostics Logging Configurationの概要エディタによって表示されるルート・ログ出力のデフォルト・ログ・レベルでは、ADFイベント・メッセージのロギングが保証されます。 |
ロギングを有効にします。31.5.3項「Oracle ADF以外のロガーの診断ロギングを有効化する方法」を参照してください。
テスト実行または別のソースからログ・ファイルを作成します。
ログ・アナライザでADFリクエスト・メッセージを表示するには:
メイン・メニューで、「ツール」→「Oracle Diagnostic Log Analyzer」を選択します。
あるいは、「ログ」ウィンドウの「アクション」メニューで、「ログの分析」を選択して、「コンソールのカレント」または「選択項目を開く」(サーバー・ログ・ディレクトリのログ・ファイルを参照する)のいずれかを選択します。
Oracle Diagnostic Log Analyzerのエディタで「ADFリクエスト別」タブをクリックします。
「ADFリクエスト別」ページで、表示する最新リクエストの数を指定します。
デフォルトでは一番新しいリクエスト1つしか表示されません。
表示するエントリの期間を指定します。一番新しい期間または範囲を選択できます。
表示するリクエストをフィルタ処理するには、検索フィールドを使用してログでテキスト・パターンを問い合せます。検索フィールドを追加するには、「行の追加」アイコンをクリックしてください。
フィルタを開始して、一致するADFリクエストを表示するには、「検索」をクリックします。
「ADFリクエスト」パネルで、目的のリクエスト・リンクをクリックしてイベント階層を表示し、時間(ミリ秒)の棒グラフが示す実行時間が長いADFイベントを探します。
必要なADFイベントを選択し、ADFイベントに関連するADFコンポーネントの詳細を「ADFメッセージ・データ詳細」パネルで確認します。
アプリケーションのコンポーネントを調べて、最適化が可能かどうかを判別します。
Oracleでは、ADFライフサイクル・フェーズの実行中、およびADFモデルのデータバインディング・レイヤー、ADFコントローラ・ソースおよびADFビジネス・コンポーネント・ソースで実行される操作中に、Oracle ADFソース・コードを使用してログ・メッセージが生成されます。ログ・アナライザではこれらのメッセージをまとめてADFイベントと呼びます。ログ・アナライザを使用して、実行中のアプリケーションのADFイベントを調査することができます。ログ・アナライザの「ログ・メッセージ別」ページでは、ADFイベント・メッセージが実行時刻で整理されたフラット・リストで表示されます。「ADFリクエスト別」ページに切り替えて、実行順の階層リストでADFイベントを表示することもできます。
ADFイベント・メッセージには、アプリケーションのどのADFコンポーネントでイベントが生成されたかを特定するための情報が含まれます。たとえば、ADFイベント・メッセージのログを検索して、ページでのデータ表示、問合せの実行またはアクションの開始に関連するコンポーネントを識別できます。
イテレータ・バインディングの実行: ページでのデータ表示を管理するために実行されたイテレータの名前を表示します。これは、問合せの更新が遅い場合の診断に役立ちます。
問合せの実行: 実行された問合せに関連するビュー・オブジェクトの名前を表示します。これが役立つのは、問合せ文、バインド・パラメータおよびビュー・オブジェクト名を表示する場合です。
メソッド・バインディングの実行: バインド・データ・ソースに対して実行されたJavaメソッドの名前を表示します。これは、メソッドの実行が遅い場合の診断に役立ちます。
ログ・アナライザにADFイベント・メッセージを表示した後で、ロギングされた他のメッセージとの関係に基づいてイベントを整理することができます。次のように表示する項目に応じて「関連付け」列でオプションを選択できます。
ADFイベントまでのすべてのメッセージ(「時間による関連付け」)
ADFイベントと同じWebリクエストのすべてのメッセージ(「リクエストによる関連付け」)
同じWebリクエストのADFイベント・メッセージのみ(「ADFリクエストによる関連付け」)
ヒント: 「ADFリクエストによる関連付け」ビューには、ADFイベント・メッセージの詳細なADFデータが表示されます。たとえば、このビューは、「問合せの実行」 メッセージに関連する問合せ文を表示する場合に使用します。 |
図31-10に、ADFイベント・メッセージ「アプリケーション・モジュールの作成」
に関するログ・アナライザの検索結果を示します。「結果」パネルに検索基準を満たすすべてのメッセージが表示され、下部のパネルにはコンポーネントの詳細情報が表示されます。
「結果」パネルの「関連付け」列で「ADFリクエストによる関連付け」を選択すると、ログ・アナライザは「ADFリクエスト別」ページの表示に切り替わり、ADFイベント・メッセージが実行の依存関係を表す階層で表示されます。ログ・アナライザの「ADFリクエスト別」ページは、パフォーマンスの問題の診断に適しています。「ADFリクエスト別」ページの詳細は、31.5.4.2項「ADFリクエストを分析するためのログ・アナライザの使用」を参照してください。「ログ・メッセージ別」ページでは、経過時間の情報は「結果」パネルで表示と非表示を切り替えることができます。
始める前に:
ロギングの知識があると役立ちます。詳細は、31.5項「ADFロガーの使用」を参照してください。
次のタスクを完了します。
ロギング・レベルを設定します。31.5.1項「ADFロギング・レベルを設定する方法」を参照してください。
ADFイベント・メッセージをロギングするには、次のパッケージについてNOTIFICATION:16
よりも制限の厳しいODLログ・レベルまたはCONFIG
よりも制限の厳しいJavaログ・レベルを構成しないでください。
oracle.adfdiagnostics
では、ADFモデル・データ・バインディング・レイヤー、ADFコントローラ・ソース・コード、ADFビジネス・コンポーネント、およびOracle ADF内部クラスのソース・コードで生成されるイベントがロギングされます。
ヒント: Oracle Diagnostics Logging Configurationの概要エディタによって表示されるルート・ログ出力のデフォルト・ログ・レベルでは、ADFイベント・メッセージのロギングは保証されます。 |
ロギングを有効にします。31.5.3項「Oracle ADF以外のロガーの診断ロギングを有効化する方法」を参照してください。
テスト実行または別のソースからログ・ファイルを作成します。
ADFイベントに関連付けられたメッセージを表示するには:
メイン・メニューで、「ツール」→「Oracle Diagnostic Log Analyzer」を選択します。
あるいは、「ログ」ウィンドウの「アクション」メニューで、「ログの分析」を選択して、「コンソールのカレント」または「選択項目を開く」(サーバー・ログ・ディレクトリのログ・ファイルを参照する)のいずれかを選択します。
Oracle Diagnostic Log Analyzerのエディタで「ログ・メッセージ別」タブをクリックします。
「ログ・メッセージ別」ページで、必要なロガー・タイプ、ログ・レベルおよびログ時間を選択します。
ADFイベント・メッセージのログを検索するには、最低でもログ・レベル「通知」(ODLログ・レベル)または「情報」(Javaログ・レベル)を選択する必要があります。
検索のドロップダウンで、検索基準として「メッセージ」と「次を含む」を選択し、次のいずれかのADFイベント・メッセージを入力して、「検索」をクリックします。
Executing iterator binding
- これは、問合せの更新が遅い場合の診断に役立ちます。
Executing method binding
- これは、メソッドの実行が遅い場合の診断に役立ちます。
Execute query
- これが役立つのは、問合せ文、バインド・パラメータおよびビュー・オブジェクト名を表示する場合です。
さらに次に示すADFイベント・メッセージについてログをフィルタ処理することもできます。
バインディング・コンテナのリフレッシュ中です
データソースへのイテレータ・バインディングのアタッチ
階層ノードへの行の変換
推定される行数
LOVリストの取得
LOVリストのフィルタ処理
エンティティの検証
エンティティの親のロック
エンティティのロック
エンティティの変更のポスティング前
エンティティの変更のポスティング
バッチ・ポスティング
エンティティの変更のコミット前
エンティティの変更のコミット後
エンティティの変更のロールバック前
エンティティの変更のロールバック後
イベントを通知するエンティティ
エンティティ通知名
エンティティの削除
監査列の更新
有効日付変更の適用
エンティティDML
エンティティでのすべての属性の読取り
アプリケーション・モジュールの作成
ネスト・アプリケーション・モジュールの作成
アプリケーション・モジュールのパッシブ化
アプリケーション・モジュールのアクティブ化
データベース接続の確立
トランザクションのコミット
トランザクションのロールバック
トランザクションの検証
値の検証
ADFイベントの情報について「結果」パネルのデータ部分で確認します。
ADFイベントを階層表示するには、必要なADFイベント・メッセージが「結果」パネルで選択された状態で、「関連付け」列で、必要なイベント行のアイコンをクリックして、ドロップダウン・メニューから「ADFリクエストによる関連付け」を選択します。
Oracle Diagnostic Log Analyzerのエディタに、選択したADFイベントの「ADFリクエスト別」ページが表示されます。ADFイベントのその他のADFデータについて「結果」パネルの下部で確認します。たとえば、「結果」パネルの「ADFデータ」領域で「問合せの実行」
メッセージに関連する問合せ文を確認できます。
デフォルトでは、すべてのOracleロガーのレベルがWARNING
に設定されます。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 (Oracle ADFに対してサポートされる最高のログ・レベル)
FINE
FINER
FINEST (最も制限の少ない最低のログ・レベル)
デフォルトでは、ロガーは階層的なので、別のロガーの子であるロガーは、その親のログ・レベルを継承するため、予想外に大きなログ出力を生成することがあります。このため、Oracle Diagnostic Logging Configurationのエディタでロガーを有効化する場合、親ロガーのログ・レベルと子ロガーのログ・レベルを別々に設定することをお薦めします。これは、メモリー・リークなどの条件を診断するのに便利な設定FINE
、FINER
、FINEST
を使用する場合、詳細なログ・メッセージが有用なので、特に重要です。
たとえば、メモリー・リークをデバッグする場合、oracle.adf.share.ADFContext
ロガーをFINEST
に設定することが考えられます。この設定は、子oracle.adf.share.ADFContext.allocationLogger
ロガーを自動的に起動させるため、ログ出力ファイルに、割当てバッファ超過条件が生じることがあります。このため、メモリー・リークを修正するために必要なメッセージを有効にする解決策は、親レベルをFINEST
にする一方で、子ロガーをINFO
に下げることです。
<logger name="oracle.adf.share.ADFContext" level="FINE"/> <logger name="oracle.adf.share.ADFContext.allocationLogger" level="INFO"/>
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管理者ガイド』を参照してください。
ビジネス・コンポーネント・ブラウザ(またはBrowser)は、ADFビジネス・コンポーネント・データ・モデル・プロジェクトのビジネス・オブジェクトを操作するときにJDeveloperから起動するJavaアプリケーションです。ビジネス・コンポーネント・ブラウザはJDeveloper外部で実行し、データ・モデル・プロジェクトのテストと調査のための総合的なUIを提供します。このBrowserを実行すると、ADFアプリケーション・モジュールのビュー・インスタンスの調査、ビュー・リンクの階層構造のナビゲート、アプリケーション・モジュールのクライアント・インタフェース、ビュー・オブジェクト・インタフェースおよびビュー行インタフェースからのカスタム・メソッドの実行を行うことができます。BrowserをADF宣言デバッガと一緒に使用して、これらのインタフェースのカスタム・メソッドにブレークポイントを設定することもできます。
さらに、Browserではユーザー・インタフェースの多くの機能がシミュレートされます。アプリケーション・モジュールの構成ファイル(bc4j.xcfg
)で指定されたデータベースのビジネス・オブジェクトの内容を表示、挿入および更新することができます。特に、ビュー・インスタンスのマスター・ディテール関係、ビュー・インスタンスとその属性、ビュー・インスタンスの問合せ結果セット、ビュー基準を使用する検索フォーム、属性値に対して定義される検証規則、LOV (値リスト)定義属性のドロップダウン・リストなど、データ・モデル設計の様々な要素を確認できます。Browserを使用してビジネス・オブジェクトをテストする方法の詳細は、6.3項「ビジネス・コンポーネント・ブラウザを使用したビュー・オブジェクト・インスタンスのテスト」を参照してください。ビジネス・コンポーネント・ブラウザを使用するテストの詳細は、このマニュアルの「ビジネス・サービスの構築」に含まれる章の各ビジネス・オブジェクトに関する項でも説明しています。
多くの場合、クライアント・インタフェース実装クラスのサービス・メソッドでカスタム・コードを分析およびデバッグできると便利です。ビジネス・コンポーネント・ブラウザを使用すると、ユーザー・インタフェースでアプリケーションを実行せずに、これらを行うことができます。デバッグ・プロセスを補完するテスト・ツールとしてビジネス・コンポーネント・ブラウザを使用できます。
注意: デバッグ・モードで実行するビジネス・コンポーネント・ブラウザはJDeveloper IDE Javaオプションを継承しません。特定の実行/デバッグJavaオプションがテスターで使用されるようにするには、データ・モデル・プロジェクトに対する実行構成を編集する必要があります。デフォルトの実行構成は、「プロジェクト・プロパティ」ダイアログの「実行/デバッグ」ページで変更できます。 |
始める前に:
次のタスクを完了する必要があります。
JDeveloperオンライン・ヘルプのJavaアプリケーションの開発に関する項のプロジェクトを実行用に構成する方法についての説明に従って、使用したい実行構成に対する適切なJavaオプションを設定します。
クライアント・インタフェースのカスタム・メソッドにブレークポイントを設定します。31.8項「ADF宣言ブレークポイントの設定」を参照してください。
ビジネス・コンポーネント・ブラウザを起動してデバッグ・モードにするには:
アプリケーション・ナビゲータで、アプリケーション・モジュールを右クリックして「デバッグ」を選択します。
ビジネス・コンポーネント・ブラウザで、必要なクライアント・インタフェースのメソッド・テスト・パネルを開きます。9.9.4項「ビジネス・コンポーネント・ブラウザを使用したカスタム・サービス・メソッドのテスト方法」を参照してください。
メソッド・パネルでドロップダウン・リストから必要なメソッドを選択し、メソッドのパラメータとして渡す値を入力して、「実行」をクリックします。
JDeveloperに戻り、ADF宣言デバッガを使用してコードをステップ実行します。メソッドの実行が完了すると、メソッド・パネルに戻り値(ある場合)とテスト結果が表示されます。ビジネス・コンポーネント・ブラウザに表示される結果は、メソッドが正常に実行されたかどうかを示します。
アプリケーション・ナビゲータでアプリケーション・モジュールを右クリックし、「実行」または「デバッグ」を選択すると、JDeveloperがアプリケーション・モジュールに定義されるデフォルト構成を使用してビジネス・コンポーネント・ブラウザを実行します。ビジネス・コンポーネントを別のアプリケーション・モジュール構成(異なるデータソースおよび独自のランタイム・パラメータのセットを指定できる)でテストする場合は、bc4j.xcfg
ファイルの概要エディタで行うことができます。このファイルはアプリケーション・ナビゲータには表示されず、アプリケーション・モジュールの概要エディタの「構成」ページからのみアクセスできます。
特定の構成でビジネス・コンポーネント・ブラウザを実行するには:
アプリケーション・ナビゲータでテストするアプリケーション・モジュールをダブルクリックします。
概要エディタで「構成」ナビゲーション・タブをクリックして、「bc4j.xcfg」構成ファイル・リンクをクリックします。
概要エディタで、「構成」リストから構成を選択します。
選択した構成を右クリックして、「実行」または「デバッグ」を選択し、ビジネス・コンポーネント・ブラウザを起動します。
ビジネス・コンポーネント・ブラウザは他のあらゆるJavaプログラムと同様に動作します。具体的には、JDeveloper IDEに対して指定されたJavaオプションは継承しません。テスターはデータ・モデル・プロジェクトに対して指定された実行構成およびその構成内に設定されたJavaオプションをかわりに使用します。
JDeveloperではビジネス・コンポーネント・ブラウザを2つのモード(デバッグ・モードまたは非デバッグ・モード)で実行できます。Browserをデバッグ・モードで実行すると、ADF宣言デバッガと連動して、クライアント・インタフェースのカスタム・コードに挿入したブレークポイントを使用してカスタム・メソッドを実行します。たとえば、クライアント・インタフェースでメソッドにブレークポイントを設定し、そのメソッドをBrowserでデバッグ・モードで実行すると、コードをステップ実行できます。その後、Browserによって成功または失敗の結果が返されます。非デバッグ・モードでは、Browserは、メソッドが正常に実行されたかどうかを示す結果をすぐに返します。また、Browserは、デバッグ・モードでも非デバッグ・モードでも、アプリケーション・モジュールに対して実行時に作成されたシステム・カタログの実行時アーティファクトを表示できます。
ビジネス・コンポーネント・ブラウザを実行するが、ADF宣言デバッガを使用する必要がない場合は、実行時アーティファクトの情報をアプリケーション・モジュールのシステム・カタログから表示できます。システム・カタログによってビジネス・オブジェクト・メタデータとその他の情報が表示されます。これはビジネス・オブジェクトを比較する必要があるときに役立ちます。
デバッグせずにビジネス・コンポーネント・ブラウザを起動するには:
アプリケーション・ナビゲータで、アプリケーション・モジュールを右クリックして、「実行」を選択します。
ビジネス・コンポーネント・ブラウザで「作成」→「SysCat AMの作成」を選択します。
データ・モデル・ツリーで「SysCatAMDefs」を展開し、「ViewDefs」を右クリックして、「表の表示」を選択します。
データ・ビューアで縦方向にスクロールし、必要なビュー・インスタンスを「SCName」(システム・カタログ名)フィールドで確認します。
Browserでシステム・カタログを公開すると、デバッガを実行せずに、ランタイム・オブジェクト固有のメタデータおよびその他の情報にアクセスできます。たとえば、ビュー・インスタンスにカスタムJava実装クラスがあるかどうかをチェックできます。
ビジネス・コンポーネント・ブラウザは相互運用性が非常に高いツールです。Browserを実行しているときに、データ・モデル・プロジェクトの変更が必要であるとわかると、JDeveloperに戻って必要なアプリケーション・モジュール・インスタンスを編集し、変更内容を表示するようにビジネス・コンポーネント・ブラウザ・データ・モデルをリフレッシュできます。このように、変更内容を確認するためにBrowserを再実行する必要はありません。
ビジネス・コンポーネント・ブラウザにアプリケーション・メタデータを再ロードするには:
データ・モデル・プロジェクトでビジネス・オブジェクトを編集し、変更内容をJDeveloperに保存します。
データ・モデル・プロジェクトを再コンパイルします。
たとえば、アプリケーション・ナビゲータでデータ・モデル・プロジェクトを右クリックし、「メイク」を選択して再コンパイル・ステップを完了します。
メタデータに対して行う変更とプロジェクトのコンパイルに関連性はありませんが、メタデータをクラス・パスにコピーし、ビジネス・コンポーネント・ブラウザによってリロードできるようにするには、コンパイル手順を実行する必要があります。
ビジネス・コンポーネント・ブラウザのツールバーでアプリケーション・メタデータの再ロードをクリックします。
または、ビジネス・コンポーネント・ブラウザの「ファイル」メニューから、アプリケーションのリロードを選択できます。
ADF宣言デバッガで提供される宣言ブレークポイントは、標準Javaブレークポイントと同様に、ADFオブジェクト・レベル(タスク・フロー、ページ定義実行可能ファイル、メソッドとアクションのバインディング、ADFライフサイクル・フェーズなど)に設定できます。ADF宣言ブレークポイントにより、ADFアプリケーションをデバッグするために概要レベルのオブジェクト・ビューが提供されます。たとえば、図31-11のようにタスク・フロー・アクティビティの前にブレークすると、タスク・フローに渡されるパラメータを確認できます。Javaブレークポイントだけを使用して同じ機能を実行するには、ブレークポイントを設定するクラスまたはメソッドを認識する必要があります。ADFアプリケーションではADF宣言ブレークポイントを使用することをお薦めします。
ADF宣言デバッガも、標準のJavaコード・ブレークポイントをサポートします。どのADFアプリケーションにもJavaコード・ブレークポイントを設定できます。ADF宣言ブレークポイントが必要な場所でブレークしないとき、場合によってはJavaコード・ブレークポイントを使用できます。
ADF宣言デバッガはJavaデバッガ上に構築されているので、機能と動作はJavaデバッガと同様です。ただ、Javaのクラスやメソッドを知らなくても、ビジュアル・エディタでADF宣言ブレークポイントを設定することができます。
ADF宣言デバッガでは、変数やスタック・データの調査など標準デバッグ機能が提供されます。アプリケーションが任意のブレークポイント(ADF宣言ブレークポイントまたはJavaコード・ブレークポイント)で一時停止するときに、様々なウィンドウを使用してアプリケーションのステータスを調べることができます。「ブレークポイント」ウィンドウで、ブレークが発生した箇所を確認することができます。「スタック」ウィンドウを使用して、現在のスレッドのコール・スタックを確認することができます。「スタック」ウィンドウで行を選択すると、「データ」ウィンドウ、「監視」ウィンドウおよびすべての「インスペクタ」ウィンドウが更新され、関連データが表示されます。「データ」ウィンドウを使用すると、アプリケーションの引数、ローカル変数および静的フィールドを表示できます。
「ADF構造」ウィンドウには、プロジェクトの実行時構造が表示されます。「ADFデータ」ウィンドウでは、「ADF構造」ウィンドウの選択内容に基づいて、表示する情報が自動的に変更されます。たとえば、タスク・フロー・ノードが選択されている場合は、図31-12に示すように、「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ソース・コードの使用」を参照してください。
有効なOracle ADFサポートがある場合、Oracle Worldwide Supportでサービス・リクエストをオープンし、Oracle ADFの完全なソース・コードを取得できます。Oracle ADFのソース・コードは、特定のバージョンのものをリクエストできます。ソース・コードのZIPファイルを復号化するためのダウンロードおよびパスワード情報が与えられます。詳細は、Oracle Worldwide Supportに問い合せてください。
アプリケーションのデバッグ・セッションにOracle ADFソース・コードへのアクセスを追加すると、次のことが可能になります。
ソース・エディタ内でJDeveloper Quick Javadoc機能にアクセスできます。ソース・コードがない場合は、標準のJacadocのみの使用となります。
Javaコード・ブレークポイントは、ブレークポイントに到達したときに実行されているOracleソース・コードを表示するためにも使用できます。ブレークするソース・コード行の余白をクリックすることで、ブレークポイントをより簡単に設定することもできます。ソース・コードがない場合、Oracleコード内にブレークポイントを設定するには、クラス、メソッド、または行番号を調べる必要があります。
ソース・コード内に設定されたJavaコード・ブレークポイントの場合は、デバッガですべてのローカル変数およびメンバー・フィールドの値を表示できます。
ADFソース・コードのZIPファイルは、出荷の際にはコンテンツ保護のために暗号化された外部ZIP内に置かれます。外部ZIPファイルの名前は、サービス・リクエスト番号のバリアントであることがあります。
外部ZIPアーカイブ・ファイルの受信またはダウンロード後は、供給されるパスワードを使用して解凍し、実際のソース・コードのZIPファイルにアクセスします。ADFソース・コードのZIPファイル名は、Oracle ADFバージョン番号およびビルド番号のバリアントである必要があります。たとえば、Oracle ADFのソースZIPファイルは、adf_
vvvv
_nnnn
_source.zip
のような形式であり、ここでvvvv
はバージョン番号、nnnn
はビルド番号を示しています。
Oracle ADFソース・コードのZIPファイルにアクセスし、次にそのコンテンツを作業ディレクトリに解凍します。
ソース・ユーザー・ライブラリの名前を作成し、それをソースZIPファイルに関連付けます。
ADFソースZIPファイルをユーザー・ライブラリに追加するには:
メイン・メニューで、「ツール」、「ライブラリの管理」を選択します。
「ライブラリの管理」ダイアログの「ライブラリ」タブを選択した状態で、「新規」をクリックします。
「ライブラリの作成」ウィンドウで、ライブラリのタイプを識別する、ソース用のライブラリ名を入力します。
ツリー構造の「ソースパス」ノードを選択します。「エントリの追加」をクリックします。
注意: クラス・パスの値は入力しないでください。ソース・パスの値のみ指定する必要があります。 |
「パス・エントリの選択」ウィンドウで、ファイルが解凍されたディレクトリを参照し、ソースZIPファイルを選択します。「選択」をクリックします。
「ライブラリの作成」ウィンドウで、ソース・パスのエントリにソースZIPファイルの正しいパスが入力されていることを確認し、「デフォルトでデプロイ済」の選択を解除します。「OK」をクリックします。
「OK」をクリックします。
使用可能なユーザー・ライブラリのリストへソース・ライブラリを追加した後、デバッグするプロジェクトにソース・ライブラリを追加します。
ADFソースZIPファイルをプロジェクトに追加するには:
アプリケーション・ナビゲータで、ADFライブラリを追加するプロジェクトをダブルクリックするか、プロジェクトを右クリックして「プロジェクト・プロパティ」を選択します。
「プロジェクト・プロパティ」ダイアログで、「ライブラリとクラスパス」を選択します。
「ライブラリの追加」をクリックします。
「ライブラリの追加」ダイアログの「ユーザー」ノードで、追加するソース・ライブラリを選択して「OK」をクリックします。
ソース・ライブラリが「プロジェクト・プロパティ」ダイアログの「クラスパス・エントリ」セクションに表示されます。
「OK」をクリックします。
アプリケーションがブレークポイントで一時停止したら、EL式エバリュエータを使用して、評価するEL式を入力します。評価するEL式は、現在のコンテキストの範囲内で任意に入力することができます。EL式が現在のコンテキストの範囲に収まらない場合、値はnull
と評価されます。
ELエバリュエータは、後続のデバッグ手順で停止されるときでなく、ブレークポイントで停止されるときにのみEL評価が発生する点で、「監視」ウィンドウと異なります。
ELエバリュエータは、あらゆるJSFアプリケーションのデバッグで利用できます。
注意: EL式を評価するときは、アプリケーションのデータ、つまりアプリケーションの動作を間接的に変更しないように注意してください。たとえば、#{foo.bar} を評価する場合、対応するgetBar() メソッドによってアプリケーション・データが変更されます。 |
ELエバリュエータを使用するには:
アプリケーションでブレークポイントを設定します。
アプリケーションは、JSFアプリケーションである必要があります。ADFアプリケーションである必要はありません。
デバッグ・プロセスを開始します。
次のいずれかを実行します。
メイン・メニューで、「実行」→「<project_name>のデバッグ」を選択します。
アプリケーション・ナビゲータでプロジェクト、adfc-config.xml
、faces-config.xml
、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。
タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。
ブレークポイントに到達すると、ELエバリュエータは、デバッガ・ウィンドウ領域にタブとして表示されます。「ELエバリュエータ」タブをクリックして前面に移動します。表示されない場合は、メイン・メニューで「表示」を選択して、「デバッガ」→「ELエバリュエータ」を選択します。
注意: 「ブレークポイント」ウィンドウを確認するか、ブレークポイントの隣に「実行ポイント」アイコン(赤い右矢印)が表示されていることを確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。 |
「式」入力フィールドにEL式を入力します。
フィールドをクリックして#{
またはピリオドを入力すると、図31-13に示すように、入力支援機能によって選択可能な式項目のリストが表示されます。自動的に補完されるため入力が簡単です。セミコロンで区切ることによって、複数のEL式を同時に評価することができます。
EL式の入力を完了したら、「式の評価」をクリックすると、式が評価されます。図31-14を参照してください。
通常、問題を判断できず、自分で解決できない場合には、他の人に支援を求めます。OTN JDeveloper Discussion Forumに質問を投稿する場合、またはMetalinkでサービス・リクエストをオープンする場合、支援しようとしている他のユーザーが問題の発生箇所を正確に理解するためには、スタック・トレース情報を投稿内容に含めることが非常に重要です。
JDeveloperの「スタック」ウィンドウを使用すると、この情報を伝えるときに役立ちます。デバッガが一時停止したときは常に、「スタック」ウィンドウで、現在行までのメソッド・コールのスタックとしてプログラム・フローを確認できます。「プリファレンス」ダイアログを使用して、「スタック」ウィンドウのプリファレンスを設定し、デフォルトで組み込まれているクラスやメソッドの名前のように、行番号情報を組み込むことができます。最後に、「スタック」ウィンドウのポップアップ・メニュー・オプション「エクスポート」を使用すると、現在のスタック情報を外部テキスト・ファイルに保存できます。その後、問題の診断を支援してくれる人にファイルの内容を投稿または送信できます。
スタック情報をテキスト・ファイルに保存するには:
アプリケーションでブレークポイントを設定します。
アプリケーションは、JSFアプリケーションである必要があります。ADFアプリケーションである必要はありません。
次のいずれかの方法で、デバッグ・プロセスを開始します。
メイン・メニューで、「実行」→「<project_name>のデバッグ」を選択します。
アプリケーション・ナビゲータでプロジェクト、adfc-config.xml
、faces-config.xml
、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。
タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。
ブレークポイントに到達してデバッガが一時停止すると、「スタック」ウィンドウが、デバッガ・ウィンドウ領域側にウィンドウとして表示されます。「スタック」タブをクリックして、前面に表示します。「スタック」ウィンドウが表示されない場合は、メイン・メニューで「ウィンドウ」を選択して、「デバッガ」→「スタック」を選択します。
たとえばエクスポート・ファイルに行番号情報を組み込むなど、「スタック」ウィンドウのプリファレンスを変更する場合は「スタック」ウィンドウの背景を右クリックして、「プリファレンス」を選択します(図31-15)。
「スタック」ウィンドウの背景を右クリックして「エクスポート」を選択します。
スタックのエクスポート・ダイアログで、ファイルに名前を付けて、ファイルの保存場所を選択します。「OK」をクリックします。
ADFタスク・フロー・アクティビティ、ページ定義実行可能ファイル、メソッド、アクションおよび値のバインディング、ADFライフサイクル・フェーズ上でブレークポイントを宣言的に設定するには、JDeveloperでADF宣言デバッガ機能を使用します。メソッド名とクラス名などのADFコードのすべての内部構造体を知らなくても、最高抽象レベルでオブジェクトにブレークポイントを設定することができます。
タスク・フロー・ダイアグラマでタスク・フロー・アクティビティにブレークポイントを追加できます。あるいは、「ブレークポイント」ウィンドウでADFタスク・フロー・アクティビティ・ブレークポイントの作成ダイアログを起動できます。タスク・フロー・ダイアグラマでタスク・フロー・アクティビティを選択し、ポップアップ・メニューを使用してそのアクティビティのブレークポイントの有効/無効を切り替えるか、[F5]キーを押します。アプリケーションがブレークポイントで停止すると、「ADF構造」ウィンドウに、オブジェクトの実行時構造がツリー構造で表示されます。「ADFデータ」ウィンドウには、「ADF構造」ウィンドウで選択されたオブジェクトのデータのリストが表示されます。
たとえば、Browse Ordersタスク・フローのタスク・フロー・コール・アクティビティにブレークポイントを設定すると、図31-16に示すように、コール・アクティビティに赤い点のアイコンが表示されます。
ブレークポイントに到達すると、図31-17に示すように、アプリケーションが一時停止され、アイコンが変化します。
同様に、ページ定義ファイルでBeforeブレークポイントとAfterブレークポイントを設定することができます。項目の横の左余白または右余白をクリックするかまたはポップアップ・メニューから選択して、サポートされる値バインディング(サポートされる値バインディングのリストについては表31-1を参照)および実行可能ファイルに対してブレークポイントを設定します。左余白をクリックするとBeforeページ定義ブレークポイントが追加され、右余白をクリックするとAfterページ定義ブレークポイントが追加されます。この場合も、図31-18に示すように、ブレークポイントを示す赤い点アイコンが設定されます。
すべてのADFライフサイクル・フェーズにもBeforeブレークポイントとAfterブレークポイントを設定できます。図31-19に示すように「ブレークポイント」ウィンドウでADFライフサイクル・フェーズ・ブレークポイントの作成ダイアログを起動できます。
ADFライフサイクル・フェーズ・ブレークポイントの作成ダイアログでは、様々なライフサイクル・ブレークポイントのオプションを選択できます(図31-20)。
または、「ADF構造」ウィンドウの「ADFライフサイクル・ブレークポイント」ダイアログまたはタスク・フロー・ダイアグラマを使用して、ADFライフサイクル・フェーズ・ブレークポイントを設定します。ADFライフサイクル・フェーズの詳細は、第21章「Fusionページ・ライフサイクル」を参照してください。
ADF宣言デバッガを使用する場合、ADF宣言ブレークポイントとJavaコード・ブレークポイントの両方を定義することができます。デバッグ・シナリオによっては、宣言ブレークポイントのみを設定すればアプリケーションをデバッグできることもあります。あるいは、宣言的でないJavaコードで追加のブレークポイントを追加する必要が生じることもあります。Javaコード・ブレークポイントの詳細は、31.9.1項「クラスおよびメソッド上にJavaブレークポイントを設定する方法」を参照してください。表31-1は、ADF宣言デバッガ・ブレークポイントの場所のリストです。
表31-1 ADF宣言デバッガ・ブレークポイント
ADF面 | ブレークポイント型 | 挿入場所 | JDeveloperポップアップ・メニュー・コマンド | 説明 |
---|---|---|---|---|
ADFライフサイクル・フェーズ |
ADFライフサイクル・フェーズの前 ADFライフサイクル・フェーズの後にブレーク |
「ADF構造」ウィンドウの「ADFライフサイクル・ブレークポイント」ツールバー・ボタン タスク・フロー・ダイアグラマ 「ブレークポイント」ウィンドウの「追加」ボタン |
BeforeブレークポイントはADFライフサイクル・フェーズの前にデバッグを一時停止します。 AfterブレークポイントはADFライフサイクル・フェーズの後でデバッグを一時停止します。 ADFライフサイクルのJSFレスポンス・レンダリング・フェーズとレンダリング準備フェーズのBeforeブレークポイントとAfterブレークポイントは、次の順序で実行されます。
|
|
ADFページ定義 - バインディングおよび実行可能ファイル |
実行可能ファイルの前/後にブレーク:
|
ページ定義の概要エディタの「バインディングと実行可能ファイル」タブ、「実行可能ファイル」セクション 「ブレークポイント」ウィンドウの「追加」ボタン |
「ブレークポイントの設定」または[F5] 「ブレークポイントを無効化」 |
実行可能ファイルがリフレッシュする前または後にデバッグを一時停止します。タスク・フロー・バインディングの場合、1ライフサイクルにつき2回あり、最初は |
アクション・バインディングの前/後にブレーク:
|
ページ定義の概要エディタの「バインディングと実行可能ファイル」タブ、「バインディング」セクション 「ブレークポイント」ウィンドウの「追加」ボタン |
「ブレークポイントの設定」または[F5] 「ブレークポイントを無効化」 |
バインディングが実行される前または後にデバッグを一時停止します。 |
|
属性値バインディングの前/後にブレーク |
ページ定義の概要エディタの「バインディングと実行可能ファイル」タブ、「バインディング」セクション 「ブレークポイント」ウィンドウの「追加」ボタン |
「ブレークポイントの設定」または[F5] 「ブレークポイントを無効化」 |
属性の |
|
表バインディングの前/後にブレーク |
ページ定義の概要エディタの「バインディングと実行可能ファイル」タブ、「バインディング」セクション 「ブレークポイント」ウィンドウの「追加」ボタン |
「ブレークポイントの設定」または[F5] 「ブレークポイントを無効化」 |
ADF階層バインディングの |
|
ツリー・バインディングの前/後にブレーク |
ページ定義の概要エディタの「バインディングと実行可能ファイル」タブ、「バインディング」セクション 「ブレークポイント」ウィンドウの「追加」ボタン |
「ブレークポイントの設定」または[F5] 「ブレークポイントを無効化」 |
次の2つのケースのいずれかで一時停止します。 1. ツリーでノードの選択を実行している場合、ADF階層バインディングの 2. ツリーを開いている場合、ADFツリー・コレクション・モデルの |
|
ADFページ定義 - コンテキスト・イベント |
コンテキスト・イベントの前/後にブレーク |
ページ定義の概要エディタの「コンテキスト・イベント」タブ、「イベント」セクション 「ブレークポイント」ウィンドウの「追加」ボタン |
「ブレークポイントの設定」または[F5] 「ブレークポイントを無効化」 |
イベントがディスパッチされる前またはイベントの後に、イベントのサブスクライバによってイベントが使用される直前にデバッグを一時停止します。 |
ADFタスク・フロー |
アクティビティの前にブレーク: |
タスク・フロー・ダイアグラマ 「ブレークポイント」ウィンドウの「追加」ボタン |
「ブレークポイントの設定」または[F5] 「ブレークポイントを無効化」 |
JSFアプリケーション起動フェーズ内でアクティビティが実行する前にデバッグを一時停止します。宣言ブレークポイントが定義されているアクティビティは未実行です。例外はビュー・アクティビティです。ビュー・アクティビティが実行された後で、新しいページがレンダリングする前に、JSFレスポンス・レンダリング・フェーズ内で一時停止します。このポイントで一時停止することにより、「ADF構造」ウィンドウと「ADFデータ」ウィンドウを使用してビュー・アクティビティ値を検査できます。 |
「ブレークポイント」ウィンドウのツールバーには、図31-19に示すようにブレークポイントの追加、編集、削除、有効化、無効化のためのボタンが含まれます。「ブレークポイントの追加」ドロップダウン・メニューには、Javaコード・ブレークポイント、ADFライフサイクル・フェーズ・ブレークポイントおよびADFタスク・フロー・アクティビティ・ブレークポイントを追加する機能が含まれます。ADFタスク・フロー・アクティビティ・ブレークポイントとページ定義宣言ブレークポイントは、それぞれタスク・フロー・ダイアグラマまたはページ定義ファイルの概要エディタでも設定できます。
ADFタスク・フロー・ブレークポイントおよびページ定義宣言ブレークポイントは、条件やメソッド名以外の一般的なフィールドについては、「ブレークポイント」ウィンドウの編集コマンドを使用して編集できます。
表31-2に、「ブレークポイント」ウィンドウの「説明」列や「タイプ」列に表示されるADF宣言ブレークポイントを示します。「ブレークポイント」ウィンドウでADF宣言ブレークポイントをダブルクリックすると、対応するタスク・フローのタスク・フロー・ダイアグラマまたは対応するページ定義ファイルがワークスペースに表示され、ブレークポイントの場所を示します。
表31-2 「ブレークポイント」ウィンドウでのADF宣言ブレークポイントの表示
宣言ブレークポイントの型 | 「説明」列 | 「タイプ」列 |
---|---|---|
ページ定義実行可能ファイルの前/後:
|
page definition@executable idの前 ページ定義@実行可能ファイルidの後 |
ページ定義実行可能ファイル・ブレークポイントの前 |
ページ定義アクション・バインディングの前/後:
|
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-21)。
設定されたADF宣言ブレークポイントは、タスク・フロー・アクティビティ(図31-22)、ページ定義のブレークポイント余白(図31-23)、「ADFライフサイクル・ブレークポイント」ウィンドウ(図31-24)に、赤い点のアイコンとして表示されます。
ADFタスク・フローまたはページ定義の宣言ブレークポイントを無効にすると、図31-25に示すように、赤いアイコンがグレーのアイコンになります。
アクティブなADFタスク・フロー宣言ブレークポイントでは、図31-26に示すように、赤いアイコンに緑のチェックマークが付きます。
アプリケーションがADF宣言ブレークポイントで一時停止すると、図31-27に示すように、実行ポイントのアイコンが表示されます。
アプリケーションがADFライフサイクル宣言ブレークポイントで一時停止すると、図31-28に示すように、「ADFライフサイクル・ブレークポイント」ウィンドウのライフサイクル・フェーズの横に実行ポイントのアイコンが表示されます。現在のADFライフサイクル・フェーズの名前は「ADF構造」ウィンドウにも表示されます。
タスク・フローチャートの作成後は、タスク・フロー・アクティビティ上にADF宣言ブレークポイントを設定することができます。
タスク・フロー・アクティビティ上にブレークポイントを設定するには:
タスク・フロー・ダイアグラマでタスク・フローを開くか、「ブレークポイント」ウィンドウで「追加」アイコンをクリックし、「ADFタスク・フロー・アクティビティ・ブレークポイント」を選択します。
「ブレークポイント」ウィンドウが表示されていない場合は、メイン・メニューで、「ウィンドウ」→「ブレークポイント」を選択します。
タスク・フロー・アクティビティ・ブレークポイントを設定します。
タスク・フロー・ダイアグラマを使用する場合は、右クリックしてポップアップ・メニューから「ブレークポイントの設定」を選択するか、[F5]を押します。
タスク・フロー・アクティビティ上にブレークポイント・アイコンが表示されます。
「ブレークポイント」ウィンドウでADFタスク・フロー・アクティビティ・ブレークポイントの作成ダイアログを起動した場合は、「参照」をクリックしてタスク・フロー定義を選択し、「タスク・フロー」ドロップダウン・リストからタスク・フローを選択し、「アクティビティ」ドロップダウン・リストからタスク・フロー・アクティビティを選択し、「OK」をクリックします。
必要に応じて、次のようにデバッガを管理するためのブレークポイントの設定を構成します。
メイン・メニューで、「表示」、「ブレークポイント」の順に選択します。
「ブレークポイント」ウィンドウで、構成するタスク・フロー・アクティビティ・ブレークポイントを選択し、「編集」アイコンをクリックします。
ADFタスク・フロー・アクティビティ・ブレークポイントの編集ダイアログで「条件」タブをクリックし、ブレークポイントに適用する条件を指定します。条件が有効な場合のみブレークポイントが発生します。
「アクション」タブをクリックし、ブレークポイントが発生したときにデバッガで行うアクションを指定して、「OK」をクリックします。
たとえば、ブレークポイントの通常の処理では、デバッグ中のプログラムを停止しますが、プログラムを停止せずにビープ音を鳴らし、ログ・ウィンドウにログ情報を記録することもできます。
デバッグ・プロセスを開始します。
次のいずれかを実行します。
メイン・メニューで、「実行」→「<project_name>のデバッグ」を選択します。
アプリケーション・ナビゲータでプロジェクト、adfc-config.xml
、faces-config.xml
、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。
タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。
アプリケーションがブレークポイントで一時停止されると、タスク・フロー・アクティビティ上のブレークポイント・アイコンの隣に「実行ポイント」アイコン(赤い右矢印)が表示されます。各種デバッガ・ウィンドウを使用して、アプリケーションを調査できます。
注意: 「ブレークポイント」ウィンドウを確認するか、ブレークポイントの隣に「実行ポイント」アイコン(赤い右矢印)が表示されていることを確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。 |
タスク・フロー・アクティビティ宣言ブレークポイントは、タスク・フロー・アクティビティの実行直前でアプリケーションを一時停止します(ビュー・アクティビティを除く)。
デフォルトでは、「ADF構造」ウィンドウと「ADFデータ」ウィンドウ、およびいくつかのデバッガ・ウィンドウが表示されます。「ADF構造」ウィンドウでは実行時構造、「ADFデータ」ウィンドウではそれに対応するデータを調べることができます。31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。
「ADF構造」ウィンドウでノードを選択し、「ADFデータ」ウィンドウに関連情報を表示します。
タスク・フロー・アクティビティ宣言ブレークポイントは、タスク・フロー・アクティビティの実行直前でアプリケーションを一時停止します。トレース実行(F7)機能を使用すると、コールされたタスク・フローのデフォルト・アクティビティを実行する直前に、アプリケーションを一時停止できます。
必要に応じて、表31-3で説明したステップ機能を使用して、アプリケーションのデバッグを継続します。主要なステップ機能は、トレース実行(F7)です。
アプリケーションが一時停止しているときに、既存のブレークポイントを削除または無効化し、新しいブレークポイントを設定できます。
ページ定義に実行可能ファイルがある場合は、その実行可能ファイルの前または後でアプリケーションを一時停止するブレークポイントを設定できます。たとえば、イテレータがリフレッシュされるときにアプリケーションを一時停止するブレークポイントを設定できます。
注意: ビュー・オブジェクト問合せが実行された後でアプリケーションを一時停止するAfterイテレータ・ブレークポイントを設定している場合、アプリケーションがこのブレークポイントで複数回一時停止することに注意してください。また、問合せが実行されなかったときにも、このブレークポイントでアプリケーションが一時停止する可能性があります。問合せが実行されたかどうかを把握する必要がある場合は、関連するADFビジネス・コンポーネントを「ADF構造」ウィンドウで選択して、「ADFデータ」ウィンドウで対応するデータを確認します。これらのウィンドウの使用方法の詳細は、31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。ビュー・オブジェクト問合せ実行でのJavaコード・ブレークポイントの使用方法の詳細は、31.9.8項「一般的なOracle ADFブレークポイントの使用方法」を参照してください。 |
ページ定義ファイルの実行可能ファイル上にブレークポイントを設定するには:
アプリケーション・ナビゲータで、ブレークポイントを設定する実行可能ファイルを含むページ定義ファイルをダブルクリックします。
概要エディタの「バインディングと実行可能ファイル」タブをクリックし、「実行可能ファイル」リストで実行可能ファイルを選択し、項目の左側にあるブレークポイント余白をクリックします。
項目の隣にある余白にブレークポイント・アイコンが表示されます。
必要に応じて、次のようにデバッガを管理するためのブレークポイントの設定を構成します。
メイン・メニューで、「表示」、「ブレークポイント」の順に選択します。
「ブレークポイント」ウィンドウで、構成する実行可能ファイル・ブレークポイントを選択し、「編集」アイコンをクリックします。
ADFページ定義バインディング・ブレークポイントの編集ダイアログで「条件」タブをクリックし、ブレークポイントに適用する条件を指定します。条件が有効な場合のみブレークポイントが発生します。
「アクション」タブをクリックし、ブレークポイントが発生したときにデバッガで行うアクションを指定して、「OK」をクリックします。
たとえば、ブレークポイントの通常の処理では、デバッグ中のプログラムを停止しますが、プログラムを停止せずにビープ音を鳴らし、ログ・ウィンドウにログ情報を記録することもできます。
デバッグ・プロセスを開始します。
次のいずれかを実行します。
メイン・メニューで、「実行」→「<project_name>のデバッグ」を選択します。
アプリケーション・ナビゲータでプロジェクト、adfc-config.xml
、faces-config.xml
、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。
タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。
アプリケーションがブレークポイントで一時停止されると、実行可能項目のブレークポイント・アイコンの隣にある余白に、「実行ポイント」アイコン(赤い右矢印)が表示されます。各種デバッガ・ウィンドウを使用して、アプリケーションを調査することができます。
Executablesバインディングがリフレッシュされると、アプリケーションが一時停止します。taskFlow実行可能ファイルの場合、prepareModel
およびprepareRender
ライフサイクルで一時停止が発生します。
注意: 「ブレークポイント」ウィンドウを確認するか、ブレークポイントの隣の「実行ポイント」アイコン(赤い右矢印)を確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。 |
デフォルトでは、「ADF構造」ウィンドウと「ADFデータ」ウィンドウ、およびいくつかのデバッガ・ウィンドウが表示されます。「ADF構造」ウィンドウでは実行時構造、「ADFデータ」ウィンドウではそれに対応するデータを調べることができます。31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。
「ADF構造」ウィンドウでノードを選択すると、「ADFデータ」ウィンドウに関連情報が表示されます。
アプリケーションが一時停止しているときに、既存のブレークポイントを削除または無効化し、新しいブレークポイントを設定できます。
ページ定義ファイルで、アクション・バインディング上およびmethodAction
バインディング上にブレークポイントを設定することができます。バインディングが実行されると、アプリケーションが一時停止します。
ページ定義ファイルのアクション・バインディング上にブレークポイントを設定するには:
アプリケーション・ナビゲータで、ブレークポイントを設定するバインディングを含むページ定義ファイルをダブルクリックします。
概要エディタの「バインディングと実行可能ファイル」タブをクリックし、「バインディング」
リストでmethodActionバインディングまたは組込み操作項目を選択し、項目の左側にあるブレークポイント余白をクリックします。
項目の隣にブレークポイント・アイコンが表示されます。
必要に応じて、次のようにデバッガを管理するためのブレークポイントの設定を構成します。
メイン・メニューで、「表示」、「ブレークポイント」の順に選択します。
「ブレークポイント」ウィンドウで、構成するアクション・バインディング・ブレークポイントを選択し、「編集」アイコンをクリックします。
ADFページ定義バインディング・ブレークポイントの編集ダイアログで「条件」タブをクリックし、ブレークポイントに適用する条件を指定します。条件が有効な場合のみブレークポイントが発生します。
「アクション」タブをクリックし、ブレークポイントが発生したときにデバッガで行うアクションを指定して、「OK」をクリックします。
たとえば、ブレークポイントの通常の処理では、デバッグ中のプログラムを停止しますが、プログラムを停止せずにビープ音を鳴らし、ログ・ウィンドウにログ情報を記録することもできます。
デバッグ・プロセスを開始します。
次のいずれかを実行します。
メイン・メニューで、「実行」→「<project_name>のデバッグ」を選択します。
アプリケーション・ナビゲータでプロジェクト、adfc-config.xml
、faces-config.xml
、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。
タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。
アプリケーションがブレークポイントで一時停止されると、アクション・バインディング項目上のブレークポイント・アイコンの隣に「実行ポイント」アイコン(赤い右矢印)が表示されます。各種デバッガ・ウィンドウを使用して、アプリケーションを調査することができます。
バインディングが実行されると、アプリケーションが一時停止します。
注意: 「ブレークポイント」ウィンドウを確認するか、ブレークポイントの隣に「実行ポイント」アイコン(赤い右矢印)が表示されていることを確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。 |
デフォルトでは、「ADF構造」ウィンドウと「ADFデータ」ウィンドウ、およびいくつかのデバッガ・ウィンドウが表示されます。「ADF構造」ウィンドウでは実行時構造、「ADFデータ」ウィンドウではそれに対応するデータを調べることができます。31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。
「ADF構造」ウィンドウでノードを選択すると、「ADFデータ」ウィンドウに関連情報が表示されます。
アプリケーションが一時停止しているときに、既存のブレークポイントを削除または無効化し、新しいブレークポイントを設定できます。
ページ定義に属性値バインディングがある場合、属性値バインディング上にブレークポイントを設定して、アプリケーションを一時停止することができます。
ページ定義ファイルの属性値バインディング上にブレークポイントを設定するには:
アプリケーション・ナビゲータで、ブレークポイントを設定するバインディングを含むページ定義ファイルをダブルクリックします。
概要エディタの「バインディングと実行可能ファイル」・タブをクリックし、「バインディング」リストで属性値を選択し、項目の左側にあるブレークポイント余白をクリックします。属性値バインディングの隣にブレークポイント・アイコンが表示されます。
必要に応じて、次のようにデバッガを管理するためのブレークポイントの設定を構成します。
メイン・メニューで、「表示」、「ブレークポイント」の順に選択します。
「ブレークポイント」ウィンドウで、構成するバインディング・ブレークポイントを選択し、「編集」アイコンをクリックします。
ADFページ定義バインディング・ブレークポイントの編集ダイアログで「条件」タブをクリックし、ブレークポイントに適用する条件を指定します。条件が有効な場合のみブレークポイントが発生します。
「アクション」タブをクリックし、ブレークポイントが発生したときにデバッガで行うアクションを指定して、「OK」をクリックします。
たとえば、ブレークポイントの通常の処理では、デバッグ中のプログラムを停止しますが、プログラムを停止せずにビープ音を鳴らし、ログ・ウィンドウにログ情報を記録することもできます。
デバッグ・プロセスを開始します。
次のいずれかを実行します。
メイン・メニューで、「実行」→「<project_name>のデバッグ」を選択します。
アプリケーション・ナビゲータでプロジェクト、adfc-config.xml
、faces-config.xml
、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。
タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。
アプリケーションがブレークポイントで一時停止されると、属性値バインディング上のブレークポイント・アイコンの隣に「実行ポイント」アイコン(赤い右矢印)が表示されます。各種デバッガ・ウィンドウを使用して、アプリケーションを調査することができます。
ADFソース・コード実行のsetInputValue()
メソッドの前で、アプリケーションが一時停止します。新しい値は、このメソッドに入るパラメータになります。
注意: 「ブレークポイント」ウィンドウを確認するか、ブレークポイントの隣に「実行ポイント」アイコン(赤い右矢印)が表示されていることを確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。 |
デフォルトでは、「ADF構造」ウィンドウと「ADFデータ」ウィンドウ、およびいくつかのデバッガ・ウィンドウが表示されます。「ADF構造」ウィンドウでは実行時構造、「ADFデータ」ウィンドウではそれに対応するデータを調べることができます。31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。
「ADF構造」ウィンドウでノードを選択すると、「ADFデータ」ウィンドウに関連情報が表示されます。
必要に応じて、表31-3で説明したステップ機能を使用して、アプリケーションのデバッグを継続します。主要なステップ機能は、ステップ実行(F8)です。
アプリケーションが一時停止しているときに、既存のブレークポイントを削除または無効化し、新しいブレークポイントを設定できます。
ADFライフサイクル・フェーズのBeforeブレークポイントとAfterブレークポイントを任意のADFライフサイクル・フェーズに設定できます。各フェーズに、Beforeのみ、Afterのみ、または両方を設定できます。必要な数のフェーズにブレークポイントを設定できます。
「ブレークポイント」ウィンドウのメニューからADFライフサイクル・フェーズ・ブレークポイントの作成ダイアログを使用し、ブレークポイントを作成して、オプションをカスタマイズできます。または、「ADFライフサイクル・ブレークポイント」ウィンドウを使用してデフォルト・オプションのブレークポイントを作成できます。ライフサイクル・ブレークポイントを設定した後で、「ブレークポイント」ウィンドウから開始できるADFライフサイクル・フェーズ・ブレークポイントの編集ダイアログを使用してオプションを編集できます。
ADFライフサイクル・ブレークポイントは次に示す任意のADFライフサイクル・フェーズに設定できます。
JSFのビューのリストア
コンテンツの初期化
モデルの準備
JSFのリクエスト値の適用
JSFの検証処理
JSFのモデル値の更新
モデル更新の検証
JSFのアプリケーションの起動
メタデータのコミット
レンダリング準備
JSFのレスポンス・レンダリング
「ブレークポイント」ウィンドウでADFライフサイクル・フェーズ・ブレークポイントを設定または管理するには:
メイン・メニューで、「表示」、「ブレークポイント」の順に選択します。
「ブレークポイント」ウィンドウで、「追加」→「ADFライフサイクル・フェーズ・ブレークポイント」を選択します。
ADFライフサイクル・フェーズ・ブレークポイントの作成ダイアログの「定義」タブで、次の手順を実行します。
ブレークポイントを設定するADFライフサイクル・フェーズを選択します。
「フェーズの前」または「フェーズの後」のブレークポイントを選択します。
「条件」タブで必要なオプションを選択し、「OK」をクリックします。
「アクション」タブで必要なオプションを選択し、「OK」をクリックします。
ブレークポイント・アイコンを使用してADFライフサイクル・フェーズ・ブレークポイントを設定するには:
アプリケーション・ナビゲータで、任意のタスク・フロー構成ファイルをダブルクリックし、概要エディタで「ダイアグラム」タブをクリックします。
タスク・フロー・ダイアグラマのツールバーまたは「ADF構造」ウィンドウのタイトル・バーで、ADFライフサイクル・ブレークポイントのアイコン(図31-29)をクリックします
「ADFライフサイクル・ブレークポイント」ウィンドウで、ADFライフサイクル・フェーズの左余白をクリックしてBeforeブレークポイントを設定し、右余白をクリックしてAfterブレークポイントを設定します。図31-30に示すように、ブレークポイントを示す赤い点アイコンが設定されます。このブレークポイントはデフォルトのブレークポイント・オプションで設定されます。ブレークポイントを削除するには赤い点アイコンをクリックします。
ブレークポイント・オプションを編集する場合は、「ブレークポイント」ウィンドウでブレークポイントを選択し、「編集」アイコンをクリックします。
ADFライフサイクル・フェーズ・ブレークポイントを使用してアプリケーションをデバッグするには:
デバッグ・プロセスを開始します。
次のいずれかを実行します。
メイン・メニューで、「実行」→「<project_name>のデバッグ」を選択します。
アプリケーション・ナビゲータでプロジェクト、adfc-config.xml
、faces-config.xml
、タスク・フロー、ページのいずれかを右クリックして、「デバッグ」を選択します。
タスク・フロー・ダイアグラマで、アクティビティを右クリックして、「デバッグ」を選択します。ページ・フラグメントを使用しないタスク・フローのみを実行できます。
アプリケーションがADFライフサイクル・フェーズ・ブレークポイントで一時停止すると、図31-31に示すように、「ADFライフサイクル・ブレークポイント」ウィンドウで、実行ポイントのアイコン(赤い右矢印)がブレークポイント・アイコンの横に表示され、ADFライフサイクル・フェーズが太字になります。各種デバッガ・ウィンドウを使用して、アプリケーションを調査することができます。
注意: 「ブレークポイント」ウィンドウでブレークポイントの到達を確認するか、ブレークポイントの隣に「実行ポイント」アイコン(赤い右矢印)が表示されていることを確認することによって、アプリケーションが実際にブレークポイントをヒットしていることを確認してください。ブレークポイントの設定箇所によっては、アプリケーションが実際にはページ上でのユーザー入力を待機しているのに、停止しているように見えることがあります。 |
デフォルトでは、「ADF構造」ウィンドウと「ADFデータ」ウィンドウ、およびいくつかのデバッガ・ウィンドウが表示されます。「ADF構造」ウィンドウでは実行時構造、「ADFデータ」ウィンドウではそれに対応するデータを調べることができます。現在のADFライフサイクル・フェーズは「ADF構造」ウィンドウの一番上に表示されます。詳細は、31.8.6項「ADF構造ウィンドウの使用方法」、および31.8.7項「ADFデータ・ウィンドウの使用方法」を参照してください。
「ADF構造」ウィンドウでノードを選択すると、「ADFデータ」ウィンドウに関連情報が表示されます。
必要に応じて、表31-3で説明したステップ機能を使用して、アプリケーションのデバッグを継続します。主要なステップ機能は、ステップ実行(F8)です。
アプリケーションが一時停止しているときに、既存のブレークポイントを削除または無効化し、新しいブレークポイントを設定できます。
アプリケーションがブレークポイントで停止すると、「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-32に示すように、「ADF構造」ウィンドウにADFライフサイクル・フェーズとランタイム・オブジェクトのツリー構造が表示されます。
「ADF構造」ウィンドウで項目を選択すると、その項目に関連付けられているデータと値が「ADFデータ」ウィンドウに表示されます。図31-33に、「ADF構造」ウィンドウで選択されたタスク・フローと、「ADFデータ」ウィンドウに表示された関連情報を示します。
階層のルートは、兄弟ノードである「スコープ」と「ADFコンテキスト」です。処理が停止した現在のビュー・ポートは、太字で表示されます。ツリー内のデフォルトの選択内容は前のブレークポイントから保持されるため、ブレークポイント間での変化を監視することができます。ADF宣言ブレークポイントが定義されているADFオブジェクトは、対応するJDeveloperエディタ(タスク・フロー・ダイアグラマ、またはページ定義ファイルの概要エディタ)で開かれます。
「ADF構造」ツリーは、変更されたオブジェクト状態を反映するため、アプリケーションがブレークするたびに、また後続のステップでも再ビルドされます。全体のツリー階層が表示されますが、選択したり、さらに調査したりできるのは、現在のビュー・ポートとその親ビュー・ポートの範囲内の項目のみです。現在のコンテキストにない、ツリー階層の他のすべての項目は、淡色表示され、無効にされます。また、この階層を使用して、アプリケーションの範囲内でのランタイム・オブジェクト間の関係を特定することもできますが、現在のコンテキスト(およびその親のビュー・ポート)に限定されます。
表31-4に、「ADF構造」ウィンドウの階層ツリーに表示できる、各種の項目を示します。
表31-4 「ADF構造」ウィンドウの項目
「ADF構造」ツリーの項目 | 説明 |
---|---|
スコープ |
ADF構造階層の一番上で兄弟ノードの「ADFコンテキスト」よりも上に表示されます。ADF構造階層には「スコープ」ノードは1つしかありません。「スコープ」ノードを展開すると、子スコープ・ノード(viewScopeやpageFlowScopeなど)のリストが表示されます。子スコープ・ノードを選択すると、「ADFデータ」ウィンドウにそのスコープの変数と値が表示されます。 |
ADFコンテキスト |
ADF構造階層のルート・ノードとして、兄弟ノードの「スコープ」の下に表示されます。ADF構造階層内にはADFコンテキストは1つのみ存在する。 |
ビュー・ポート |
ビュー・ポートは、ADF Controllerの概念。このため、デバッグしているアプリケーションがADF Controllerを利用するときだけ、ADF構造階層の範囲内でビュー・ポートが表示される。 ビュー・ポートは、次のいずれかを表現可能。
|
ADFタスク・フロー |
各ビュー・ポートに対応するページ・フロー・スタックは、ADFタスク・フローの階層として表示されます。スタックに対応してコールされる最初のADFタスク・フローは、対応するビュー・ポートの直接の子である。各ADFタスク・フローのラベルは、対応するADFタスク・フロー表示名(存在する場合)、またはそのタスク・フローIDを反映する。リージョン・ビュー・ポートには、内包されたバインドなしタスク・フローのためのページ・フロー・スタック階層内の項目は表示されません。タスク・フローにも、ADFタスク・フロー・パスを表示するツールチップと、エディタ・ワークスペース内の、対応するADFタスク・フローを開くポップアップ・メニュー項目が用意されている。 アプリケーションがADF Controllerを利用しない場合(またはページがADFタスク・フローのコンテキストの外部で実行される場合)、ADFタスク・フローは階層内に表示されない。 |
ページ |
ブラウザ・ビュー・ポート内で現在表示されているページ(ビュー)を表します。関連付けられたバインディング・コンテナ(ある場合)と一緒に子として示されます。デバッグしているアプリケーションがADFコントローラを利用する場合、ページは各ブラウザ・ビュー・ポートの子です。各ページのラベルは、対応するランタイム・ビューIDを反映する。ページにも、ページ・パスを表示するツールチップと、エディタ・ワークスペース内の、対応するページを開くポップアップ・メニュー項目が用意されている。アプリケーションでビジュアル・ユーザー・インタフェースが実装されていない場合、ページは階層内に表示されない。 |
ページ・フラグメント |
リージョン・ビュー・ポート内で現在表示されているページ・フラグメントを表す。関連付けられたバインディング・コンテナ(ある場合)と一緒に子として示されます。デバッグしているアプリケーションがADF Controllerを利用する場合、ページ・フラグメントは各リージョン・ビュー・ポートの子である。各ページ・フラグメント・ノードのラベルは、対応するランタイム・ビューIDを反映する。ページ・フラグメントにも、ソース・ファイル・ページ定義パスを表示するツールチップと、エディタ・ワークスペース内の、対応するページ・フラグメントを開くポップアップ・メニュー項目が用意されています。 |
バインディング・コンテナ |
対応するページまたはページ・フラグメントのバインディング・コンテナを表す。各バインディング・コンテナのラベルは、対応するファイル名(ページ定義ファイル)から拡張子を除いたものを反映する。バインディング・コンテナ・ノードにも、ページ・フラグメント・パスを表示するツールチップが用意されています。タスク・フロー・アクティビティ・バインディング(たとえば、メソッド・コール・アクティビティ・バインディング)を表すために使用される場合は、バインディング・コンテナも現在のタスク・フローの下に表示される。 アプリケーションでADFモデルが利用されない場合、バインディング・コンテナは表示されない。 |
アプリケーション・データ |
対応するビュー・ポート(または、ADFコントローラが使用されない場合はバインディング・コンテナ)のデータ・コントロール・フレーム内でインスタンス化されたアプリケーション・データ・オブジェクト(ADFビジネス・コンポーネント・オブジェクトまたはADFビジネス・コンポーネント・ビジネス・サービス・オブジェクトなど)を表します。現在、アプリケーション・データ・ノードを表示するために、アプリケーション・データ・オブジェクトをインスタンス化する必要はありません。 |
アプリケーションがADF宣言ブレークポイントで一時停止されるとき、「ADFデータ」ウィンドウには、「ADF構造」ウィンドウ内での選択内容に基づく関連データが表示されます。「ADFデータ」ウィンドウを開くには、メイン・メニューから「表示」→「デバッガ」→「ADFデータ」を選択します。「ADF構造」ウィンドウでの選択内容に基づく「ADFデータ」ウィンドウの内容を、表31-5に示します。
表31-5 「ADF構造」ウィンドウの選択内容に対応する「ADFデータ」ウィンドウの内容
「ADF構造」ウィンドウ | ADFデータの内容 |
---|---|
スコープ |
現在のコンテキストに基づくメモリー・スコープ値が表示されます。 |
ADFコンテキスト |
ADFコンテキストの変数と値の階層が表示されます。 |
ビュー・ポート |
|
ページ・フロー・スタック・エントリ |
現在のトランザクション・ステータスやADFモデル・セーブポイント・ステータスなど、選択されているページ・フロー・スタック・エントリの情報が表示されます。 |
ページ/ページ・フラグメント |
ページまたはページ・フラグメントがレンダリングされた場合は、選択されたページまたはページ・フラグメントに対応する、ページまたはページ・フラグメントUIコンポーネント・ツリー階層が表示される。 |
バインディング・コンテナ |
パラメータ、バインディング、実行可能ファイルなど、バインディング・コンテナの実行時値が表示されます。 |
アプリケーション・データ |
現在のバインディング・コンテキストでインスタンス化されたアプリケーション・データ・オブジェクト(たとえばADFビジネス・コンポーネント・オブジェクト)が表示されます。ビジネス・サービス・レイヤーがADFビジネス・コンポーネント・オブジェクト(たとえばEJB)以外のテクノロジで実装されている場合、アプリケーション・データ・オブジェクトはより一般的な形式で表示されます。 |
「ADF構造」ウィンドウの「スコープ」ノードを展開すると、子スコープ・ノードのリストが表示されます。「ADF構造」ウィンドウで子スコープ・ノードを選択すると、「ADFデータ」ウィンドウに、選択したメモリー・スコープの現在のコンテキスト値が表示されます(図31-34)。
「スコープ」ノードそのものを選択した場合は、メモリー・スコープすべてのリストが「ADFデータ」ウィンドウにも表示されます。このリストも検査のために展開できます。図31-35では、「ADF構造」ウィンドウで「スコープ」ノードが選択され、「ADFデータ」ウィンドウではviewScope子ノードが選択されて値が表示されています。requestScope
、viewScope
、pageFlowScope
、applicationScope
およびsessionScope
に対応する各ノードを展開して値を検査できます。pageFlowScope
も、ADFタスク・フローの内容に表示され、「ADF構造」ウィンドウで現在選択されているADFタスク・フロー固有の値を反映します。viewScope
も、ビュー・ポートの内容に表示され、「ADF構造」ウィンドウで現在選択されている特定のビュー・ポートの値を反映します。
図31-36のように「ADF構造」ウィンドウで「ADFコンテキスト」が選択されると、ADFコンテキスト変数の現在の値が「ADFデータ」ウィンドウに表示されます。#(data.adfContext)
EL式をELエバリュエータで評価して、ADFコンテキストの変数と値を検査することもできます。詳細は、31.7.4項「EL式エバリュエータの使用」を参照してください。
ADF構造階層内でビュー・ポートを選択すると、図31-37に示すように、そのビュー・ポートの現在のビュー・ポート詳細が「ADFデータ」ウィンドウに表示されます。各ビュー・ポートで表示される値の概要を、表31-6に示します。
表31-6 ビュー・ポートに対応する「ADFデータ」ウィンドウの内容
ビュー・ポート | 説明 |
---|---|
ビュー・ポートID |
表示されます。 |
クライアントID |
表示されます。 |
初期タスク・フローID |
ビュー・ポート・ページ・フロー・スタック上の初期ADFタスク。バインドなしタスク・フローの場合は表示されません。対応するタスク・フロー定義をエディタ・ワークスペースで開くためのリンクとして表示される。 |
現在のタスク・フローID |
バインド・タスク・フローでは表示され、バインドなしタスク・フローでは表示されません。ビュー・ポートのページ・フロー・スタック上の現在のADFタスク。対応するタスク・フロー定義をエディタ・ワークスペースで開くためのリンクとして表示される。 |
ビュー・アクティビティID |
現在のADFタスク・フロー・ビュー・アクティビティID。現在のADFタスク・フロー・アクティビティがビュー・アクティビティである場合のみ適用される。 |
発行済アクティビティID |
現在のリクエストを発行しているADFタスク・フロー・アクティビティ。 |
最終アクティビティID |
現在のリクエストを受け取っているADFタスク・フロー・アクティビティ。 |
未処理のブックマーク・リダイレクト |
(ブール) |
例外 |
(存在する場合) |
ビュー・メモリー・スコープ |
選択したビュー・ポートのビュー・メモリー・スコープ変数と値。 |
「ADF構造」ウィンドウでは、ページ・フロー・スタック階層内の各ADFタスク・フローを選択できます。「ADF構造」ウィンドウでADFタスク・フローを選択すると、現在のタスク・フロー情報が「ADFデータ」ウィンドウに表示されます(図31-38)。選択したADFタスク・フローで使用されるタスク・フロー・テンプレートを判別するには、ADFタスク・フロー・ソース・ファイルに手動でナビゲートします。これは、Javaソース・ファイルで同様の機能を処理する方法と似ています。選択されたADFタスク・フローの現在の情報を表31-7に示します。
表31-7 タスク・フローに対応する「ADFデータ」ウィンドウの内容
タスク・フロー | 説明 |
---|---|
ADFタスク・フローの参照 |
ADFタスク・フローの参照 |
タスク・フロー・コール・アクティビティID |
コール元タスク・フローのタスク・フロー・アクティビティID。各ビュー・ポート・タスク・フローの「コール」ウィンドウ内の最初のADFタスク・フローでは |
ビュー・アクティビティIDのコール中 |
ADFタスク・フロー(存在する場合)によって表示されている現在の表示アクティビティのコール元表示アクティビティ。 |
ビュー到達済 |
(ブール) |
トレイン・モデル |
現在のADFタスク・フロー・アクティビティがビュー・アクティビティである場合のみ適用される。 |
トランザクション開始済 |
(ブール)ADFタスク・フローのトランザクション状態の現行ステータスを特定する。たとえば、ADFタスク・フローが、新しいトランザクションを開始したかどうか。 |
トランザクション共有 |
(ブール)ADFタスク・フローのトランザクション状態の現行ステータスを特定する。たとえば、ADFタスク・フローが、既存のトランザクションに結合されたかどうか。 |
セーブポイント |
ADFタスク・フローのADFモデル・セーブポイント作成状態の現行ステータスを特定します。たとえば、モデル・セーブポイントが、ADFタスク・フロー・エントリ上に作成されたか。 |
リモート・タスク・フロー・コール済 |
(ブール) |
リモート・タスク・フロー・リターンURL |
ADFタスク・フローをリモートからコールする場合にのみ適用される。リモートからコールされたタスク・フローが完了したときに戻すURLを特定する。 |
データ・コントロール・フレーム作成済 |
(ブール) |
データ・コントロール・フレーム |
ADFタスク・フローに関連付けられたデータ・コントロール・フレームの名前。 |
ページ・フロー・メモリー・スコープ |
展開できるノードとして表示されます。「ADF構造」ウィンドウで選択されたタスク・フローのページ・フロー・メモリー・スコープの値を検査できます。 ページ・フロー・メモリー・スコープは、「ADF構造」ウィンドウの「スコープ」ノードにも表示されます。ただし、「スコープ」ノードのページ・フロー・メモリー・スコープは、常にアプリケーションの現在のコンテキストに対応し、選択されているタスク・フローには対応していません。 |
ADF構造階層でページまたはページ・フラグメント・ノードを選択すると、図31-39に示すように、対応するUIコンポーネント・ツリーがADFデータ・ウィンドウに表示されます。ページまたはページ・フラグメントがページ・テンプレートに基づいている場合、ページ・テンプレートに由来する内容をファセット参照項目の外部に組み込むことができます。これには、「ADFデータ」ウィンドウの一番上で「ページ・テンプレート・コンテンツを含める」チェックボックスを選択します。ページ・テンプレートの内容が組み込まれない場合、ページまたはページ・フラグメントのUIコンポーネント・ツリーはソース・ファイルのツリーと似た構造になります。
ADF構造階層でバインディング・コンテナを選択すると、表31-8に示すノードの選択肢が「ADFデータ」ウィンドウに表示されます。
表31-8 バインディング・コンテナに対応する「ADFデータ」ウィンドウの内容
バインディング・コンテナ | 説明 |
---|---|
ページ定義リンク |
対応するページ定義ソース・ファイルに移動して、エディタ・ワークスペースで開く。 |
データ・コントロール |
バインディング・コンテナのデータ・コントロールが表示されます。 ADFビジネス・コンポーネント・オブジェクトよって実装されたデータ・コントロールと非ADFビジネス・コンポーネント・オブジェクトによって実装されたデータ・コントロールの表示は少し異なります。ADFビジネス・コンポーネント・ベースのデータ・コントロールの表示は、行コレクションを使用する実際のビジネス・サービス実装と似ています。非ADFビジネス・コンポーネント・ベースのデータ・コントロールは、通常、RAWメンバー変数として表示されます。これはADF宣言デバッガの「データ」ウィンドウに表示される項目と似ています。「ADFデータ」ウィンドウには、メンバー変数や配列など、キャッシュされた情報しか表示されません。標準デバッガ機能を使用して、各項目をカスタマイズすることもできます。 各ADFビジネス・コンポーネント・データ・コントロールについて次の情報が表示されます。
|
パラメータ |
すべてのバインディング・コンテナ・パラメータの現在の値。 |
実行可能ファイル |
実行可能ファイルが表示され、現在行のインジケータと、現在と元の値(同じリクエスト内で変更された場合)が示されます。これには次のタイプの実行可能ファイルが含まれます。
|
バインド |
値、表、ツリーおよびメソッドのバインディングが表示されます。各バインディングには次の情報が含まれます。
|
ページ・テンプレートのバインディング・コンテナ |
対応するページまたはページ・フラグメントがページ・テンプレートを利用していた場合、ページ・テンプレートのバインディング・コンテナは、ページまたはページ・フラグメント・バインディング・コンテナの内容の子として表示されます。 |
非ADFビジネス・コンポーネント・オブジェクトに基づくアプリケーションのバインディング・コンテナを選択すると、「ADFデータ」ウィンドウにバインディング・コンテナの内容が表示されます(図31-38)。
ADFビジネス・コンポーネント・オブジェクトに基づくアプリケーションのバインディング・コンテナを選択すると、「ADFデータ」ウィンドウに標準の行コレクション・アイコンが表示されます(図31-2)。
「ADFデータ」ウィンドウの「パラメータ」ノードを展開すると、図31-42のように情報が表示されます。
「ADFデータ」ウィンドウの「実行可能ファイル」ノードを展開すると、図31-43のように情報が表示されます。
値が変更された場合、変更された項目は左側に青い点が付いてマークされ、以前の値がカッコ内に表示されます。たとえば、OrderTotal
の値が7895.81から7670.11に変更されたとします。「ADFデータ」ウィンドウでは、OrderTotal
と親のOrdersView1Iterator
の横に青い点が表示され、「値」列に現在の値と前の値が表示されます(図31-44)。
メソッドのバインディング情報は「ADFデータ」ウィンドウで図31-45のように表示されます。
「ADF構造」ウィンドウでアプリケーション・データ・ノードを選択すると、対応するビュー・ポート(または、ADFコントローラが使用されない場合はバインディング・コンテキスト)の現在のデータ・コントロール・フレーム内でインスタンス化されたアプリケーション・オブジェクト(ADFビジネス・コンポーネント・オブジェクトなど)が、「ADFデータ」ウィンドウに表示されます。
ADFビジネス・コンポーネント・オブジェクトで実装されたビジネス・サービスによって、図31-46のようにアプリケーション・データの内容が表示されます(これは表31-9で説明します)。
表31-9 アプリケーション・データに対応する「ADFデータ」ウィンドウの内容
バインディング・コンテナ | 説明 |
---|---|
アプリケーション・モジュール |
対応するビュー・ポートのデータ・コントロール・フレームのアプリケーション・モジュールが、アプリケーション・データ階層にルート・ノードとして表示されます。アプリケーション・モジュールの設計時のアイコンによってノードが示されます。アプリケーション・モジュール・ノードでは次の情報が提供されます。
|
ビュー・オブジェクト |
対応するビュー・ポートのデータ・コントロール・フレーム内でインスタンス化されたビュー・オブジェクトが、対応するアプリケーション・モジュール・ルート・ノードの下に下位ノードとして表示されます。設計時のアイコンによって示されます。子ビュー・オブジェクトは、親ビュー・オブジェクトの下位階層に表示されます。名前付き行セットはビュー・オブジェクトと同様に表示されます。ビュー・オブジェクトの名前付きイテレータは子ビュー・オブジェクトと同様に表示されます。各ビュー・オブジェクト・ノードでは次の情報が提供されます。
|
エンティティ・オブジェクト |
対応するビュー・ポートのデータ・コントロール・フレーム内でインスタンス化されたエンティティ・オブジェクトが、アプリケーション・モジュール・ルート・ノードの下に下位ノードとして表示されます。設計時のアイコンによって示されます。各エンティティ・オブジェクト・ノードでは次の情報が提供されます。
|
非ADFビジネス・コンポーネント・オブジェクトによって実装されたビジネス・サービスでは、アプリケーション・データの内容がRAWメンバー変数を使用して表示されます。この形式は、図31-40に示す、バインディング・コンテナに関する非ADFビジネス・コンポーネントの内容の表示と似ています
ADF宣言ブレークポイントを設定すると、ADFソースJavaコード内の対応する適切なクラス、メソッドまたは他の構造体に、JDeveloperによってブレークポイントが追加されます。コードにブレークポイントが設定されると、アプリケーションがブレークポイントに到達したときに、標準Javaデバッガ・メカニズムによって実行が一時停止されます。ブレークポイントに到達すると、「ブレークポイント」ウィンドウにおいて赤い点のアイコンで示されます。到達した宣言ブレークポイントのタイプに応じて、タスク・フロー・アクティビティ、ページ定義ブレークポイント余白、または「ADFライフサイクル・ブレークポイント」ウィンドウでも、赤い点のアイコンとして示されます。
タスク・フロー・アクティビティ・ブレークポイントの場合、JSFアプリケーション起動フェーズ内で、ブレークポイントが設定されたアクティビティの前にアプリケーションがデバッガによって一時停止されます。つまり、ブレークポイントが設定されているアクティビティは実行されません。
ただし、タスク・フロー・ビュー・アクティビティの場合、アプリケーションは、ビュー・アクティビティが実行された後で、新しいページがレンダリングする前に、JSFレスポンス・レンダリング・フェーズ内で一時停止します。
ページ定義の実行可能ファイルのBeforeブレークポイントの場合、実行可能ファイルがリフレッシュされるとアプリケーションがデバッガによって一時停止されます。ページ定義のアクション・バインディングのBeforeブレークポイントの場合、バインディングが実行されるとアプリケーションがデバッガによって一時停止されます。ページ定義の属性値バインディングのBeforeブレークポイントの場合、ADFソース・コードの属性のsetInputValue()
メソッドが実行される前に、アプリケーションがデバッガによって一時停止されます。
ライフサイクルのBeforeブレークポイントの場合、アプリケーションが次のライフサイクル・フェーズに入る前にデバッガによって一時停止されます。ライフサイクルのAfterブレークポイントの場合は、ライフサイクル・フェーズの後で次のフェーズの前にアプリケーションがデバッガによって一時停止されます。
標準的な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ソースのデバッグ・ライブラリ・バージョンを使用してデバッグの効率を上げることができます。
クラスおよびメソッド上にJavaブレークポイントを設定できます。ADFソース・コードがある場合、ソースにもJavaブレークポイントを設定することができます。ADFアプリケーションをデバッグしている場合、Javaコード・ブレークポイントでなくADF宣言ブレークポイントを使用することができないか確認することをお薦めします。詳細は、31.8項「ADF宣言ブレークポイントの設定」を参照してください。
ブレークポイントの使用を試みる前に、アプリケーションを実行し、欠落しているデータや不完全なデータ、無視されるアクションとメソッド、正しく実行されていないアクションとメソッド、あるいはその他の予期しない結果があるか調べることをお薦めします。問題がなければ、ADFログを有効にしてOracle ADFメッセージを「ログ」ウィンドウに送信するデバッグ構成を作成します。詳細は、31.5.2項「Oracle ADFデバッグ構成の作成方法」を参照してください。
Javaブレークポイントを設定してアプリケーションをデバッグするには:
メイン・メニューで「ナビゲート」→「Javaタイプに移動」を選択し(または[Ctrl]を押しながら[-]を押し)、ダイアログを使用して、処理が失敗しているエントリ・ポイントを表すOracle ADFクラスを見つけます。
注意: JDeveloperにより、「アプリケーション・ナビゲータ」内で現在フォーカスのあるユーザー・インタフェース・プロジェクトからのクラスが特定されます。ワークスペースに複数のユーザー・インタフェース・プロジェクトが含まれている場合は、デバッグの対象となるプロジェクトに現在フォーカスがあることを確認してください。 |
ソース・エディタでクラス・ファイルを開き、メソッドの文をトレース実行できるOracle ADFメソッド・コールを見つけます。
目的のメソッドにブレークポイントを設定し、デバッガを実行します。
アプリケーションがブレークポイントで停止したら、「データ」ウィンドウを使用して、現在のコンテキストのローカル変数および引数を調べます。
ヒント: データ、監視または「スマート・データ」ウィンドウで「ソースへ移動」ポップアップ・メニュー・コマンドを使用している場合、「戻る」ボタンを使用することにより実行ポイントに戻ることができます。「ナビゲート」メニューを使用して「戻る」ボタンにアクセスすることもできます。 |
アプリケーションを一時停止するブレークポイントをキー・ポイント上に設定した後は、「データ」ウィンドウにデータを表示できます。WebページとADFモデル・レイヤーの対話を効率的にデバッグするには、次のことを理解する必要があります。
ADFページのライフサイクルと、起動されるメソッド・コール
アプリケーションの処理過程でADFモデル・レイヤーに含まれる必要のあるローカル変数および引数
Oracle ADFの処理を理解しておくことは、ブレークポイントを選択的に設定し、アプリケーションによりロードされたデータを調べ、エラーの要因を特定するための手がかりとなります。
注意: JSF Webページでは、ページのコンポーネントとデータの間の対話を管理するためにバッキングBeanを使用している場合もあります。他のJavaクラス・ファイルと同様に、ブレークポイントを設定してバッキングBeanをデバッグします。 |
ADFソース・ライブラリをプロジェクトに追加すると、ソース・エディタで使用可能になる有用なQuick JavaDoc機能([Ctrl]+[D])([Ctrl]+[D])にアクセスできるようになります。図31-47に、findSessionCookie()
などのメソッドのためのQuick Javadoc機能を示します。
ADFソース・コードをロードした後、Javaコードと同じ方法で、現在のプロジェクトに対するOracle ADFコードをデバッグできます。つまり、[Ctrl]+[-]キーを押してOracle ADFで任意のクラス名を入力すると、JDeveloperによってそのソース・ファイルが自動的に開かれるため、必要に応じてブレークポイントを設定できます。
Oracle ADFソース・コードをデバッグする際、デフォルトでは現在実行中のメソッドのパラメータまたはメンバー変数の記号情報は表示されません。
たとえば、ADFソース・コード・デバッグ・ライブラリのないデバッグ・セッションでは、図31-48に示すように、「_slot」など認識できない名前があることがあります。
これらの名前はわかりにくいため、デバッグが困難になります。開発環境でデバッグする場合、ソースとともに提供されるADF JARファイルのデバッグ・バージョンを使用することにより、デバッグを容易にできます。
注意: 通常、提供されたデバッグ・ライブラリは、JDeveloperに同梱されている最適化されたJARファイルに比べ、実行時パフォーマンスがわずかに劣るため、テスト環境または本番環境では使用しないでください。 |
デバッグ・ライブラリJARは、デバッグ情報を追加してコンパイルされたバージョンのOracle ADF JARファイルです。デフォルトの最適化されたJARファイルでなく、これらのデバッグ用JARを使用すると、デバッガにすべての情報が表示されます。たとえば、図31-49
に示すように、変数evidの名前が、デバッガで確認できるようになります。
標準ライブラリJARを置き換える前に、JDeveloperが実行中でないことを確認します。JDeveloperが実行中の場合、先に進む前にJDeveloperを終了します。
標準ライブラリJARをデバッグ・ライブラリJARに置き換えるには:
JDeveloperを終了した状態で、JDeveloperインストール先の./BC4J/lib
ディレクトリで、既存の最適化されたJARファイルすべてのbackup
サブディレクトリを作成します。たとえば、jdev11
をJDeveloperのホーム・ディレクトリとすると、次のようになります。
C:\jdev11\BC4J\lib> mkdir backup C:\jdev11\BC4J\lib> copy *.jar backup
デバッグ時にデバッグ記号を使用する各ADFライブラリに対して、C:\jdev11\BC4J\lib
ディレクトリで対応する既存のライブラリに、一致するライブラリの_g.jar
バージョンをコピーします。
これは、手順2で最適化されたJARファイルのバックアップをbackup
ディレクトリに作成してあるため安全です。
通常、デバッグ・ライブラリはデバッグ情報なしでコンパイルされたライブラリよりも実行速度が劣るため、この診断メッセージは実行タイミングでデバッグ・ライブラリを使用しないように注意を促すものです。
************************************************************************** *** WARNING: Oracle BC4J debug build executing - do not use for timing *** **************************************************************************
最適化されたライブラリに戻すには、該当するJARファイルを./BC4J/lib/backup
ディレクトリから./BC4J/lib
ディレクトリにコピーして戻します。
最初に、様々なJavaコード・ブレークポイントとそれを作成する場所を理解する必要があります。
デバッガの「ブレークポイント」ウィンドウを表示するには、メイン・メニューで「表示」→「ブレークポイント」を選択します(または[Ctrl]、[Shift]、[R]を同時に押します)。
「ブレークポイント」ウィンドウで、ポップアップ・メニューから「ブレークポイントの作成」を選択することで、新規のJavaコード・ブレークポイントを作成できます。表31-10に示すように、「ブレークポイント型」ドロップダウン・リストでは、作成するブレークポイントの種類をコントロールします。
注意: 「ブレークポイントの作成」ダイアログを使用して、ADFライフサイクル・フェーズ宣言ブレークポイントを作成することもできます。ADF宣言ブレークポイントの作成の詳細は、31.8.5項「ADFライフサイクル・フェーズ・ブレークポイントの設定方法および使用方法」を参照してください。 |
表31-10 様々な型のJavaブレークポイント
ブレークポイント型 | ブレークポイントが発生する条件 | 使用方法 |
---|---|---|
例外 |
このクラス(またはサブクラス)の例外がスローされる場合。 |
例外ブレークポイントは、例外がどこで発生するかわからないが、例外の種類(たとえば、 |
ソース |
特定のパッケージで特定クラスの特定ソース行を実行する場合。 |
「ブレークポイントの作成」ダイアログでソース・ブレークポイントを作成することはほとんどありません。「ナビゲート」→「Javaタイプに移動」メニュー([Ctrl]を押しながら[-]を押す)を使用した後、必要な行番号までスクロールしてから(または「ナビゲート」→「指定行に移動」([Ctrl]を押しながら[G]を押す))、ブレークする行の左のブレークポイント余白をクリックする方法が簡単なためです。これは、新規のソース・ブレークポイントの作成と同じですが、パッケージ、クラスおよび行番号を手入力する必要がありません。 |
メソッド |
指定されたクラスのメソッドが起動する場合。 |
メソッド・ブレークポイントは、問題のデバッグ中にコール・スタックで表示される、特定のメソッドにブレークポイントを設定するのに便利です。ソース・ブレークポイントを設定できるソースがそのクラスにある場合でも、この種のブレークポイントでは、クラスに対するソースがない場合もデバッガで停止します。 |
クラス |
指定されたクラスのメソッドのいずれかが起動する場合。 |
クラス・ブレークポイントは、問題に関連するクラスのみが判明している場合に使用できますが、停止のための厳密なメソッドではありません。この種のブレークポイントはソースを必要としません。「参照」ボタンにより、ブレークするクラスの完全修飾名を迅速に検索できます。 |
監視ポイント |
指定されたフィールドがアクセスまたは変更される場合。 |
監視ポイント・ブレークポイントは、クラス内部のコードが複数の異なる場所からメンバー・フィールドを直接変更する場合の問題の検出に使用できます。任意のフィールドが変更される際にデバッガを一時停止できます。クラスのソースのメンバー・フィールドを指し示し、ポップアップ・メニューから「監視ポイントの設定」メニュー項目を使用すると、このタイプのブレークポイントを作成できます。 |
Javaコード・ブレークポイントの作成後は、ブレークポイントを右クリックして、ポップアップ・メニューから「編集」を選択すると、「ブレークポイント」ウィンドウでブレークポイントを編集できます。
注意: 「ブレークポイントの編集」ダイアログを使用して、ADF宣言ブレークポイントを編集することができます。ただし、他の一部の情報、たとえば「定義」タブの情報などは編集できません。「ブレークポイント」ウィンドウで、ポップアップ・メニューから「編集」を選択することで、「ブレークポイントの編集」ダイアログを起動することができます。ADF宣言ブレークポイントの作成の詳細は、31.8項「ADF宣言ブレークポイントの設定」を参照してください。 |
ブレークポイントの編集で使用できる機能は次のとおりです。
このブレークポイントをグループ化する、論理ブレークポイント・グループ名を、同じグループ名の他のグループに関連付けます。ブレークポイント・グループは、1つの操作でブレークポイントのセット全体を簡単に有効化または無効化できます。
ブレークポイントをヒットしたときに、デバッガ・アクションをブレークポイントに関連付けます。デフォルト・アクションでは、アプリケーションの状態を調査できるようにデバッガを停止しますが、警告音の追加、ログ・ファイルへの情報の書込み、ブレークポイントのグループの有効化または無効化も可能です。
条件が合う場合にのみデバッガを停止するよう、条件式をブレークポイントに関連付けます。次のように、ほとんどすべてのブール式が可能です。
expr
==
value
expr
.equals("
value
")
expr
instanceof.
fully.qualified.ClassName
注意: デバッガの「監視」ウィンドウを使用して、まず式を評価してその式が有効であるか確認します。 |
デバッガを使用して、あらゆるクラスに対して、デバッガ・ウィンドウに表示されるメンバーをフィルタすることができます。デバッガの「データ」ウィンドウで任意の項目を選択し、ポップアップ・メニューから「プリファレンス」を選択すると、デバッガに表示されるメンバーと表示されないメンバー(場合によっては重要)をカスタマイズできるダイアログが表示されます。クラス・タイプを基準にフィルタすることで、デバッガの「データ」ウィンドウで必要になるスクロールの量を減らすことができます。これは特に、クラスのメンバーの少数のみに関連する場合に役立ちます。
Oracle ADFソース・コードをロードした場合、表31-11にリストされているブレークポイントを使用してアプリケーションをデバッグできます。
これらのブレークポイントをヒットした際に「スタック」ウィンドウを参照してソースを確認することで、現状をよりよく把握することができます。
表31-11 よく使用されるADFブレークポイント
ブレークポイント | ブレークポイント型 | 使用方法 |
---|---|---|
|
例外 |
このブレークポイントは、すべてのADFビジネス・コンポーネントの実行時例外のベース・クラス上にブレークポイントを設定するために便利です。 |
|
例外 |
これは、トリガーまたは制約違反によって発生する例外が原因で失敗したDML操作など、データベースから生じる例外のベース・クラスです。 |
|
メソッド |
同じデバッグ機能を、ページ定義アクション・バインディング上にADF宣言ブレークポイントを設定することによって実行することもできます。31.8.3項「ページ定義アクション・バインディング・ブレークポイントの設定方法および使用方法」を参照してください。 このJavaブレークポイントの方を使用する場合、 これは、任意のADFアクション・バインディングの起動時に実行されるメソッドです。関連する場合、ロジックに踏み込んでパラメータを確認できます。 |
|
メソッド |
これはビュー・オブジェクトがSQL問合せを実行する際にコールされるメソッドです。 |
|
メソッド |
これは任意のビュー行属性が設定される際にコールされるメソッドです。 |
|
メソッド |
同じデバッグ機能を、ページ定義属性値バインディング上にADF宣言ブレークポイントを設定することによって実行することもできます。第31.8.4項「ページ定義値バインディング・ブレークポイントの設定方法および使用方法」を参照してください。 これは任意のエンティティ・オブジェクト属性が設定される際にコールされるメソッドです。 |
ビジネス・サービスのテストは、アプリケーション開発プロセスの重要な部分です。アプリケーション・モジュールで提供される機能を実行する一連のJUnit回帰テストを作成することで、新機能、バグ修正またはリファクタ実行のためにアプリケーションが不安定にならないことを確認できます。JDeveloperにはJUnit回帰テストの作成に対する統合サポートがあり、アプリケーションのテストを簡単に実行できます。JUnitテストの実行に関する統合サポートでは、チームの開発者であれば、マウスを1回クリックするだけでテスト・スイートを実行できます。すべてのチーム・メンバーがシステムの自らの変更箇所を確認するためにテストを実行する機会が増加します。また、Apache Antビルド・スクリプトを作成および実行するためにJDeveloperの統合サポートを使用すると、テストの実行を自動ビルド・プロセスに簡単に組み込むこともできます。アプリケーション・モジュールのJUnitテストの作成、実行、およびAntビルド・スクリプトへの統合を行うことができます。
JDeveloperでは、JUnitテスト・ケース、テスト・フィクスチャ、およびテスト・スイートを生成できます。テスト・ケースを作成し、単一または複数のJavaクラスを含む個別のJavaファイルをテストすることができます。JUnitテスト・ケースによって再利用されるJUnitテスト・フィクスチャを作成できます。これらのすべてのテスト・ケースは、JUnitテスト・スイートにグループ化し、ユニットとして一括して実行できます。
アプリケーション・モジュールがプロジェクトにあるときは、JUnit BC4Jテスト・スイート・ウィザードを使用してテスト・スイートを作成することもできます。ウィザードでは、アプリケーション・モジュールの各ビュー・オブジェクトについてテスト・スイート、テスト・フィクスチャおよびテスト・ケースが生成されます。
回帰テストを含む個別のプロジェクトを作成するか、テスト・ファイルを既存のプロジェクトに統合することもできます。ADFビジネス・コンポーネント・テストを作成している場合は、テスト用に別のプロジェクトを作成する必要があります。
テスト用のプロジェクトを別個に作成することには、次の利点があります。
JUnitに依存せずにベース・プロジェクトを編集できる
テスト・クラスを除外せずに、ベース・プロジェクトをデプロイメント用にパッケージ化できる
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つ以上のassert
Xxx
()
メソッドをコールして、特定の式の予測結果がどのようになる必要があるかをアサートします。テスト・スイートを実行する際、任意のテスト・ケースの任意のテストに失敗したアサーションが含まれる場合、「JUnitテスト・ランナー」ウィンドウに失敗したテストが赤の失敗アイコンとともに表示されます。
JUnitテスト生成ウィザードによってデータ・モデルの各ビュー・オブジェクト・インスタンスに対してスケルトン・テスト・ケース・クラスが生成され、それぞれのクラスにはtestAccess()
という名前の1つのテスト・メソッドが含まれます。このメソッドには、ビュー・オブジェクト・インスタンスが存在することをテストするassertNotNull()
メソッドへのコールが含まれます。
// In ViewInstanceNameTest.java test case class public void testSomeMeaningfulName() { // test assertions here }
生成されたテスト・ケースそれぞれに、そのテスト・ケース実行の一部としてJUnitフレームワークが実行する1つ以上のテスト・メソッドを含めることができます。接頭辞test
で始まる名前を持つクラスでpublic voidメソッドを作成するか、注釈@Test
を使用するだけで、テストをテスト・ケースに追加できます。
JUnitを利用可能にし、メニュー・システムに表示されるようにするには、JDeveloperに拡張機能としてロードする必要があります。
JUnit拡張機能をロードするには:
メイン・メニューで、「ヘルプ」→「更新の確認」を選択します。
「更新の確認」ダイアログの「ソース」ページで、「更新センターの検索」と「Oracleの公式拡張機能と更新」を選択し、「次へ」をクリックします。
JUnit zipファイルがある場合、またはJUnitの選択が「可能な更新」リストに表示されない場合は、「ローカル・ファイルからインストール」を選択してJUnit zipファイルをロードします。
「更新」ページで、図31-50に示すように、「JUnit統合」を選択し、「次へ」をクリックします。
「ライセンス契約」ページで、「同意します」、「終了」の順にクリックします。
JUnitテスト・ケースを作成する前に、テストされるプロジェクトの作成を完了している必要があります。
JUnitテスト・ケースを作成するには:
アプリケーション・ナビゲータで、テスト・ケースを作成するプロジェクトを右クリックして、「新規」を選択します。
「新規ギャラリ」で、「一般」を展開し、「ユニット・テスト (JUnit)」、続いて「テスト・ケース」を選択し、「OK」をクリックします。
「テスト・ケースの作成」ダイアログの「テストするクラスの選択」ページで、「テスト中のクラス」に入力するか、「参照」をクリックします。
「クラス・ブラウザ」ダイアログで、テストするクラスを確認します。または、「クラス名を一致」フィールドに最初の文字を入力します。「一致するクラス」リストは識別しやすいようにフィルタ処理されます。
たとえば、FOD
と入力すると、図31-51に示すように、リストが3つの項目にまでフィルタされます。
クラスを選択し、「OK」をクリックして、ダイアログを閉じます。「次へ」をクリックします。
テストする個別のメソッドを選択し、「次へ」をクリックします。
たとえば、図31-52では、チェックされた4つのメソッドがテストされます。
「テスト・ケース・クラスの設定」ダイアログで、テスト・ケース、パッケージ、その拡張対象のクラスの名前を入力し、JUnitでスタブが作成される組込み機能のリストを選択します。「次へ」をクリックします。
たとえば、図31-53では、JUnitは、oracle.fodemo.customization
パッケージに、FodCompanyCustomizationLayerTest
テスト・ケースのためのsetUp()
メソッドのスタブを作成します。
「テスト・フィクスチャの選択」ページで、テスト・ケースに追加するテスト・フィクスチャを選択するか、「参照」をクリックします。
テスト・ケースに追加するテスト・フィクスチャがすべてリスト中で選択されていることを確認し、「終了」をクリックします。
クラスまたはメソッドに対して複数のテストが必要な場合、JUnitテスト・フィクスチャを作成することをお薦めします。JUnitテキスト・フィクスチャを使用すると、テストを初期化するために必要なテスト・コードの重複作成を防止することができます。
JUnitテスト・フィクスチャを作成するには:
アプリケーション・ナビゲータで、テスト・フィクスチャを作成するプロジェクトを右クリックして、「新規」を選択します。
「新規ギャラリ」で、「一般」を展開し、「ユニット・テスト (JUnit)」、続いて「テスト・フィクスチャ」を選択し、「OK」をクリックします。
「テスト・フィクスチャの作成」ダイアログで、テスト・フィクスチャの名前、パッケージ、およびその拡張対象のクラスを入力します。
「OK」をクリックします。
JUnitテスト・スイートを作成する前に、テスト・スイートに追加できるJUnitテスト・ケースの作成を完了しておくことをお薦めします。
JUnitテスト・スイートを作成するには:
アプリケーション・ナビゲータで、テスト・スイートを作成するプロジェクトを右クリックして、「新規」を選択します。
「新規ギャラリ」で、「一般」を開き、「ユニット・テスト」、続いて「テスト・スイート」を選択し、「OK」をクリックします。
「テスト・スイートの作成」ダイアログの「テスト・スイート・クラスの設定」ページで、テスト・スイート、パッケージ、およびその拡張対象のクラスの名前を入力します。「次へ」をクリックします。
たとえば、図31-54では、java.lang.Object
クラスを拡張するAllTests
テスト・スイートが作成されます。
「テスト・スイートの作成」ダイアログの「テスト・ケースの選択」ページで、テスト・スイートに組み込むすべてのテスト・ケースが選択されていることを確認します。作成したテストケースは、リストに移入されます。組み込まないテスト・ケースがあれば、その選択を解除します。「終了」をクリックします。
たとえば、図31-55では、テスト・スイートに入れるために両方のテストケースが選択されています。
作成されるテキスト・フィクスチャは、接続数を減らすシングルトン・クラスです。各テスト・ケースで接続または切断する場合は、JUnit 4の注釈、@Before
および@After
を使用してテスト・ケースをカスタマイズします。
JUnit BC4Jテスト・スイート・ウィザードでは、アプリケーション・モジュールの各ビュー・オブジェクトに対してテストが生成されます。アプリケーション・モジュールがメソッドをエクスポートしていない場合、ウィザードによって、アプリケーション・モジュールそのもののテストも生成されます。生成されるビュー・オブジェクト・クラスの形式はview_object
VOTest.java
です。パッケージにはpackage
.view
.viewobject
VO
という形式で配置されます。このときpackage
はアプリケーション・モジュール・パッケージです。生成されるアプリケーション・モジュール・テストの形式はapplication_module
AMTest.java
です。パッケージにはpackage
.applicationModule
という形式で配置されます。生成されるテスト・フィクスチャ・クラスの形式はapplicationmodule
AMFixture.java
です。アプリケーション・モジュール・テストと同じパッケージに配置されます。
生成されるすべてのテスト・スイート・クラスの形式はAll
applicationmodule
Test.java
です。アプリケーション・モジュールのパッケージ名と同じ名前でパッケージに配置されます。
各アプリケーション・モジュールまたはビュー・オブジェクト・テストについてテスト・ケースのXMLファイルも生成されます。このXMLファイルには、アプリケーション・モジュールまたはビュー・オブジェクト・テスト・ケースで定義されているテスト・メソッドが含まれます。重複が多くなりすぎる可能性があるため、ベース・クラス(ある場合)のテスト・メソッドは含まれません。
たとえば、パッケージStoreAPack
のビュー・オブジェクトEmployees1View1
およびEmployees1View2
を含むアプリケーション・モジュールStoreAAppModule
に対してテスト・スイートを作成した場合、アプリケーション・ナビゲータに図31-19のようなテスト階層が表示されます。
始める前に:
プロジェクトでアプリケーション・モジュールを作成します。
ビジネス・コンポーネント・テスト・スイートを作成するには:
メイン・メニューから、「ファイル」を選択し、「新規」を選択します。
ビジネス・コンポーネント・テスト用に別のプロジェクトを作成します。
「新規ギャラリ」で、「一般」を展開し、「プロジェクト」、「Javaプロジェクト」の順に選択して、「OK」をクリックします。
Javaプロジェクトの作成ウィザードの「プロジェクト名」ページで、テスト・プロジェクトの名前とディレクトリ・パスを入力し、「次へ」をクリックします。
プロジェクトのJava設定ページで、パッケージ名、プロジェクトのJavaソース・コードのディレクトリ、および出力クラス・ファイルが配置される出力ディレクトリを入力し、「終了」をクリックします。
アプリケーション・ナビゲータで、テストするアプリケーション・モジュールをダブルクリックします。
概要エディタで「Java」ナビゲーション・タブをクリックし、「Javaクラス」セクションの「編集」アイコンをクリックします。
「Javaオプションの選択」ダイアログで「アプリケーション・モジュール・クラスの生成」を選択して、「OK」をクリックします。
概要エディタの「Java」ページで、「クラス・インタフェース」セクションの「編集」アイコンをクリックします。
「クライアント・インタフェースの編集」ダイアログで、テストするメソッドを「選択済」ペインに移動して、「OK」をクリックします。
アプリケーション・ナビゲータで、作成したテスト・プロジェクトを右クリックして「新規」を選択します。
「新規ギャラリ」で、「一般」を展開し、「ユニット・テスト」、「ビジネス・コンポーネントのテスト・スイート」の順に選択して、「OK」をクリックします。
JUnit BC4Jテスト・スイート・ウィザードの「テストの構成」ページで次の値を選択し、「次へ」をクリックします。
ビジネス・コンポーネント・プロジェクト: テストするアプリケーション・モジュールを含むプロジェクトを選択します。
アプリケーション・モジュール: テストするアプリケーション・モジュールを選択します。
構成: ローカル・アプリケーション・モジュールまたは共有アプリケーション・モジュールを選択します。
「ベース・クラスのテスト」→「アプリケーション・モジュール拡張」: 様々なベース・クラスを指定できます。生成されるテスト・ケース・クラスはそのベース・クラスから拡張されます。このとき、ベース・クラスのすべてのpublic抽象メソッドの本体は単純なデフォルトの実装になります。
「ベース・クラスのテスト」→「ビュー・オブジェクト拡張」: ビュー・オブジェクトが拡張するクラスを指定できます。生成されるテスト・ケース・クラスはそのベース・クラスから拡張されます。このとき、ベース・クラスのすべてのpublic抽象メソッドの本体は単純なデフォルトの実装になります。
「サマリー」ページで選択内容を確認して、「終了」をクリックします。
ビジネス・コンポーネントのテスト・スイートを作成すると、ビジネス・コンポーネントのテスト・フィクスチャも一緒に作成されます。また、ビジネス・コンポーネントのテスト・フィクスチャを個別に作成することもできます。
生成されるテスト・フィクスチャ・クラスの形式はapplicationmodule
AMFixture.java
です。形式がpackage
.applicationModule
のパッケージに収められます。このとき、package
はアプリケーション・モジュール・パッケージです。
始める前に:
プロジェクトでアプリケーション・モジュールを作成します。
ビジネス・コンポーネント・テスト・フィクスチャを作成するには:
メイン・メニューから、「ファイル」を選択し、「新規」を選択します。
ビジネス・コンポーネント・テスト用に別のプロジェクトを作成します。
「新規ギャラリ」で、「一般」を展開し、「プロジェクト」、「Javaプロジェクト」の順に選択して、「OK」をクリックします。
Javaプロジェクトの作成ダイアログの「プロジェクト名」ページで、テスト・プロジェクトの名前とディレクトリ・パスを入力し、「次へ」をクリックします。
プロジェクトのJava設定ページで、パッケージ名、ソース・ディレクトリおよび出力ディレクトリを入力し、「終了」をクリックします。
アプリケーション・ナビゲータで、テストするアプリケーション・モジュールをダブルクリックします。
概要エディタで、「Java」ナビゲーション・タブをクリックします。
概要エディタの「Java」ページで、「Javaクラス」セクションの「編集」アイコンをクリックします。
「Javaオプションの選択」ダイアログで「アプリケーション・モジュール・クラスの生成」を選択して、「OK」をクリックします。
概要エディタで、「クラス・インタフェース」セクションの「編集」アイコンをクリックします。
「クライアント・インタフェースの編集」ダイアログで、テストするメソッドを「選択済」ペインに移動して、「OK」をクリックします。
アプリケーション・ナビゲータで、作成したテスト・プロジェクトを右クリックして「新規」を選択します。
「新規ギャラリ」で、「一般」を展開し、「ユニット・テスト」、「ビジネス・コンポーネントのテスト・フィクスチャ」の順に選択して、「OK」をクリックします。
JUnit BC4Jテスト・フィクスチャ・ウィザードの「テストの構成」ページで次の値を選択し、「次へ」をクリックします。
ビジネス・コンポーネント・プロジェクト: テストするアプリケーション・モジュールを含むプロジェクトを選択します。
アプリケーション・モジュール: テストするアプリケーション・モジュールを選択します。
構成: ローカル・アプリケーション・モジュールまたは共有アプリケーション・モジュールを選択します。
「サマリー」ページでテスト・フィクスチャ・クラスを確認して、「終了」をクリックします。
ApacheAntは、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を選択します。