Sunの Java Pet Store Demoの最初のリリースは、画期的なものでした。 当時は現実に即したJ2EEアプリケーションの実装に関するガイダンスが不足しており、開発者は、まるで砂漠でオアシスを見つけたように、このアプリケーションのコードに飛びつきました。 しかし、ルーチンの奥深い部分を探ってみると、このサンプル・アプリケーションにおいて、アプリケーションのインフラストラクチャ ・コードが大半を占めているのはなぜなのか、疑問に感じる人が多かったのも事実です。 J2EEデザインパターンの実装の繰り返しによって、より興味深いWebストアのビジネス機能の部分がわかりにくくなっていたのです。
さらに分析すると、開発者にとって1つのポイントが明確になってきました。つまり、独自の アプリケーションを作成する場合には、開発者が同じようなデザイン・パターンを再実装 する必要があるということです。 この事実から、フレームワークのアプローチを使用することは「共通認識」のようになっていましたが、実際、開発者は独自にアプリケーションを構築するか、または既存のものを利用するかを決定する必要がありました。 より詳細な情報を利用して決定を行うために、開発者の中には Core J2EE Patterns: Best Practices and Design Strategies (翻訳版:J2EEパターン)などのガイドを読まれた方もいることでしょう。このガイドには、デザインパターン名が機能階層ごとに分類して記載されており、一般的なJ2EEアプリケーションで 15の主なパターンを使用する方法についても説明しています。 他にも、便利なポスターが付いた EJB Design Patterns: Advanced Patterns, Processes, and Idioms (翻訳版:EJBデザインパターン)は、21個のデザインパターンのヒントを詳しく説明しており、簡単に参照することができます。 これらのガイド、およびその他の情報では、これらのすべてのパターンのコーディングをゼロから効率よく行なうには多大な労力を必要とすると明言しています。
それを知りながら、多くの開発者は、最初のJ2EEアプリケーションのプロジェクトにおいては「Do-It-Yourself(自分で作成する)」アプローチを常に選択しています。 しかし、多くの開発者は、その後1年経過しても、完全な機能を備えた優れたパフォーマンスのアプリケーションを提供すべく、努力している最中にとどまっています。
『Expert One-on-One: J2EE Design and Development (翻訳版:実践J2EEシステムデザイン)』の最初のページで、Rod Johnson氏は、こうした状況について次のように所見を述べています。
多くのJ2EEプロジェクトにおけるROI(投資回収率)は、期待に反した結果に終わっています。 提供されたシステムはスピードが遅すぎて、あまりにも複雑です。 開発期間と複雑なビジネス要件のバランスがとれないことがよくあります。
それはJ2EEのデメリットというよりも、J2EEが不適切に使用されることが多いためです。 これは、現実の問題を無視したアーキテクチャと開発に対するアプローチが原因となっていることが通常です。 主な要因は、実際にJ2EEを使用しているユーザーが直面した問題よりも、J2EEの仕様におけるJ2EEのパブリケーションの方が重視されていることです。 実際のアプリケーションで発生している多くの問題は、単純に無視されています。
この書籍全体を通して、Rod氏はJ2EEの開発に関する多くの俗説を正しており、どのような状況でどのようなJ2EEテクノロジを使用するかについて、プログラムのガイダンスを提供しています。 この本の166ページ以降、フレームワークについて、およびフレームワークが具体的にどのように役に立つかが説明されています。
一般的な問題(J2EEアプリケーション・サーバーで対処する範囲外のものも含めた問題)の多くは、オープン・ソースまたは市販のパッケージおよびフレームワークで解決されてきました。 これらのケースでは、独自のソリューションをデザインおよび実装しても無駄になることがあります。 既存のソリューションを採用すると、ビジネス要件に適合させるための努力が不要になります。
Rod氏は、「既存のフレームワークは、少し急な学習曲線を示す傾向がある」とコメントしたうえで、強力なアプリケーション・インフラストラクチャを得るために、なぜこのようなトレードオフに意味があるか(それでも時間をかけてフレームワークを学習する必要があるか)を理由付けています。 395ページで、彼はこの利点について次のように明確に述べています。
強力なインフラストラクチャを使用すると、よりすぐれたアプリケーションを短期間で実現できます。 これは、強力なインフラストラクチャによって次の目標を達成できるためです。
- アプリケーション・コードをビジネス・ロジックの実装に集中させることが可能になり、他のアプリケーション機能について懸念することがなくなる。 このため、開発努力が軽減され、製品化までの時間短縮、アプリケーション・コードの保守性向上によるプロジェクト・ライフサイクルを通じたコストの削減(保守が簡潔になり、問題の分野に重点的に焦点を当てられるようになるため)が実現されます。 これは究極の目標です。次の目標の多くはこの目標を達成するためのものです。
- Javaコードから構成を分離する。
- 一般的な妥協を行なう必要がなくなるため、OOデザインの使用を容易にする。
- それぞれの問題を1度解決すれば、コードの重複を排除できる。 複雑なAPIなどの問題に対してすぐれたソリューションを実現できれば、どのようなコンポーネントまたはクラスで問題が発生しても、常にそのソリューションを使用します。
- J2EE APIの複雑さを隠蔽する。 このことはJDBCですでに実現されており、抽象化のより高レベルの候補である他のAPIには、JNDIとEJBアクセスがあります。
- エラー処理を確実に対処する このことの重要性については、第9章でJDBCについて説明したときに確認しました。
- 必要に応じて容易に国際化を行なう。
- アーキテクチャの原理を保持したまま生産性を向上させる。 適切なインフラストラクチャを使用しないと、その場しのぎのソリューションを採用することによって、安易な方法を選択してしまい常に問題が起こります。 適切なインフラストラクチャを採用すれば、堅牢な設計原理に基づいたアプリケーションをスムーズに使用することができます。
- 組織のアプリケーション間で一貫性を実現する。 すべてのアプリケーションで、同じアプリケーション・サーバー、およびベースとなるテクノロジを使用するだけでなく、同じインフラストラクチャを使用している場合は、最大の生産性が得られ、チームワークが向上してリスクが軽減します。
- アプリケーションを簡単にテストできるようにする。 可能な場合は、アプリケーション・サーバー上に配置せずに、フレームワークでアプリケーション・コードをテストできるようにします。
既存のいくつかのアプリケーション・フレームワークには、Rod氏が推奨する強力なアプリケーション・インフラストラクチャについて、すぐに使用できる実装を提供しているものがあります。 これらの フレームワークを使用すれば、独自のインフラストラクチャ・コードをデザイン、コード化、デバッグ、および保守する必要はありません。
このホワイト・ペーパーでは、サンプル・アプリケーションで学習しながら、既存の2つのJ2EEフレームワークについて検証します。 従来のJava Pet Store Demoにならってサンプル・アプリケーションをパターン化することによって、読者がオリジナルのサンプル・アプリケーションについて理解しやすいようにして、フレームワークベースのJ2EE開発アプローチで実現される開発者の生産性を比較できるようにしています。
ADF ToyStoreのサンプル・アプリケーションは、モデル/ビュー/コントローラ(MVC)のデザインパターンに準拠した簡単なWebストアのアプリケーションです。 これは、既存の2つのJ2EEアプリケーション・フレームワーク、つまり Apache Strutsと Oracle Application Development Framework(ADF)を使用して実装されています。 StrutsとADFのフレームワークは両方とも、現実のアプリケーションを構築するアプリケーション開発者の要件をサポートするために、練り直されながら開発されてきました。 これらのフレームワークの設計および実装の多くの局面では、Rod Johnson氏がこの本を通じて述べているプログラムの推奨事項を繰り返しています。
ADF ToyStoreは、MVCスタイルのWebアプリケーションと同様に、 図1に示すような基本的なアーキテクチャを備えています。
モデル層は、アプリケーションの機能を表す1つ以上のビジネス・サービス から構成されており、簡単にテストできるビジネス・サービス・インタフェースを通じてモデル・データ にアクセスします。 次に、これらのビジネス・サービスは問合せコンポーネント を利用して対象のデータを取得し、ビジネス・オブジェクト を利用して、新しいデータまたは修正されたデータを検証および保持します。 Business Delegate(ビジネス・デリゲート)デザインパターンが実装されたコードによって、ビジネス・サービスの場所や用途の詳細は抽象化されます。 ビュー層としてJavaServer Pagesが使用されていて、コントローラ層と明確に分離されている場合、多くのJ2EEの本では、図1のようなアーキテクチャのことをベスト・プラクティスな「JSP Model 2」アーキテクチャと呼んでいます。 ここで「2」という数字が使われているのは、JSPに対するMVCベースのアーキテクチャが、初期のころのJSPベースのアプローチから発展した状態にあることの表れでもあります。
このドキュメントでは、全体として、フレームワークベースのADF ToyStoreサンプル・アプリケーションの実装を分析することによって、ADFがモデル層のすべての局面の構築をどのようにして簡潔にしているか、また、StrutsおよびADFフレームワークがどのように連携してビュー層とコントロール層の実装を簡潔にしているかについて、学習します。 また、その過程の中で、Oracle JDeveloper 10gが、この種のMVCスタイルのビジネス・アプリケーション構築のための完全な開発ライフサイクルをカバーする生産的な環境を提供していることを証明するいくつかの事実にも触れることができるでしょう。
サンプル・アプリケーションの解説に入る前に、それをJDeveloperで開き、実行できることを確認します。 次の項では、サンプル・アプリケーションを正しくセットアップするための手順について詳しく説明します。
ここでのインストラクションでは、 Oracle JDeveloper 10gのバージョン9.0.5を使用していると仮定しています。 これ以前のJDeveloperのバージョンでは、サンプル・アプリケーションは動作しません。
また、ユーザーはOracleデータベースに対するアクセス権、およびサンプル・データを設定するための新しいユーザー・アカウントを作成する権限を持っていることも前提としています。
| 注意 |
ADFはすべてのリレーショナル・データベースを操作できるよう設計されており、Oracle、Oracle Lite、DB2、およびSQL Serverでテストされています。ただし、サンプル・アプリケーションの説明を簡単にするために、このドキュメントではOracleデータベースのバージョン8.1.7以降を使用している前提で記述しています。 |
adftoystore.zipファイルをダウンロードします。
adftoystore.zipファイルの内容を適切なディレクトリへ解凍します。
これで、adftoystoreディレクトリ、およびサブディレクトリが作成されます。 この後の手順では、 adftoystore.zipファイルをルート・ディレクトリ
C:\に解凍したものとして記述します。つまり、サンプル・アプリケーションのルート・ディレクトリは C:\adftoystoreとなります。
提供されたSQLスクリプトを使用して、データベース内に
TOYSTOREおよび
TOYSTORE_STATEMGMTのユーザー・アカウントを作成します。
./adftoystore/DatabaseSetup/CreateToyStoreUsers.sqlを開き、一番最初の
CONN コマンドで指定されている
password と
tns の値を自分の環境に合う値に設定します。
CREATE USER コマンドで指定されている表領域(UsersおよびTemp)を適切に変更します。
./adftoystore/DatabaseSetup/CreateToyStoreUsers.sqlを実行します。
cd C:\adftoystore\DatabaseSetup
sqlplus /nolog @CreateToyStoreUsers.sql
スクリプトによって
TOYSTOREおよび
TOYSTORE_STATEMGMTのユーザー・アカウントが作成されます。次に、
GRANT EXECUTE ON DBMS_LOCK TO TOYSTOREを実行します。
TOYSTOREスキーマにはADF ToyStoreアプリケーション表が含まれていますが、
TOYSTORE_STATEMGMTスキーマは、Webページで保留中のデータを保存するためのADFステート管理機能で使用されます(これについては後述します)。
DBMS_LOCK.SLEEPパッケージのプロシージャは、
「ストアド・プロシージャへのアクセス例」で後述している、
LOCK_ALL_ITEMS_ORDERDEDストアド・プロシージャで使用されます。
ADF ToyStoreサンプル・アプリケーション用のアプリケーション表、およびいくつかのサンプル・データを作成します。
次のようにして、SQLスクリプト
./adftoystore/DatabaseSetup/ToyStore.sqlを実行します
(tns は、対象のデータベースを意味するTNS接続文字列 )。
sqlplus toystore/toystore@tns @ToyStore.sql
| 注意 | Oracle 10g
より前のバージョンのOracleデータベースを使用している場合は、このスクリプトの最後の
purge recyclebinでエラーが発生します。 このエラーは悪影響を及ぼさないため、無視してかまいません。
|
作成した2つのデータベース・アカウントに対応する2つのデータベース接続を、JDeveloperに設定します。
次の名前の接続をJDeveloperに定義します。
toystore。
TOYSTOREユーザー(パスワード
TOYSTORE)に対応するもの
toystore_statemgmt。
TOYSTORE_STATEMGMTユーザー(パスワード
TOYSTOREに対応するもの)
| 注意 | これらの2つの接続では 大文字/小文字が区別されるため、記載されているとおりに小文字で入力してください。 |
ここでの作業の簡略化のために、これらの2つの接続を、
./adftoystore/DatabaseSetupディレクトリの提供された
jdev_toystore_connections.xmlファイルからインポートできます。 JDeveloperの接続ナビゲータで
「データベース」フォルダを選択し、マウスを右クリックしてメニューで
「接続のインポート...」を選択します。 インポート元のファイル名として、
jdev_toystore_connections.xmlを指定します。 指定した2つの接続をインポートしたら、
接続ウィザードをダブルクリックして表示し、
「テスト」タブを選択して、それぞれの接続を選択してテストします。
「接続のテスト」ボタンをクリックしても「成功!」メッセージが表示されない場合は、
「接続」タブで接続を修正して、接続するデータベースに対して機能するように調整してください。 デフォルトでは、ポート1521でリスニングするローカル・マシン上のデータベースに対して、
ORCLのSIDで接続が定義されています。
JDeveloperに対してJUnit Extensionがインストールされていることを確認します。
JUnitは、Javaアプリケーションのリグレッション・テストを作成するためのデファクト・スタンダード・ツールです。 Oracle JDeveloper 10gはJUnitテストを作成および実行するためのサポート機能を備えていますが、この機能は、別途にダウンロードされる、ツールの拡張機能としてインストールされます。 JDeveloperのメイン・メニューから 「ファイル→新規...」を選択して、 「新規ギャラリ」の最上位の 「General」カテゴリの下位に 「Unit Tests (JUnit)」サブカテゴリがあることが確認できれば、JUnit Extentionがインストールされています。
JUnit Extensionがまだインストール
されていない場合は、
ここからダウンロードできます。 OTNの
JDeveloper Extension Exchangeでは、JDeveloperで使用できる他のさまざまな拡張機能が用意されています。 拡張機能のインストールを完了するには、JDeveloperを実行している場合は、一旦JDeveloperを終了します。 JDeveloperを実行していない 場合は、ダウンロードしたzipファイルの内容を、JDeveloperをインストールしたホーム・ディレクトリの
./jdev/lib/extサブディレクトリへ解凍します。 その後で、JDeveloperを再起動します。
これ以後に JUnit 関連の作業を行うと、JDeveloperをインストールしたディレクトリ以下に、
junit3.8.1サブディレクトリが見つかります。 このディレクトリは、「新規ギャラリ」の
「Unit Tests (JUnit)」カテゴリからJUnitウィザードを最初に実行したときに自動的に作成されます。もし、JUnitテストケースを自身で作成する予定がない(他の開発者によって作られたテストを実施するのみである)という場合にも、このディレクトリは必要になります。この場合、ダミーで、「新規ギャラリ」の
「Unit Tests (JUnit)」カテゴリにある「テスト・ケース」ウィザードを起動してください。ウィザードの最初のページが表示された時点で、
junit3.8.1サブディレクトリは作成されますので、ウィザードは「取消」してかまいません。
./adftoystore/ADFToyStore.jwsワークスペースをオープンします。
図2に示すように、
ToyStoreViewController.jprプロジェクトの
index.jspページを実行して、JDeveloper内でアプリケーションを実行します。
| 注意 |
index.jspは
ToyStoreViewControllerプロジェクトのプロジェクト・プロパティの
「実行」パネルで
「デフォルトの実行ターゲット」として構成されているため、このプロジェクトがアクティブでアプリケーションを実行できるようになっている場合は、IDEツールバーで「実行」アイコンをクリックするか、または
ToyStoreViewControllerプロジェクトをマウスで右クリックしたメニューで「実行」メニュー項目を選択するだけで済みます。
|
JDeveloperから
index.jspページを実行すると、JDeveloperに組み込まれているOracle Application Server Containers for J2EE(OC4J)サーバーが起動され、デフォルトのブラウザが開始されて、次のURLが要求されます。
http://yourmachine:8988/ADFToyStore/index.jsp
すべてが正しく機能すると、 図3に示すようなADF ToyStoreサンプル・アプリケーションのトップページが表示されます。
| 注意 | これらの手順に従ってもサンプル・アプリケーションのホームページが表示されない場合は、「 付録1」で、既知の問題およびトラブルシューティングのヒントを参照してください。 |
| 注意 |
JDeveloper に組込みのOracle Containers for J2EE(OC4J)インスタンスを使用してサンプル・アプリケーションについて調べた後で、外部のOC4Jインスタンスである、Oracle Application Server、Tomcat、またはサポートされている他のサーバーにサンプル・アプリケーションをインストールする場合は、「 アプリケーションの配置とパッケージングに関する考慮事項」を参照してください。 |
サンプル・アプリケーションがどのように作成されているか分析する前に、Webストア・アプリケーションの全体像を見てみましょう。
ADF ToyStoreは、おもちゃを販売するオンライン・ショップです。 販売する商品は、Accessories(アクセサリ)、Games(ゲーム)、Party Supplies(パーティ用品)、Toys(おもちゃ)、Models(モデル)の5つに分類されています。 ホームページから、ショップの商品を2つの方法で参照することができます。
リストに4つ以上の商品が含まれている場合は、同時にそのページが表示されます。 アイテム・リストの上部に表示される 「Next」または 「Previous」のリンクを使用して、該当する商品のすべてのリストを参照できます。
商品名をクリックすると、その商品の中で、他に購入できるもののリストが表示されます。 たとえば、 「Pinata」などの商品名をクリックすると、 図4に示されるように、購入できる様々な種類の人形(ピニャータ)のリストが表示されます。
商品の詳しい説明と画像を表示するには、商品名をクリックします。
ボタンが表示されている任意のページで、このボタンをクリックすると、商品を買い物かごへ追加することができます。
どの時点でも、
ボタンをクリックすると、買い物かごに入っている商品を確認することができます。ここでは、
図5に示されているように、選択した商品とその数量のページが示されます。
買い物かごの中の商品の数量を変更するには、その商品の
「Quantity」フィールドの値を上書きし、
ボタンをクリックして買い物かごの中身を再計算した値を確認します。 買い物かごから商品を削除するには、
ボタンをクリックするか、または商品の数量をゼロ(0)に変更します。
「Shopping Cart」ページで
ボタンをクリックすると、「Review Checkout」ページへ進みます。 このページで、買い物した内容を確認し、正しければ
ボタンを押して次へ進みます。
ToyStoreで登録ユーザーとしてサインインしていない場合は、支払の処理に進むために、この時点でサインインするよう要求されます。 サインインのページは、
図6のようになります。 ここで、ユーザー名
j2eeとパスワード
j2eeはすでに登録されているため、これらの資格証明を入力して処理を続行できます。
| 注意 |
新しいユーザーとして登録する場合は、 「Register as New User」リンクをクリックします。 詳細は、次の項を参照してください。 |
正常にサインインできたら、買い物の内容と支払の詳細を確認するページへ進みます。 ここでは、このサンプル・アプリケーションに実装されているアプリケーションの検証ロジックについて調べるために、次のことを実行してみてください。
USAの国で、不正な州の略称 ZAを入力
ボタンを押すと、
図7に示されるような、複数の検証エラーが表示されます。
CAなど、正しい州の略称を入力してエラーを修正し、16桁のクレジット・カード番号を再入力します。また、他の検証エラーの確認もできます。
ボタンをもう一度押すと、
図8に示されるように、修正が必要な残りの検証エラーが表示されます。
| 注意 |
このWebページで送信が行われると、データはベースとなるビジネス・オブジェクトへ自動的に渡され、宣言的に定義されたビジネス・ルール(つまり、コード記述の必要がない)を実行します。 これらのルールは、ADFのオプション機能として提供されているADF Business Componentsによって、通常の処理して実行され、すべてのユーザー・インタフェース・テクノロジと矛盾せずに機能します。 ADFでは、発行される最初のエラーを単純に表示せずに、すべての問題点を1回で修正できるよう、1つのラウンドトリップですべてのエラー・セットをユーザーに提示することができます。 |
これらの最終的な検証エラーを修正した後でもう一度送信すると、注文が確定され、最後に、注文番号が提示された「Thank You」ページが表示されます。 リンクされている注文番号をクリックすると、注文のサマリー・ページが表示されます。このページは、JSPページのかわりに、XML/XSLTベースのOracle XSQLページ・フレームワークを使用して実装されています。これは、ADFで、複数のビュー/レンダリング・テクノロジを自由に選択できることを示しています。
現在、Webストアに登録されているユーザーとしてログインしていない場合は、
ボタンをクリックすると、
図6に示すような「Sign In」ページが表示されます。 ここから、
「Register as a New User」リンクをクリックして新しいユーザーとして登録することができます。 このようにすると、必要な登録情報の詳細をすべて入力するためのフォームが表示されます。
このユーザー登録ページはアプリケーション内の独立したページになっており、ADFフレームワークによってビジネス・ルールがどのように実行されるかを簡単に見ることができます。 たとえば、フォームに次のように登録するとします。
このようにしてフォームを送信すると、 図9のように、登録に関するエラーが表示されます。
| 注意 |
ユーザー・アカウントを表すビジネス・オブジェクトは、バックグラウンドで次のことを実施しています:
|
登録されたユーザーとしてサイトにログインしている場合は、ツールバーに
アイコンが表示されます。 このアイコンをクリックすると、
図10に示すようなページが表示され、ここでアカウントの詳細を編集できます。 また、この「Update Account」フォームでは、ユーザー・アカウントを表すベースとなる同じビジネス・オブジェクトで作業をしているため、前述のものと同じ検証を実行できます。
このサンプル・アプリケーションは、StrutsおよびADF Business Componentsでサポートされている国際化機能を使用して構築されており、英語(デフォルト)、イタリア語、およびドイツ語の3つの言語をサポートしてリリースされています。
| 注意 |
もちろん、すべてのメッセージは日本語へ翻訳可能です。翻訳のためにどのファイルに手を加えればよいかについては、サンプル・アプリケーションの分析のセクションで説明しています。 |
StrutsおよびADFのフレームワークは、ブラウザの設定に基づいて、対象の言語を自動的に認識します。 そのため、ユーザーはブラウザ言語の環境を適切に設定するだけで、イタリア語などでサンプル・アプリケーションを表示できます。
Internet Explorerでは、 図11に示すように、 「ツール→インターネット・オプション...」ダイアログの 「全般」タブで 「言語...」ボタンをクリックして、対象の言語を選択します。 「上へ」を押して、アプリケーションで選択したい言語を先頭に位置付けます。
Apache Strutsはサーブレットのセッション・レベルでブラウザのユーザー言語を取得するため、サンプル・アプリケーションの言語をイタリア語に変更して表示する前に、ブラウザのウィンドウを一度閉じて、もう一度開く必要があります。 サンプル・アプリケーションの正しいURLでブラウザを起動する簡単な方法は、 図12に示すように、JDeveloperのログ・ウィンドウでターゲットURLを見つけてそれをクリックします。
これにより、ADF ToyStoreのサンプル・アプリケーションがイタリア語で表示されます。 同じ商品を買い物かごにもう一度追加すると、 図13のように表示されます。
ブラウザの言語を英語に戻すには、同じ手順を使用し、ブラウザ・ウィンドウを一度閉じて再起動します。
サンプル・アプリケーションのクイック・ツアーの最後に、ADF Business Componentsに対するステート管理とフェイルオーバー・サポートの例の一部分を説明します。 このような用語を聞くだけで、複雑な機能のように見えますが、サンプル・アプリケーションで試すのは簡単です。 JDeveloper の一部である埋込みOC4Jコンテナ内で実行されているADF ToyStoreアプリケーションで、次のようにします。
アプリケーション・サーバーを再起動すると(この例では、埋込みOC4JサーバーがJDeveloperで再起動されます)、前述の手順2のブラウザ・ウィンドウで、処理が中断された時点のすべての商品をそのままの状態で処理を続行できます。
このフェイルオーバー機能は、ADF Business Componentsを使用している場合、アプリケーションで保留中のデータに対して自動的なデータベース・バックアップのステート管理を提供することによって作用します。 ToyStoreアプリケーションでは、一般的なWebアプリケーションで使用しているような、保留中の買い物かごの情報をHTTPセッションへ保存するという手法を使用していません。かわりに、 ShoppingCartコンポーネントの定義情報として、このコンポーネントの保留中のデータを管理することを指定するチェックボックスをチェックします。 これだけで、ADFフレームワークは残りの処理を実施してくれます。