ADF ToyStore
- 1: サンプル・アプリケーションの設定と概要 -

  | 目次に戻る | 次へ進む

はじめに

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ページで、彼はこの利点について次のように明確に述べています。

強力なインフラストラクチャを使用すると、よりすぐれたアプリケーションを短期間で実現できます。 これは、強力なインフラストラクチャによって次の目標を達成できるためです。

既存のいくつかのアプリケーション・フレームワークには、Rod氏が推奨する強力なアプリケーション・インフラストラクチャについて、すぐに使用できる実装を提供しているものがあります。 これらの フレームワークを使用すれば、独自のインフラストラクチャ・コードをデザイン、コード化、デバッグ、および保守する必要はありません。

このホワイト・ペーパーでは、サンプル・アプリケーションで学習しながら、既存の2つのJ2EEフレームワークについて検証します。 従来のJava Pet Store Demoにならってサンプル・アプリケーションをパターン化することによって、読者がオリジナルのサンプル・アプリケーションについて理解しやすいようにして、フレームワークベースのJ2EE開発アプローチで実現される開発者の生産性を比較できるようにしています。


StrutsとADFを使用したWebストアの再構築

ADF ToyStoreのサンプル・アプリケーションは、モデル/ビュー/コントローラ(MVC)のデザインパターンに準拠した簡単なWebストアのアプリケーションです。 これは、既存の2つのJ2EEアプリケーション・フレームワーク、つまり Apache StrutsOracle 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ベースのアプローチから発展した状態にあることの表れでもあります。

ベスト・プラクティス「JSP Model 2」MVC Webアプリケーション・アーキテクチャ
図1: ベスト・プラクティス「JSP Model 2」MVC Webアプリケーション・アーキテクチャ

このドキュメントでは、全体として、フレームワークベースの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以降を使用している前提で記述しています。


  1. ダウンロードしていない場合は、 adftoystore.zipファイルをダウンロードします。
  2. adftoystore.zipファイルの内容を適切なディレクトリへ解凍します。
    これで、adftoystoreディレクトリ、およびサブディレクトリが作成されます。 この後の手順では、 adftoystore.zipファイルをルート・ディレクトリ C:\に解凍したものとして記述します。つまり、サンプル・アプリケーションのルート・ディレクトリは C:\adftoystoreとなります。

  3. 提供されたSQLスクリプトを使用して、データベース内に TOYSTOREおよび TOYSTORE_STATEMGMTのユーザー・アカウントを作成します。

  4. ADF ToyStoreサンプル・アプリケーション用のアプリケーション表、およびいくつかのサンプル・データを作成します。
    次のようにして、SQLスクリプト ./adftoystore/DatabaseSetup/ToyStore.sqlを実行します (tns は、対象のデータベースを意味するTNS接続文字列 )。

    sqlplus toystore/toystore@tns @ToyStore.sql
    注意 Oracle 10g より前のバージョンのOracleデータベースを使用している場合は、このスクリプトの最後の purge recyclebinでエラーが発生します。 このエラーは悪影響を及ぼさないため、無視してかまいません。

  5. 作成した2つのデータベース・アカウントに対応する2つのデータベース接続を、JDeveloperに設定します。
    次の名前の接続をJDeveloperに定義します。

    注意 これらの2つの接続では 大文字/小文字が区別されるため、記載されているとおりに小文字で入力してください。

    ここでの作業の簡略化のために、これらの2つの接続を、 ./adftoystore/DatabaseSetupディレクトリの提供された jdev_toystore_connections.xmlファイルからインポートできます。 JDeveloperの接続ナビゲータで 「データベース」フォルダを選択し、マウスを右クリックしてメニューで 「接続のインポート...」を選択します。 インポート元のファイル名として、 jdev_toystore_connections.xmlを指定します。 指定した2つの接続をインポートしたら、 接続ウィザードをダブルクリックして表示し、 「テスト」タブを選択して、それぞれの接続を選択してテストします。 「接続のテスト」ボタンをクリックしても「成功!」メッセージが表示されない場合は、 「接続」タブで接続を修正して、接続するデータベースに対して機能するように調整してください。 デフォルトでは、ポート1521でリスニングするローカル・マシン上のデータベースに対して、 ORCLのSIDで接続が定義されています。

  6. JDeveloperに対してJUnit Extensionがインストールされていることを確認します。

    JUnitは、Javaアプリケーションのリグレッション・テストを作成するためのデファクト・スタンダード・ツールです。 Oracle JDeveloper 10gはJUnitテストを作成および実行するためのサポート機能を備えていますが、この機能は、別途にダウンロードされる、ツールの拡張機能としてインストールされます。 JDeveloperのメイン・メニューから 「ファイル→新規...」を選択して、 「新規ギャラリ」の最上位の 「General」カテゴリの下位に 「Unit Tests (JUnit)」サブカテゴリがあることが確認できれば、JUnit Extentionがインストールされています。

  7. 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サブディレクトリは作成されますので、ウィザードは「取消」してかまいません。

  8. JDeveloper に ./adftoystore/ADFToyStore.jwsワークスペースをオープンします。
  9. 図2に示すように、 ToyStoreViewController.jprプロジェクトの index.jspページを実行して、JDeveloper内でアプリケーションを実行します。

    JDeveloperでのADF ToyStoreアプリケーションの実行
    図2: JDeveloperでのADF ToyStoreアプリケーションの実行

    注意 index.jspToyStoreViewControllerプロジェクトのプロジェクト・プロパティの 「実行」パネルで 「デフォルトの実行ターゲット」として構成されているため、このプロジェクトがアクティブでアプリケーションを実行できるようになっている場合は、IDEツールバーで「実行」アイコンをクリックするか、または ToyStoreViewControllerプロジェクトをマウスで右クリックしたメニューで「実行」メニュー項目を選択するだけで済みます。

    JDeveloperから index.jspページを実行すると、JDeveloperに組み込まれているOracle Application Server Containers for J2EE(OC4J)サーバーが起動され、デフォルトのブラウザが開始されて、次のURLが要求されます。

    http://yourmachine:8988/ADFToyStore/index.jsp

    すべてが正しく機能すると、 図3に示すようなADF ToyStoreサンプル・アプリケーションのトップページが表示されます。

    注意 これらの手順に従ってもサンプル・アプリケーションのホームページが表示されない場合は、「 付録1」で、既知の問題およびトラブルシューティングのヒントを参照してください。

    ADF ToyStoreサンプル・アプリケーションのトップページ
    図3: ADF ToyStoreサンプル・アプリケーションのトップページ
注意

JDeveloper に組込みのOracle Containers for J2EE(OC4J)インスタンスを使用してサンプル・アプリケーションについて調べた後で、外部のOC4Jインスタンスである、Oracle Application Server、Tomcat、またはサポートされている他のサーバーにサンプル・アプリケーションをインストールする場合は、「 アプリケーションの配置とパッケージングに関する考慮事項」を参照してください。


サンプル・アプリケーションのクイック・ツアー

サンプル・アプリケーションがどのように作成されているか分析する前に、Webストア・アプリケーションの全体像を見てみましょう。

参照した商品の買い物かごへの追加

ADF ToyStoreは、おもちゃを販売するオンライン・ショップです。 販売する商品は、Accessories(アクセサリ)、Games(ゲーム)、Party Supplies(パーティ用品)、Toys(おもちゃ)、Models(モデル)の5つに分類されています。 ホームページから、ショップの商品を2つの方法で参照することができます。

  1. カテゴリ名を選択して、そのカテゴリの商品を参照する。
  2. バナーの 「What are you looking for?」検索ボックスで商品の名前を入力し、カテゴリに関係なく商品を検索する。

リストに4つ以上の商品が含まれている場合は、同時にそのページが表示されます。 アイテム・リストの上部に表示される 「Next」または 「Previous」のリンクを使用して、該当する商品のすべてのリストを参照できます。

商品名をクリックすると、その商品の中で、他に購入できるもののリストが表示されます。 たとえば、 「Pinata」などの商品名をクリックすると、 図4に示されるように、購入できる様々な種類の人形(ピニャータ)のリストが表示されます。

特定の商品タイプについて様々な品目を参照する
図4: 特定の商品タイプについて様々な品目を参照する

商品の詳しい説明と画像を表示するには、商品名をクリックします。
ボタンが表示されている任意のページで、このボタンをクリックすると、商品を買い物かごへ追加することができます。

どの時点でも、 ボタンをクリックすると、買い物かごに入っている商品を確認することができます。ここでは、 図5に示されているように、選択した商品とその数量のページが示されます。

買い物かごの表示
図5: 買い物かごの表示

買い物かごの中の商品の数量を変更するには、その商品の 「Quantity」フィールドの値を上書きし、 ボタンをクリックして買い物かごの中身を再計算した値を確認します。 買い物かごから商品を削除するには、 ボタンをクリックするか、または商品の数量をゼロ(0)に変更します。

支払とサインイン

「Shopping Cart」ページで ボタンをクリックすると、「Review Checkout」ページへ進みます。 このページで、買い物した内容を確認し、正しければ ボタンを押して次へ進みます。

ToyStoreで登録ユーザーとしてサインインしていない場合は、支払の処理に進むために、この時点でサインインするよう要求されます。 サインインのページは、 図6のようになります。 ここで、ユーザー名 j2eeとパスワード j2eeはすでに登録されているため、これらの資格証明を入力して処理を続行できます。


注意

新しいユーザーとして登録する場合は、 「Register as New User」リンクをクリックします。 詳細は、次の項を参照してください。


ADF ToyStore Sign-in Page
図6: ADF ToyStoreのサインイン・ページ

正常にサインインできたら、買い物の内容と支払の詳細を確認するページへ進みます。 ここでは、このサンプル・アプリケーションに実装されているアプリケーションの検証ロジックについて調べるために、次のことを実行してみてください。

ボタンを押すと、 図7に示されるような、複数の検証エラーが表示されます。

Shipping Information Validation Errors On Form Submission
図 7: フォーム送信での買い物情報の検証エラー

CAなど、正しい州の略称を入力してエラーを修正し、16桁のクレジット・カード番号を再入力します。また、他の検証エラーの確認もできます。

ボタンをもう一度押すと、 図8に示されるように、修正が必要な残りの検証エラーが表示されます。

買い物情報のその他の検証エラー
図 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のように、登録に関するエラーが表示されます。

Validation for New User Accounts In Action
図9: 新しいユーザー・アカウントのアクションにおける検証
注意

ユーザー・アカウントを表すビジネス・オブジェクトは、バックグラウンドで次のことを実施しています:
 - 必須の属性の検証
 - 国と地域の組合せを検証するためのカスタム・ビジネス・ルールを再利用
 - 主キー属性の一意性を実現するためールを使用
 -カスタムの Emailデータ型を使用して電子メールの正しいフォーマットを検証
すべてのエラー・メッセージは、現行ブラウザのユーザーのロケール(言語+地域設定)に合わせてローカライズされます。 この動作のために、開発者がコードを記述して調整する必要はありません。


登録されたユーザーとしてサイトにログインしている場合は、ツールバーに アイコンが表示されます。 このアイコンをクリックすると、 図10に示すようなページが表示され、ここでアカウントの詳細を編集できます。 また、この「Update Account」フォームでは、ユーザー・アカウントを表すベースとなる同じビジネス・オブジェクトで作業をしているため、前述のものと同じ検証を実行できます。

Editing Account Details
図10: アカウントの詳細編集

別の言語でのサンプル・アプリケーションの実行

このサンプル・アプリケーションは、StrutsおよびADF Business Componentsでサポートされている国際化機能を使用して構築されており、英語(デフォルト)、イタリア語、およびドイツ語の3つの言語をサポートしてリリースされています。

注意

もちろん、すべてのメッセージは日本語へ翻訳可能です。翻訳のためにどのファイルに手を加えればよいかについては、サンプル・アプリケーションの分析のセクションで説明しています。


StrutsおよびADFのフレームワークは、ブラウザの設定に基づいて、対象の言語を自動的に認識します。 そのため、ユーザーはブラウザ言語の環境を適切に設定するだけで、イタリア語などでサンプル・アプリケーションを表示できます。

Internet Explorerでは、 図11に示すように、 「ツールインターネット・オプション...」ダイアログの 「全般」タブで 「言語...」ボタンをクリックして、対象の言語を選択します。 「上へ」を押して、アプリケーションで選択したい言語を先頭に位置付けます。

Internet Explorerでの言語の変更
図11: Internet Explorerでの言語の変更

Apache Strutsはサーブレットのセッション・レベルでブラウザのユーザー言語を取得するため、サンプル・アプリケーションの言語をイタリア語に変更して表示する前に、ブラウザのウィンドウを一度閉じて、もう一度開く必要があります。 サンプル・アプリケーションの正しいURLでブラウザを起動する簡単な方法は、 図12に示すように、JDeveloperのログ・ウィンドウでターゲットURLを見つけてそれをクリックします。

ログでターゲットURLをクリックしてブラウザを起動する
図12: ログでターゲットURLをクリックしてブラウザを起動する

これにより、ADF ToyStoreのサンプル・アプリケーションがイタリア語で表示されます。 同じ商品を買い物かごにもう一度追加すると、 図13のように表示されます。

ブラウザ言語がイタリア語に設定されている買い物かご
図13: ブラウザ言語がイタリア語に設定されている買い物かご

ブラウザの言語を英語に戻すには、同じ手順を使用し、ブラウザ・ウィンドウを一度閉じて再起動します。

ステート管理とフェイルオーバー・サポートの体験

サンプル・アプリケーションのクイック・ツアーの最後に、ADF Business Componentsに対するステート管理とフェイルオーバー・サポートの例の一部分を説明します。 このような用語を聞くだけで、複雑な機能のように見えますが、サンプル・アプリケーションで試すのは簡単です。 JDeveloper の一部である埋込みOC4Jコンテナ内で実行されているADF ToyStoreアプリケーションで、次のようにします。

  1. 買い物かごにいくつかの商品を追加します。
  2. ブラウザ・ウィンドウを閉じずに 、OC4Jサーバーを終了し、アプリケーション・サーバー・マシンでハードウェアの障害をシミュレートします。
    このようにするには、 「表示→Run Manager」メニュー・オプションを選択し、 「Run Manager」を表示します。 リストで 「埋込みOC4Jサーバー」プロセスを見つけて、それを選択します。 最後に、
    図14に示すように、マウスを右クリックしてメニューで 「終了」を選択します。
    OC4Jサーバーを終了してサーバーの障害をシミュレートする
    図14: OC4Jサーバーを終了してサーバーの障害をシミュレートする
  3. 図2で実行したように、ADF ToyStoreサンプル・アプリケーションを再実行します。

アプリケーション・サーバーを再起動すると(この例では、埋込みOC4JサーバーがJDeveloperで再起動されます)、前述の手順2のブラウザ・ウィンドウで、処理が中断された時点のすべての商品をそのままの状態で処理を続行できます。

このフェイルオーバー機能は、ADF Business Componentsを使用している場合、アプリケーションで保留中のデータに対して自動的なデータベース・バックアップのステート管理を提供することによって作用します。 ToyStoreアプリケーションでは、一般的なWebアプリケーションで使用しているような、保留中の買い物かごの情報をHTTPセッションへ保存するという手法を使用していません。かわりに、 ShoppingCartコンポーネントの定義情報として、このコンポーネントの保留中のデータを管理することを指定するチェックボックスをチェックします。 これだけで、ADFフレームワークは残りの処理を実施してくれます。


  | 目次に戻る | 次へ進む