Auction Web アプリケーションは、 以下の図で示されているように、 複数のコンポーネントによって構成されています。 これは、アプリケーション全体をビルドする方法に関する チュートリアルではありません。 その代わりに、この資料では、ワークベンチが 提供するさまざまなツールを利用した開発および設計の重要な点に焦点を当てます。 これによって得られた知識を、ユーザー独自の Web アプリケーションに適用することができます。
Enterprise JavaBeans™ (EJB) は、Java アプリケーションが リレーショナル・データベースに保持されたデータにアクセスするための、 便利な方法を提供します。 エンティティー Bean は、Bean 管理パーシスタンス (BMP) またはコンテナー管理パーシスタンス (CMP) を使用して、開発することができます。 BMP を使用する場合に比べると、CMP には柔軟性があります。 EJB コンテナーが、Bean によって指示された データベース固有のすべての呼び出しを行うためです。 デフォルトでは、Rational® ワークベンチ内のツールは、CMP を使用してエンティティー Bean を生成します。 CMP エンティティー Bean には、アクセス SQL コードは含まれていません。 これによって、コードを再書き込みすることなく、さまざまなデータベースを使用する他の J2EE サーバー上に Bean をデプロイすることができます。
トップダウン、ボトムアップ、および meet-in-the-middle など、 リレーショナル・データベースにオブジェクトをマップする方法は、いくつもあります。 トップダウン・アプローチは、 既存のオブジェクトから処理を開始し、 必要に応じて詳細なレイヤーを徐々に定義していき、 最終ステップとしてデータベースを設計します。 ボトムアップ・アプローチでは、 既存のデータベース・スキーマを使用して、 従属レイヤーを設計し、これによってオブジェクトを定義します。 meet-in-the-middle アプローチでは、既存のデータベースおよび既存のオブジェクトを 使用して、中間レイヤーを作成し、 オブジェクトを対応するデータベース・テーブルと突き合わせます。
Auction アプリケーションでは、 エンティティー EJB の開発時にボトムアップ・アプローチを使用しました。 Derby データベースが 最初に存在しており、必要な EJB に近いテーブルが含まれていました。 「データベース接続 (Database Connection)」ウィザードを使用してデータベースへの 接続を作成した後で、いくつかの例外を除き、「EJB から RDB へのマッピング」 ウィザードを使用して 1 つ以上のテーブルからマップされた EJB を作成しました。 次の図は、Auction アプリケーションで使用したエンティティー EJB、 および EJB 同士を結び付ける関係を示しています。
Auction アプリケーションのエンティティー Bean は、リモート・クライアントからは 直接アクセスされません。 すべての要求と応答がセッション・ファサードによって処理され、 バックエンド・データへのアクセスには Bean が使用されます。 これによって、サーバー・サイドでは永続データ・ストアへの共用アクセスが 可能になります。 次のセクションでは、セッション・ファサードについて 詳しく説明します。
エンティティー Bean のマッピングについて詳しくは、 『ボトムアップ・マッピングの生成』のヘルプ・トピックを参照してください。
セッション・ファサードは、 クライアントとバックエンド間のインターフェースです。 これによって、サービス・データ・オブジェクト (SDO) コンポーネントとの通信が提供され、 最終的にはデータベースと通信できるようになります。 セッション・ファサードが役に立つのは、いくつかのオブジェクトの実行を 必要とする要求を、クライアントが送信する場合です。 これらの要求を個別にオブジェクトに送信すると、 ネットワーク・トラフィックが増加し、待ち時間が長くなる場合があります。 セッション・ファサードは、2 つの終端間のバッファーとしての役割を果たします。 クライアントから一般的な要求を受け取り、次に特定の要求を必要なオブジェクトに送信します。 これによってトラフィックが削減され、クライアントの開発が 単純化されます。
EJB をグループ化して、2 つの 異なるファサードを使用することで、ユーザーが必要な EJB のみにアクセスできるため、 アプリケーションのパフォーマンスが向上します。 Web サイト自体の機能を制御するエンティティー Bean (「カテゴリー」など) は、 システム・ファサードによって制御されます。
ファサードによって参照される EJB は、次の図に示すように、 「セッション Bean ファサードの作成」ウィザードを使用して、 一度に 1 つだけ選択されます。 必要な場合は、複数のファサードで 1 つの EJB を参照することができます。 Auction アプリケーションでは、この作業は行なっていません。
メソッドをファサードに追加することによって、別の機能を追加することができます。 例えば、ユーザー・ファサードには、ユーザーのリストを戻すメソッドがありますし、 アクティブ・ユーザーのリストを戻すメソッドもあります。 これらのメソッドをサンプルとして使用し、 非アクティブとしてマークされた全ユーザーのリストを戻すメソッドを、 ユーザー・ファサードに追加することができます。
セッション・ファサードの詳細については、http://java.sun.com./ で 討議資料「Design Patterns: Session Facade」を参照してください。
Web Site Designer ツールのナビゲーション・ビューは、 サイトがどのようにレイアウトされているかをビジュアル表示します。 ここには、個々のページとその階層編成が表示されるので、 サイト内のページのレイアウトと編成を保守するのに役立ちます。 エディター内でページをドラッグ・アンド・ドロップすると、ページ・テンプレート内の ナビゲーション・コントロールが自動的に更新されます。 例えば、次の図に示されているオークションのナビゲーション構造を使用すると、 「売却 (Sell)」ページを「ブラウズ (Browse)」ページの 前に移動することによって、ナビゲーション・タブの順序を変更することができます。 Web Site Designer は、すべてのページにおいて、正しい順序で自動的にタブを生成します。 実行中のアプリケーション内で変更点を表示するには、ナビゲーション・テンプレートを 使用するページを、それぞれ再度保管します。
次の図に示されているように、Web Site Designer には、先ほど説明した ナビゲーション・ビューの他に、詳細ビューが提供されています。 使い勝手がよく、編集可能なテーブル内で、追加のページ要素を編成することができます。 このテーブルを使うと、 タイトル、作成者、およびナビゲーション・ラベルなどの ページ・プロパティーを、簡単に更新できるようになります。
Web Site Designer を使用した Web サイト・レイアウトの管理について詳しくは、 オンライン・ヘルプのトピック 『Web サイト構造の作成』を参照してください。
ワークベンチは、ページ・テンプレートに 加えて、Web ページ自体も作成することができる視覚的な設計機能を備えています。
ページ・テンプレートは、Web サイトの 各セクションにおける共通の外観または動作を提供する、コンテンツ・コードの 再利用可能な部分です。 共通のルック・アンド・フィールを共用するには、Web ページにテンプレートのみを 参照させる必要があります。 テンプレートを使用すると、ユーザーおよび開発者の両方にメリットが生じます。 ユーザーは、Web サイトを簡単にナビゲートできるようになり、 開発者は、特定のページに固有のコードを作成するだけで済むようになります。
ページ・テンプレートを使用することによって、Web サイトの コンテンツを簡単に保守することも可能になります。 テンプレート・ファイルへの変更内容は、 そのファイルを参照するすべてのページに自動的に反映されます。 例えば、Auction Web アプリケーションでは、 テンプレート maintemplate.jtpl によって、 オークション・ページの一般的なレイアウトが提供されます。 Web ページの要素をテンプレートを追加するため に、Page Designer ではパレットを使うことができます。 パレットによって、要素を Web ページに ドラッグ・アンド・ドロップすることが可能となります。 必要な HTML コードは、自動的に生成されます。 この方法を使えば、例えばフッターに現在の日時を含める場合などに、 Auction テンプレートを簡単に変更することができます。
ナビゲーションをハードコーディングする代わりに、テンプレートを 呼び出すタグを挿入することで、サイトのすべてのページに同一のナビゲーション・バーを 組み込むことができます。 テンプレート・マッピング・エディターによって、テンプレートへの参照を Web ページに 挿入します。
動的テンプレートは、このテクノロジーをさらに一歩進めたものです。 例えば、ユーザーの役割または機能を 基にして Web ページのコンテンツを変更したり、 ユーザー固有の情報を Web ページに挿入したりすることができます。 Auction サンプルは、動的テンプレートを使用して、ナビゲーション・バーに 管理者としてログインしたユーザー専用の管理リンクを提供し、ユーザーが 正常にログインした後で「ログイン」ボタンが「ログアウト」になるよう変更します。
Web ページ・テンプレートの作成について詳しくは、 『ページ・テンプレートの作成』のヘルプ・トピックを参照してください。
JavaServer Faces (JSF) は、アプリケーション・サーバー上で 実行される、動的な Web アプリケーション用のユーザー・インターフェースのビルドを 支援するテクノロジーです。 JSF はオープン・スタンダードの言語で、JavaServer Faces 標準のタグ・ライブラリーを使用します。 このタグを HTML コードに挿入して、動的 Web ページを作成します。
JSF フレームワークは、複数の サーバー要求間のユーザー・インターフェース状態を管理します。 また、クライアントによってアクティブにされる サーバー・サイド・イベントを処理するために、 単純な開発モデルを提供します。 例えば JSF では、さまざまなイベント (ボタンのクリックなど) に対して、 指定された動作を行なうことができます。 Page Designer では、組み込み関数を使うことができます。 これらは、パレット内に視覚的に表示され、 Web ページにドラッグ・アンド・ドロップすることができます。 これらのドラッグ・アンド・ドロップによって、JSF、HTML、 およびその他のスクリプト要素を、簡単に使用できるようになります。 これは、テキスト・フィールドの値のタイプ (整数、英数字) などの、フィールドの 基本関数を制御するのに便利なだけでなく、検証規則を設定することも可能になります。 Page Designer では、各ページに関連付けられた SDO データ に、JSF コントロールをバインドすることができます。
別の機能を JSF ページに追加するには、Page Designer の パレットを使用することができます。 例えば、項目の詳細ページに「今すぐ購入 (Buy It Now)」ボタンを追加して、 売り手が設定した価格で、ユーザーがその項目を購入できるようにすることが可能です。
次の図は、オークションの詳細ページの JSF コントロールを示しています。 newbid inputText フィールドは、図の右下隅に示されているように、 「整数のみ (Integer only)」チェック・ボックスによって、 整数のみを受け入れるよう制限されています。 inputText フィールドには、図の 左下の「h:inputText」の下にあるタブで定義されているように、「検証」、 「振る舞い」、および「アクセシビリティ」のための追加設定があります。 「検証」タブでは、Java を 使用して、特定の検証規則を定義します。 例えば、newbid inputText フィールドで有効な入力データは、NULL 以外の整数で、 入札開始価格より大きく、現在の入札値に 1 を加算した値より大きいものです。
Auction アプリケーションの itemdetails ページにある newbid inputText フィールドについて、次のコードが生成されました。
<h:inputText styleClass="inputText" id="newbid" required="true" size="14"> <f:convertNumber integerOnly="true" /> <f:validateLongRange minimum="#{pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean==null ? pc_Itemdetail.userFacadeLocalGetBidItemSDOByKeyResultBean.startingbid : pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean.currentbid+1}"> </f:validateLongRange> </h:inputText>
Faces JSP ファイルの作成について 詳しくは、『JavaServer Faces』のヘルプ・トピックを参照してください。
Web サービスは、Web アプリケーションに 依存していないため、Web アプリケーションと並行して作成されました。 Web サービスは、ビジネス・ロジックにアクセスするためのもう一つの 手段であり、Web アプリケーションのすべての機能が含まれているわけではありません。 Auction アプリケーションのこの部分の詳細については、Web サービスのセクションを 参照してください。