222
Oracle Application Server 10g Release 3Java EE Developers10.1.3.1.0)チュートリアル 2006 9

Oracle Application Server 10g Release 3:Java EE …otndnld.oracle.co.jp/otndocs/products/jdev/10131/JavaEE_tutorial.pdf · はじめに ここでは、Oracle Application Server

  • Upload
    dokiet

  • View
    232

  • Download
    1

Embed Size (px)

Citation preview

Oracle Application Server 10g Release 3: Java EE Developers(10.1.3.1.0)チュートリアル

2006 年 9 月

Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

Copyright © 2006, Oracle.All rights reserved.

著者:Pam Gamer、Dan Hynes、Raghu Kodali、Dana Singleterry

共著者:Alfred Franci、Jonas Jacobi、Lynn Munsinger、Frank Nimphius、Chris Schalk

このプログラム(ソフトウェアおよびドキュメントを含む)には、オラクル社およびその関連会社に所有権のある情報が

含まれています。このプログラムの使用または開示は、オラクル社およびその関連会社との契約に記された制約条件に従

うものとします。著作権、特許権およびその他の知的財産権と工業所有権に関する法律により保護されています。独立し

て作成された他のソフトウェアとの互換性を得るために必要な場合、もしくは法律によって規定される場合を除き、この

プログラムのリバース・エンジニアリング、逆アセンブル、逆コンパイル等は禁止されています。

本文書に記載された内容は、予告なく変更されることがあります。本文書内に問題が見つかった場合は、書面にて報告し

てください。オラクル社およびその関連会社は、本文書に一切間違いがないことを保証するものではありません。これら

のプログラムのライセンス契約において明確に許諾されている場合を除いて、いかなる形式、手段(電子的または機械的)、

目的のためにも、これらのプログラムを複製または転用することはできません。

このプログラムがアメリカ政府またはプログラムのライセンスを受け、使用するアメリカ政府の代理人に提供される場合

は、以下の注意事項を適用します。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the Programs, including documentation and technical data, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement, and, to the extent applicable, the additional rights set forth in FAR 52.227-19, Commercial Computer Software--Restricted Rights (June 1987).Oracle Corporation, 500 Oracle Parkway, Redwood City, CA 94065

このプログラムは、核、航空産業、大量輸送、医療あるいはその他の危険が伴うアプリケーションへの用途を目的として

おりません。このプログラムをかかる目的で使用する際、上述のアプリケーションを安全に使用するために、適切な安全

装置、バックアップ、冗長性(redundancy)、その他の対策を講じることはライセンシーの責任となります。万一かかるプ

ログラムの使用に起因して損害が発生いたしましても、オラクル社およびその関連会社は一切責任を負いかねます。

Oracleは米国Oracle Corporationおよびその子会社、関連会社の登録商標です。その他の名称はそれぞれの会社の商標です。

このプログラムは、第三者の Web サイトへリンクし、第三者のコンテンツ、製品、サービスへアクセスすることがありま

す。オラクル社およびその関連会社は第三者の Web サイトで提供されるコンテンツについては、一切の責任を負いかねま

す。当該コンテンツの利用は、お客様の責任になります。第三者の製品またはサービスを購入する場合は、第三者と直接

の取引となります。

オラクル社およびその関連会社は、第三者の製品およびサービスの品質、契約の履行(製品またはサービスの提供、保証

義務を含む)に関しては責任を負いかねます。また、第三者との取引により損失や損害が発生いたしましても、オラクル

社およびその関連会社は一切の責任を負いかねます。

はじめに

ここでは、Oracle Application Server 10g R3:Java EE Developers(10.1.3.1.0)チュートリアルの概要を説明し

ます。以下の項が含まれます。

対象読者

構成

関連資料

はじめに i

対象読者

対象読者 本書は、Oracle JDeveloper および Enterprise JavaBean(EJB)を使用して Web アプリケーションを作成する Java EE 開発者を対象にしています。

構成 本書には以下の章があります。

第 1 章:"最初に"

この章では、サービス・リクエストのシナリオとそのスキーマのインストールについて説明します。

第 2 章:"永続性エンティティの開発"

この章では、EJB 3.0 Java Persistence API(JPA)エンティティを使用して、アプリケーション用の永続性デー

タ・モデルを作成する方法について説明します。

第 3 章:"セッション・ファサードの開発"

この章では、基礎となる EJB との統一されたインタフェースを持つクライアント・オブジェクトを提供する

セッション・ファサード Bean とインタフェースを開発する方法について説明します。

第 4 章:"データ・モデルの配置とテスト"

この章では、OC4J を起動してセッション Bean を配置する方法を説明します。また、データベースにレコード

を挿入するサンプル・クライアントを作成および実行して、データ・モデルをテストする方法を説明します。

第 5 章:"ユーザー・インタフェースの計画"

この章では、ページ・フローの定義やアプリケーションのルック・アンド・フィールの標準化など、アプリ

ケーションのユーザー・インタフェースを計画する方法について説明します。

第 6 章:"ログイン・ロジックの定義"

この章では、SRDemo アプリケーション用のセキュリティを構築する方法について説明します。

第 7 章:"ログイン、表示、およびナビゲーション・ロジックの実装"

この章では、ログイン・ロジックを実装するページを作成します。また、ユーザーが使用を許可されたペー

ジへ移動できるように、条件付きでリンクを表示するページを作成します。

第 8 章:"レコードを表示するページの開発"

この章では、ユーザーのサービス・リクエストを表示するページを開発します。

第 9 章:"レコードを編集するページの開発"

この章では、サービス・リクエストを編集するページを作成する方法について説明します。顧客用に 1 ペー

ジ、スタッフ用(技術者と管理者)に別の 1 ページがあります。

ii Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

関連資料

第 10 章:"Triage ページの作成"

この章では、管理者がサービス・リクエストを技術者に割り当てるための Triage ページを作成する方法につ

いて説明します。

第 11 章:"レコードを挿入するページの開発"

この章では、ユーザーがデータベースに新規のサービス・リクエスト・レコードを挿入するための挿入ペー

ジを作成する方法について説明します。

第 12 章:"Oracle Application Server 10g のインストール"

この章では、SRDemo アプリケーションを配置するために、Oracle Application Server 10g の 2 つのクラスタ化

インスタンスをインストールする方法について説明します。

第 13 章:"Oracle Application Server 10g へのアプリケーションの配置"

この章では、JDeveloper を使用して、アプリケーションと必要なデプロイメント・ディスクリプタを含む配

置可能パッケージを作成する方法について説明します。また、Application Server Control を使用して、Oracle Application Server 10g クラスタにパッケージを配置し、アプリケーションのローリング・アップグレードを

実行する方法について説明します。

関連資料 EJB 3.0 アプリケーションの作成に関する詳細は、http://www.oracle.com/technology/tech/java/ejb30.html にある

EJB 3.0 リソースを参照してください。

Oracle ADF でのアプリケーションの作成に関する詳細は、以下の資料を参照してください。

『Oracle Application Development Framework 開発者ガイド 10g Release 3 (10.1.3)』

『Oracle Application Development Framework Forms/4GL 開発者のための開発者ガイド 10g Release 3 (10.1.3)』

はじめに iii

関連資料 関連資料

iv Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル iv Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

1 最初に

このチュートリアルでは、顧客サービス・リクエストを追跡する Java EE 顧客関係管理アプリケーションを設

計し、作成する方法について説明します。アプリケーションは、Web ベースのユーザー・インタフェースを持

ち、Oracle Application Server 10g に配置されます。データ・コンポーネントは、EJB 3.0 オブジェクトです。

この章では、以下のトピックについて説明します。

ServiceCompany の概要

このチュートリアルの使い方

環境のセットアップ

まとめ

最初に 1-1

ServiceCompany の概要

ServiceCompany の概要 ServiceCompany は、家庭用電化製品(皿洗い機、洗濯機、電子レンジなど)のサービス・サポートを提供する

大手家電サービス会社です。同社は、各種の電化製品をサポートしており、サービス・リクエストとして送

信された質問に回答することで、顧客のほとんどの問題を解決しようとしています。ServiceCompany は、顧

客が正しい情報を持っていれば、 終的にほとんどの問題を解決できるということを認識しました。この方

式によって、同社と顧客の時間は節減され、経費が軽減されることが実証されたのです。

サービス・リクエストは、一般に以下のような流れで処理されます。

1. 顧客がリクエストを発信する。

2. 会社がサービス技術者にリクエストを割り当てる。

3. サービス技術者がリクエストに回答するか、顧客に詳細を問い合せる。

4. 顧客がリクエストを確認してリクエストを終結するか、詳細を提供する。

業務上の問題 現在、このプロセスは顧客からの電話で始まり、窓口担当者がリクエストを記録して処理状況を追跡する必

要がありますが、サービス・リクエストの増加に伴い、窓口担当者がサービス・リクエストをデータベース

に入力するまで、技術者へのサービス・リクエストの割当てが遅れてしまう場合があります。管理者が、技

術者の作業の進み具合を把握して効率的な業務の遂行を保証することは困難です。そのため、顧客の満足度

が低下し、リクエストに対するコストが増加してしまいました。

ServiceCompany は、顧客が自身のリクエストを記録し、追跡でき、管理者が技術者の作業をよりよく監視で

きるように、セルフサービス・アプリケーションを実装しようと考えています。

目標 ServiceCompany の目標は、以下のとおりです。

顧客がサービス・リクエストを追加し、更新し、ステータスを確認できる顧客インタフェース。

サービス情報の追加や適切なサービス技術者へのリクエストの割当てなど、同社が顧客サービス・

リクエストを作成し、更新し、管理できる業務インタフェース。

サービス・リクエストの迅速な解決を保証する各種のレポート・ツール。

ビジネス・ソリューション ServiceCompany は、Oracle JDeveloper を使用して、Java EE 顧客関係管理アプリケーションを作成することを

決定します。アプリケーションの技術的内容は、以下のとおりです。

ユーザー・インタフェースは、社外の顧客と社内の従業員の両方にアプリケーションを配置できる

Web ベースのインタフェースです。

技術は Java EE に準拠します。

アプリケーション・サーバーは Oracle Application Server 10g です。ServiceCompany は、Oracle Application Server プラットフォームを使用して、アプリケーションを社内に配置できるようにサー

ビス指向アーキテクチャ(SOA)を確立します。

データ・コンポーネントは、EJB3.0 オブジェクトです。Enterprise JavaBeans(EJB)3.0 は、アプリ

ケーションのビジネス・サービス層を提供します。Enterprise JavaBean は、再利用と移植が可能な Java EE コンポーネントです。EJB 3.0 仕様によって Enterprise JavaBeans の開発がこれまでになく簡単に

なり、JDeveloper を使用するとウィザードに従って EJB を作成できます。

Java ServerFaces(JSF)は、アプリケーションの UI に使用されます。

1-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ServiceCompany の概要

アプリケーションで使用する機能とページは、以下のとおりです。機能とページは、アプリケーションの進

展に伴い変化します。 初のリストに、必要な機能を示します。2 番目のリストには、必要なページを示し

ます。

機能 アプリケーションでは以下の機能が必要です。

顧客ログインの検証

サービス・リクエストの作成

サービス・リクエストの保守

サービス履歴の保守(顧客に社内用のメモを表示しない機能を持つ)

以下の機能は、このチュートリアルでは扱いませんが、オプションとして実装できます。

サービス・リクエスト割当ての履歴:オプションとして、履歴の行に割当ての変更を入力できます。

サービス・リクエスト・ステータスの履歴:オプションとして、履歴の行にステータスの変化を入

力できます。

ページ アプリケーションには以下のページがあります。

Login ページ:各ユーザーは、顧客、サービス技術者、または管理者です。

Service Request Insert ページ:顧客とスタッフの両方が、このページを使用して新規のサービス・

リクエスト(SR)を作成できます。

Service Request List ページ(顧客用):このページは、顧客が既存のサービス・リクエストを表示

するために使用します。また、顧客が作成したすべてのサービス・リクエストと各サービス・リク

エストのステータスが表示されます。顧客は、既存のサービス・リクエストをクリックすると、リ

クエストに情報を追加できる編集ページ(Service Request ページ)へ移動できます。

Service Request Edit ページ(顧客用):このページは、顧客がサービス・リクエストを作成し、更

新するために使用します。履歴には、顧客に表示したくない機密情報が入っている場合があります。

そのような項目には、"internal only"フラグを付けることができ、顧客から確認することはできなく

なります。

Triage ページ(社内用):このページは、管理者がすべてのサービス・リクエストを表示するため

に使用します。管理者は、このページからサービス・リクエストを割り当てたり、割当てを変更し

たりできます。このページでは、すべてのリクエスト、未割当てのリクエスト、または任意の他の

ステータスを動的に表示できます。

Service Request List ページ(社内用):このページには、ログオンしているサービス技術者に割り

当てられたすべてのサービス・リクエストと各リクエストのステータスが表示されます。技術者は、

既存のサービス・リクエストをクリックすると、リクエストに情報を追加するページ(Service Request Edit ページ)へ移動できます。

Service Request Edit ページ(社内用):このページでは、サービス技術者が解決情報を入力し、サー

ビス・リクエストを更新します。このページには、元のリクエストとともに、完全なサービス・リク

エスト履歴(マスター/ディテール)が表示されます。

最初に 1-3

ServiceCompany の概要

次の図は、アプリケーション用のページ・フローの概要を示しています。

アプリケーションの流れは、次のとおりです。

1. ユーザーがアプリケーションを起動すると、Welcome ページが表示されるので、ここでログイン情報を

入力します。ユーザーとは、顧客または ServiceCompany の従業員です。ログイン情報が正しければ、

顧客、技術者、または管理者のそれぞれに該当するページへ移動します。

2. ログイン・ユーザーが顧客の場合は、記録済みのサービス・リクエストを表示するか、新規のサービス・

リクエストを作成するかを選択できるメニュー項目が、Welcome ページに表示されます。

3. ログイン・ユーザーが技術者の場合は、割り当てられたサービス・リクエストを表示するか、新規のサー

ビス・リクエストを作成するかを選択できるメニュー項目が、Welcome ページに表示されます。

4. ログイン・ユーザーが管理者の場合は、サービス・リクエストを表示し、新規のサービス・リクエスト

を作成できるだけでなく、サービス・リクエストを割り当てて、特定のサービス・リクエストやサービ

ス・リクエストの種類を問い合せることもできるページへ移動します。

5. ユーザーがサービス・リクエストの作成を選択すると、サービス・リクエストの詳細を入力するページ

へ移動します。

6. ユーザーがサービス・リクエストの表示を選択すると、該当するサービス・リクエストを表示するペー

ジへ移動します。このリストには、サービス・リクエストを更新するためのリンクがあります。

7. ユーザーが更新を選択すると、サービス・リクエストの詳細を更新するためのページへ移動します。

8. 管理者が問合せを選択すると、問合せの詳細を入力するためのページへ移動し、制限されたレコードま

たはレコードの集合が表示されます。

9. 管理者がサービス・リクエストの割当てを選択すると、サービス・リクエストと技術者を関連付けるた

めのページへ移動します。

1-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ServiceCompany の概要

スキーマ 初期のスキーマは、ビジネス・モデルのニーズに対応できるように設計されています。スキーマは、次の図

に示すように、5 つの表と 3 つのデータベース順序から構成されています。

5 つの表は、サービス・リクエストを作成し、適切な技術者に割り当てることを表しています。

表 USERS:この表は、顧客、技術者、管理者など、システムと対話するすべてのユーザーを保存しま

す。各ユーザーの電子メール・アドレス、姓名、番地、市、州、郵便番号、および国情報が格納さ

れます。IDは、ユーザーを一意に識別します。

SERVICE_REQUESTS:この表は、特定の製品に関するアクティビティについての内部および外部

リクエストの両方を示します。いずれの場合も、リクエストが製品の問題に対する解決方法となり

ます。サービス・リクエストを作成する際は、それをオープンした人の名前、対象の製品、リクエ

ストの日付、および問題の簡単な説明が記録されます。サービス・リクエストを技術者に割り当て

る際は、技術者の名前と割当ての日付も記録されます。人為的IDがすべてのサービス・リクエスト

を一意に識別します。

SERVICE_HISTORIES:1 つのサービス・リクエストに対して、多数のイベントが記録される場合が

あります。リクエスト作成の日付、作成者の名前、およびイベントに関する具体的な注意が記録され

ます。サービス・リクエストに関する内部通信も追跡されます。サービス・リクエストIDとサービス

履歴順序番号は、各サービス履歴レコードを一意に識別します。

最初に 1-5

このチュートリアルの使い方

PRODUCTS:この表には、会社が取り扱う全製品が格納されます。各製品についての名前と説明が

記録されます。製品の画像がある場合は、それも格納されます。人為的IDがすべての製品を一意に

識別します。

EXPERTISE_AREAS:サービス・リクエストをより適切な技術者に割り当てるために、各技術者の

専門分野が定義されています。

順序 USERS_SEQ:新規のユーザーにIDを指定します。

PRODUCTS_SEQ:各製品にIDを指定します。

SERVICE_REQUESTS_SEQ:新規の各サービス・リクエストにIDを指定します。

このチュートリアルの使い方 このチュートリアルは、16 の章に分かれています。各章は、前の章に基づいています。そのため、このチュー

トリアルに記載されている順序に従って、各章を完了する必要があります。

次の項で、アプリケーションの作成を開始する前に完了しておく必要のあるすべての手順について説明し

ます。

環境のセットアップ この項では、チュートリアルをサポートする作業環境を準備します。Service Request 表を調べてインストー

ルし、JDeveloper を設定します。実行する主な作業は、以下のとおりです。

1. チュートリアル・スキーマ・セットアップをダウンロードします。

2. SRDEMO スキーマ所有者と ServiceCompany スキーマを作成します。

3. Oracle JDeveloper 10g Release 3(10.1.3)をダウンロードしてインストールします。

4. JDeveloper データベース接続を作成します。

5. チュートリアル用のアプリケーションとプロジェクトを定義します。

チュートリアル・セットアップ・ファイルのダウンロード このチュートリアル用のセットアップ・ファイルをダウンロードするには、以下の手順に従います。

1. http://download.oracle.com/otndocs/products/jdev/10131/JavaEE_tutorial_setup.zipから JavaEE_tutorial_setup.zipをダウンロードし、コンピュータ上のディレクトリにzipファイルを

抽出します。このチュートリアルでは、このディレクトリを¥setupディレクトリと呼びます。

2. ¥setupディレクトリの¥filesサブディレクトリから、SRSetups.zipを一時ディレクトリ(たとえ

ば D:¥temp)に解凍し、ユーザーとスキーマを作成するために使用するファイルを公開します。

SRDEMOスキーマ所有者とServiceCompanyスキーマの作成 SRDEMOユーザーは、アプリケーションに表示されるデータを所有します。ユーザー・アカウントを作成

し、適切な特権を割り当てるには、Oracle SYSユーザーまたは同等のものへのアクセスが必要です。

createSchema.sqlファイルには、データベース・ユーザーを作成するために必要なすべてのコマンド

が含まれています。createSchemaObjects.sqlファイルは、SRDEMOユーザーとして接続し、チュー

ト リ ア ル 用 の す べ て の 表 、 制 約 、 お よ び デ ー タ ベ ー ス 順 序 を 作 成 し ま す 。 後 に 、

populateSchemasTables.sqlファイルは、チュートリアルで使用するサンプル・データを表に挿入し

ます。

1-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

環境のセットアップ

注意:セキュリティ上の理由により、本番データベースにチュートリ

アル・スキーマをインストールすることは推奨されません。ユーザー

を作成する権限を持つアカウントにアクセスするには、DBA の援助

が必要な場合があります。

スキーマ所有者とスキーマを作成するには、以下の手順に従います。

1. SRSetups.zipファイルを解凍したディレクトリへ移動します。

2. そのディレクトリから SQL*Plus を起動し、SYSまたは別の DBA レベル・ユーザーとしてログイン

します。DBA にスクリプトの実行を依頼する必要のある場合があります。

3. SQL*Plus ウィンドウで、build.sqlスクリプトを起動します。 SQLPLUS>start build.sql build.sql

スクリプトは、createSchema.sqlスクリプトを呼び出して SRDEMOユーザーを作成し、SRDEMOアカウ

ントにログオンします。接続後、スクリプトは自動的に createSchemaObjects.sqlスクリプトを呼び出

し、すべての表、制約、およびデータベース順序を作成します。この操作が完了すると、

populateSchemaTables.sqlスクリプトを呼び出して、サンプル・データを表に挿入します。

build.sql スクリプトに制御が戻ると、作成されたオブジェクトと無効になる可能性のあるオブジェクト

のリストが表示されます。これらのスクリプトを実行する所要時間は、30 秒未満です。build.sqlスクリ

プトを再び実行して、SRDEMO 所有者とオブジェクトを削除し、再び作成する場合があります。

Oracle JDeveloper 10g Release 3(10.1.3)の起動 JDeveloper Studio を準備するには、以下の手順に従います。

注意:Oracle JDeveloper 10g Release 3 をまだインストールしていない場合は、次の手

順へ進む前にインストールしてください。

1. Windows Explorer で、 JDeveloper がインストールされているディレクトリへ移動し、

jdeveloper.exeファイルを検索します。jdeveloper.exeファイルを右クリックし、コンテキ

スト・メニューから「送る」、「デスクトップ」を選択して、デスクトップにショートカットを作成

します。

2. デスクトップ上の「JDeveloper へのショートカット」アイコンをダブルクリックして、JDeveloperを起動します。JDeveloper を初めて実行する場合、"Do you wish to migrate?"ウィンドウが表示されま

す。「No」をクリックして、続行します。

3. 起動すると、"Tip of the Day"ウィンドウが表示されます。これらのヒントは、開発の生産性を高め

るためにできることを示しています。ヒントを確認して、「Close」をクリックします。

JDeveloperデータベース接続の作成 SRDEMOユーザーを使用して、ServiceCompanyスキーマへの新規のデータベース接続を作成するには、以下

の手順に従います。

注意:このチュートリアルでは、データベース接続はsrdemoという名前になります。

接続の名前は、チュートリアルを完了するための機能には影響しませんが、指示を理解

しやすくするために、すべての手順に記載されているネーミング規則を使用することを

強く推奨します。

最初に 1-7

環境のセットアップ

1. JDeveloper で、メニュー項目「View」→「Connection Navigator」を選択します。

2. 「Database」ノードを右クリックし、コンテキスト・メニューから「New Database Connection」を

選択します。

3. Welcome ページで「Next」をクリックします。

4. Connection Nameフィールドに、接続の名前を入力します。このチュートリアルでは、SRDemo(大

文字と小文字が区別されます)という名前を使用します。「Next」をクリックします。

5. Authentication ページで次の値を入力します。「Next」をクリックします。

フィールド 値 Username srdemo

Password oracle

Deploy Password チェック・ボックスを選択します。

6. Connection ページで次の値を入力します。「Next」をクリックします。

フィールド 値 Host Name データベースが存在するコンピュータの名前(または IP アドレス)を入力し

ます。データベースが JDeveloer と同じマシンに存在する場合は、デフォルト

値の localhostを使用できます。

JDBC Port データベースへのアクセスに使用するポートを入力します。 デフォルト値は 1521です。この値が不明である場合は、DBA に問い合せて

ください。

SID データベースへの接続に使用する SID を入力します。デフォルト値は ORCLです。この値が不明である場合は、DBA に問い合せてください。

7. 「Test Connection」をクリックします。データベースが使用可能な状態にあり、接続の詳細が正し

い場合は、続行できます。そうでない場合は、「Back」ボタンをクリックして値を確認します。

8. 「Finish」をクリックします。Connection Navigator の Database ノードの下に、接続が表示されま

す。

9. JDeveloper からスキーマを調べます。Connection Navigator で、「Database」→「SRDemo」を開きま

す。スキーマのデータベース要素を参照し、次のスキーマ定義と一致することを確認します。

1-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

環境のセットアップ

チュートリアル用のアプリケーションとプロジェクトの定義 JDeveloper では、常にアプリケーションに含まれるプロジェクトの中で作業を行います。

アプリケーションは、制御構造の 上位レベルです。アプリケーションは、使用中のプロジェクトを追跡し、

記録します。JDeveloper を開くと、 後に使用したアプリケーションがデフォルトで開かれるため、作業を

中止した場所から再開できます。

JDeveloper のプロジェクトは、関連するファイルを論理的にグループ化する組織構造となっています。複数

のプロジェクトをアプリケーションに追加し、ソース・コードを簡単に編成、アクセス、変更、および再利

用できます。

アプリケーション・コンポーネントを作成する前に、まず、アプリケーションとプロジェクトを作成する必

要があります。ビジネス・モデルとビュー用の新規の SRDEMOアプリケーションとプロジェクトを作成する

には、以下の手順に従います。

注意:プロジェクト名、アクティビティ名、または要素名には、ピリオドのような特殊

な文字を入れないでください。特殊文字を入れると、プロジェクトをコンパイルしよう

とするときにエラーが発生します。

1. アプリケーションを作成するには、Applications Navigator 内をクリックし、「Application」ノード

を右クリックして、コンテキスト・メニューから「New Application」を選択します。

2. Create Application ダイアログ・ボックスに、次の値を入力します。終了したら、「OK」をクリック

します。

最初に 1-9

環境のセットアップ

フィールド 値 Application Name

SRDEMO

Directory name D:¥JDeveloper¥jdev¥mywork¥SRDEMO デフォルト値のままにします。推奨されるディレクトリ構造を使用する場合、

パスはこの値と一致します。

Application Package Prefix

org.srdemo この値は、すべてのパッケージ名の接頭辞になりますが、必要に応じて後で

変更できます。

Application Template

Web Application [JSF, EJB] このチュートリアルでは、Java ServerFaces と Enterprise JavaBeans に関連する

テクノロジにアクセスします。開発時に使用できるテクノロジを制限するた

めに、新規のテンプレートを作成し、追加できます。

アプリケーションは、2 つのデフォルト・プロジェクト、Model と ViewController で作成します。

3. ViewController プロジェクトは、モデルで定義されるリソースにアクセスする必要があるため、モデ

ルに対する依存性があります。ただし、モデルにはビュー側から来るコンポーネントは必要ないの

で、Model プロジェクトに依存性は不要です。

依存性を設定するには、「ViewController」プロジェクトを右クリックし、コンテキスト・メニュー

から「Project Properties」を選択します。

4. 左側のツリーから Dependencies を選択します。ダイアログの右側にある Project Dependencies リス

トで、Model.jpr の隣にあるチェック・ボックスを選択し、「OK」をクリックします。

この依存性を設定すると、プロジェクトを作成する順序も決定されます。ビューには、モデルに含

まれる一部のクラスが必要です。そのため、この依存性を設定することで、モデルがビューの前に

コンパイルされることが保証されます。

5. 「SaveAll 」をクリックして作業内容を保存します。

1-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

まとめ

まとめ この章では、ServiceCompany と、以下の要件に適合する Web ベースの顧客関係管理アプリケーションを実

装する同社の計画を紹介しました。

顧客は、自身のサービス・リクエストを記録し、更新できる。

技術者は、割り当てられたサービス・リクエストを追跡し、更新できる。

管理者は、サービス・リクエストを問い合せて、割り当てることができる。

この章では、アプリケーションの作成を開始する前に完了すべきすべての手順を実行しました。実行した主

な作業は、次のとおりです。

チュートリアル・スキーマ・セットアップ・ファイルをダウンロードしました。

SRDEMOスキーマ所有者の作成と、ServiceCompany スキーマをインストールしました。

Oracle JDeveloper をダウンロードおよびインストールしました。

JDeveloper データベース接続を作成しました。

チュートリアル用のアプリケーションとプロジェクトを定義しました。

最初に 1-11

まとめ まとめ

1-12 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル 1-12 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

2 永続性エンティティの開発

この章では、永続性エンティティを開発する方法について説明します。前の章をまだ完了していない場合は、

¥setupディレクトリの¥solutionsサブディレクトリで、前の章のソリューションにアクセスできます

(¥setupディレクトリを作成する方法については、第 1 章の"環境のセットアップ"の項を参照してください)。

適当なディレクトリにSRDEMOCh01.zipファイルを抽出し、JDeveloperでSRDEMO.jwsワークスペースを開い

て、作業を継続します。

この章では、以下のトピックについて説明します。

EJB 3.0 Java Persistence API(JPA)エンティティの作成

作成したオブジェクトの確認

名前付き問合せの定義

マスター/ディテール・エンティティ用のカスケード型の指定

データベース順序を使用した ID の生成

デフォルト値の設定

後続コードと一致する属性のマッピング

まとめ

永続性エンティティの開発 2-1

EJB 3.0 Java Persistence API(JPA)エンティティの作成

EJB 3.0 Java Persistence API(JPA)エンティティの作成 この項では、EJB 3.0 エンティティについて、そして JDeveloper で EJB 3.0 エンティティを作成する方法につ

いて学習します。

EJBについて Enterprise JavaBeans(EJB)アーキテクチャは、コンポーネントに基づくビジネス・アプリケーションの開

発と配置に適しています。EJB アーキテクチャを使用して作成したアプリケーションは、拡張性に優れ、

トランザクション対応であり、マルチユーザー方式でセキュアです。

Enterprise JavaBean(EJB)は、ビジネス・ロジックをカプセル化するサーバー側コンポーネントです。EJB仕様は、サーバー側のコンポーネント・モデルとアプリケーション・サーバー用のプログラミング・インタ

フェースを定義しています。この仕様に従って作成されたサーバーとコンテナは、トランザクション管理、

セキュリティ、永続性のような低位のアプリケーション・プログラミングを担当します。サーバーがアプリ

ケーション・プログラミングの困難な部分のほとんどを担当するため、開発者はアプリケーションのビジネ

ス・ロジックに専念できます。

EJBの種類 EJB は、エンティティ Bean、セッション Bean、またはメッセージ駆動型 Bean になることができます。EJB 3.0では、EntityBean、SessionBean、または MessageDrivenBeanインタフェースを実装する必要はあり

ません。その代わり、アノテーションを使用して、EJB の以下の種類を表す Java クラスを定義できます。

エンティティ Bean は、データベースに存在するビジネス・オブジェクトを表します。

セッション Bean は、顧客のクレジット履歴を確認するといった個別のタスクを実行します。また、

会話状態の維持に基づいて分類されます。

ステートレス・セッション Bean は、内部状態を持たず、メソッド間で交換される情報を

追跡しません。運送料の計算のような前の呼び出しと関係のないビジネス・メソッドに使

用します。運送料が計算され、呼び出し側のメソッドへ戻った後では、セッション Beanは以後の呼び出しのためにその状態を格納する必要はありません。

これに対して、ステートフル・セッション Bean は、呼び出しの前後の会話の状態を維持し

ます。そのため、オンライン店舗の買い物かごのようなアプリケーションに使用できます。

メッセージ駆動型 Bean は、非同期 JMS メッセージを受信するために使用します。

エンティティについて EJB 3.0 エンティティは、永続データを管理するオブジェクトです。複数の依存する Java オブジェクトを

使用でき、主キーで一意に識別できます。EJB 3.0 エンティティは、@Entityアノテーションを使用して、

エンティティとして古い単純な java オブジェクト(POJO)を定義できる EJB 3.0 Java Persistence API を実

装します。エンティティ・クラスに関する以下の追加要件に注意してください。

public または protected の引数のないコンストラクタを持つこと。

上位のクラスであること。

final ではないこと。

エンティティ・クラスのメソッドや永続インスタンス変数が final ではないこと。

エンティティ・インスタンスを、リモート・インタフェースなどを通じて独立したオブジェクトと

して渡す場合は、シリアライズ可能なインタフェースを実装すること。

EJB 3.0 エンティティは、顧客表の行や従業員表の従業員レコードのようなデータベースからの永続データを表

します。また、エンティティは、複数のクライアントが共有できます。たとえば、各種のクライアントが従業

員エンティティを使用して、従業員の年俸を計算したり、従業員の住所を更新したりできます。エンティティ・

オブジェクトの特定のフィールドは永続化できます。@Transientアノテーションのないエンティティのすべ

2-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

作成したオブジェクトの確認

てのフィールドは、永続と見なされます。

EJB 3.0 の主な特長は、古いバージョンのデプロイメント・ディスクリプタの代わりにメタデータ・アノテーショ

ンを使用して、オブジェクト・リレーショナル・マッピングを含むエンティティを作成できることです。たとえ

ば 、 エ ン テ ィ テ ィ の empId 属 性 を EMPLOYEES 表 の EMPNO 列 に マ ッ プ す る に は 、 表 名 に は

@Table(name="Employees")アノテーションを使用し、属性には@Column(name="EMPNO")アノテーション

を使用します。このチュートリアルでは、このようなアノテーションが登場し、使用されます。マッピング・ア

ノテーション構文に関する詳細は、Oracle Technology Network(OTN)で“How-To Use EJB 3.0 O-R Mapping Annotations”を参照してください。

リモート・アクセスとローカル・アクセス クライアントは、ローカルまたはリモートで EJB エンティティにアクセスできます。ローカル・アクセスは、

EJB と同じ仮想マシンで動作するクライアント用です。リモート・アクセスは、Web アプリケーションのよ

うに別の仮想マシンで動作するクライアント用です。

エンティティの作成 データベース表から EJB 3.0 エンティティを作成するには、Create CMP Entity Beans from Tables ウィザードを使

用します。なお、このウィザードを使用するには、データベース接続が必要です。このウィザードの名前は、

コンテナが管理する永続性エンティティ Bean を作成した、以前の EJB バージョンから引き継いだものです。

EJB 3.0 エンティティを作成するには、以下の手順を実行します。

1. 「Model」プロジェクトを右クリックし、コンテキスト・メニューから「New」を選択します。

2. New Gallery で、「Business Tier」ノードを開きます。Categories リストで「EJB」を選択し、Itemsリストで「Entities from Tables (JPA/EJB 3.0)」を選択します。「OK」をクリックします。

3. Create Entities from Tablesウィザードが表示されます。ウィザードのWelcomeページが表示されたら、

「Next」をクリックします。

4. ウィザードの Database Connection Details ページで、Connection ドロップダウン・リストから

「SRDemo」を選択し、「Next」をクリックします。

5. ウィザードの Select Tables ページで、「Query」をクリックして使用できる表を表示します。

「Add All 」をクリックして、Availableリストからすべての表をSelectedリストへ移動し、「Next」

をクリックします。

6. ウィザードのEntities from Tablesページで、パッケージ名としてorg.srdemo.persistenceと入力

します。このパッケージで作成するクラスは、アプリケーション・データを永続化します。Collection type for Relationship Fieldsドロップダウン・リストで、「java.util.List」を選択します。その他の値は

デフォルトのまま変更せず、「Next」をクリックします。

7. ウィザードの Specify Entity Details ページを使用すると、選択したデータベースの各表にマップする

エンティティとクラスの名前を変更できます。「Next」をクリックして、デフォルトのマッピングを

受け入れます。

8. ウィザードの Summary ページで、「Finish」をクリックしてエンティティを作成します。これには、

しばらく時間がかかる場合があります。完了すると、作成が完了したことを知らせるメッセージが、

ログ・ウィンドウに表示されます。

9. 「Save All 」をクリックして、作業を保存します。

作成したオブジェクトの確認 これで、選択した各表と複合主キー用の EJB 3.0 エンティティが作成されました。作成したオブジェクトは、

次に示すように、ウィザードで指定したパッケージの名前の下に編成される古い単純な Java オブジェクト

永続性エンティティの開発 2-3

(POJO)です。

これらのオブジェクトが他の Java ファイルと異なる点は、EJB エンティティとしてオブジェクトを識別し、

データベースの表にオブジェクト・リレーショナル・マッピングを実行するアノテーションがあるところで

す。これらのメタデータ・アノテーションによって、コンテナにこれらのエンティティを管理する方法を指

示します。

ファイルを開いてアノテーションを確認するには、以下の手順を実行します。

1. Applications Navigator で、「Model」プロジェクトを開き、さらに「Application Sources」と

「org.srdemo.persistence」パッケージを開きます。これで、作成したすべてのオブジェクトを確認でき

ます。

2. 「ServiceHistories.java」をダブルクリックして、エディタ・ウィンドウで開きます。

3. ファイルに以下のアノテーションがあることを確認できます(画面をスクロールする必要がある場

合があります)。

アノテーション 説明 @Entity ファイルを EJB 3.0 エンティティとして識別します。 @NamedQuery 実行時にデータを取り出すために使用できる問合せ @Table エンティティ用の主表を指定します @IdClass 複合主キー用のクラスを指定します @Id どのプロパティがエンティティ用の識別子であるかを定義できます @Column 永続プロパティまたはフィールド用のマップされた列を指定します @ManyToOne 表間の外部キー関係の種類を指定します @JoinColumn 外部キー関係用の結合列と参照先列を指定します

2-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

名前付き問合せの定義

名前付き問合せの定義 名前付き問合せを使用すると、設計時に問合せを定義し、実行時に使用できます。アノテーションを使用す

ると、エンティティに問合せを格納できます。これらのアノテーションは、EJB 問合せ言語(EJBQL)を使

用して問合せを定義します。

問合せにパラメータを入れることで、問合せを再使用して異なる結果を返すことができます。EJBQL では、

前にコロンを付けた文字列としてパラメータを示します。パラメータを指定する場合、実行時に問合せを呼

び出すときに値を与える必要があります。

EJB 3.0 問合せの定義に関する詳細は、Oracle Technology Network(OTN)で“How-To Queries using EJB 3.0”を参照してください。

デフォルトで、Oracle JDeveloper が表から EJB 3.0 エンティティを作成するとき、表にあるすべてのデータ

のリストを取得するために、ServiceHistories.java ファイルにある ServiceHistories.findAll

のような名前付き問合せを追加します。このとき、ユーザーが電子メール・アドレスでログインし、アプリ

ケーションが対応した Users オブジェクトを取り出すために問合せを発行する必要のある場合を除いて、

アプリケーションにどのような追加の問合せが必要であるかはわかりません。電子メール・アドレスでユー

ザーを問い合せる機能を提供する名前付き問合せを定義するには、以下の手順を実行します。

1. Applications Navigatorで、「Users.java」ファイルをダブルクリックしてエディタ・ウィンドウで

開きます。

2. @NamedQueryアノテーションがある行の上に、次のアノテーションを追加します。 @NamedQueries({

プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、 javax.persistence.NamedQueriesをインポートします。

3. 初の@NamedQueryアノテーションの後の新しい行で、ソース・コードに次のアノテーションを

追加します。 @NamedQuery(name="findUserByEmail",query="select" + " object (user) from Users user where user.email = :email")

4. (ステップ 6 の例に示すように) 初の名前付き問合せの後に区切り文字としてカンマを追加します。

5. 次の行を追加して、名前付き問合せの集合を閉じます。 })

初の名前付き問合せではパラメータを使用せず、2 番目の名前付き問合せでは問合せの WHERE句にパラメータ(前にコロンが付いている文字列)を渡していることに注意してください。次の例

で、これらのアノテーションを示します。

6. 「SaveAll 」をクリックして、作業を保存します。

アプリケーションを開発しながら、追加の名前付き問合せを定義していきます。

永続性エンティティの開発 2-5

マスター/ディテール・エンティティ用のカスケード型の指定

マスター/ディテール・エンティティ用のカスケード型の指定 EJB 3.0 では、EntityManager API が導入されています。この API を使用すると、新規のエンティティを永続

化し、既存のエンティティを削除できます。また、データ・ストアからエンティティの状態を更新し、分離

したエンティティの状態を永続性コンテキストに戻すことができます。クライアントは、ローカルに Beanインスタンスを分離して更新し、EntityManager へ返信してデータベースに結合し、同期化できます。

永続性操作を関連エンティティに波及させるには、カスケードを使用します。デフォルトの動作では、カス

ケードは使用されません。

カスケードには 4 つの種類があります。

PERSISTは、永続化(作成)操作を関連エンティティにカスケードします。

MERGEは、結合操作を関連エンティティにカスケードします。

REMOVEは、削除操作を関連エンティティにカスケードします。

REFRESHは、更新操作を関連エンティティにカスケードします。

これらのカスケード型は、単独でも互いに組み合わせても使用できます。追加オプションの ALLを使用する

と、4 つのカスケード型すべての組合せを表すことができます。

ServiceRequests エンティティには ServiceHistories エンティティが関連付けられているため、マスター・サー

ビス・リクエストに対して作成操作を呼び出すとき、詳細な Service Histories レコードが永続化されているこ

とを確認する必要があります。そのために以下の手順を実行します。

1. エディタ・ウィンドウでServiceRequests.javaを開くか、すでに開いている場合はServiceRequests.javaのタブをクリックして切り替えます。

2. ServiceHistoriesエンティティとの関連を確立する@OneToManyアノテーションまでスクロールし、

属性リストの先頭にcascade={CascadeType.PERSIST}を追加します(以下に示すように括弧で

囲みます)。必ず、区切り文字としてカンマを入れてください。

プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、 javax.persistence.CascadeTypeをインポートします。

3. 「SaveAll 」をクリックして、作業を保存します。

データベース順序を使用した ID の生成 新規のサービス・リクエスト・レコードは、SERVICE_REQUESTS_SEQデータベース順序を使用して、主

キーの値を生成する必要があります。EJB 3.0 では、アノテーションを使用して、主キーを生成する方法

を指定できます。SVR_IDを生成する方法を指定するには、以下の手順を実行します。

1. エディタ・ウィンドウでServiceRequests.javaを開き、SVR_ID列用の@Columnアノテーションの上に

ある@IDアノテーションまでスクロールします。@IDアノテーションの次の行に以下のコードを追

加して、エンティティがSERVICE_REQUEST_SEQ_GENという名前のシーケンス・リクエスト・ジ

ェネレータを使用してSVR_ID列用のIDを生成するように指定します。 @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="SERVICE_REQUESTS_SEQ")

2. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、javax.persistence.GeneratedValue

とjavax.persistence.GenerationTypeをインポートします。

2-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

デフォルト値の設定

これで、 SVR_ID 列用のシーケンス・ジェネレータが、データベースに定義された

SERVICE_REQUESTS_SEQシーケンスを使用するように設定されました。

3. 「SaveAll 」をクリックして、作業を保存します。

デフォルト値の設定 サービス・リクエスト・レコードとサービス履歴レコードには、デフォルトで現在の日付になる日付フィー

ルドがあります。また、新規のサービス履歴レコード用の次の行項目に行番号を設定する必要があります。

NULL フィールドにこれらのデフォルト値を設定するには、以下の手順に従います。

4. エディタ・ウィンドウで「ServiceRequests.java」を開き、Structure ウィンドウで「setAssignedDate」メソッドをダブルクリックしてメソッドまで移動します。

5. this.assignedDate = assignedDate;という行を次のように変更します。

this.assignedDate = (assignedDate==null)?new Timestamp(System.currentTimeMillis()):assignedDate;

6. Structure ウィンドウで「setRequestDate」メソッドをダブルクリックして、メソッドまで移動します。

7. this.requestDate = requestDate;という行を次のように変更します。

this.requestDate = (requestDate==null)?new Timestamp(System.currentTimeMillis()):requestDate;

8. エディタで ServiceHistories.java ファイルを開き(すでに開いている場合はそれに切り替え)、

Structure ウィンドウで「setSvhDate」メソッドをダブルクリックしてメソッドまで移動します。

9. this.svhDate = svhDate;という行を次のように変更します。

this.svhDate = (svhDate==null)?new Timestamp(System.currentTimeMillis()):svhDate;

10. 新規レコードの行番号をデフォルトである次の行項目にするには、次の行項目番号を取得する

ServiceHistories エンティティに新規のメソッドを追加する必要があります。

ファイルの終わりの}(中括弧)の上に次のメソッドを追加します。プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、java.util.List をインポートします。

public Long getNextLineItem() { // Need to loop through the SRHistrories collection and //find the largest value for the Lineno rather than // working on the size of the collection –DRM

Long maxLineNo = new Long(0); final ServiceRequests servReqs = getServiceRequests(); if (servReqs != null) {

final List<ServiceHistories> istList = servReqs.getServiceHistoriesList();

if (histList != null) {

for (ServiceHistories svh:histList)

永続性エンティティの開発 2-7

後続コードと一致する属性のマッピング

{ //The collection may have empty nodes so // we just skip those final Long testLineNo = svh.getLineNo(); if (testLineNo != null){ if (testLineNo > maxLineNo) {

maxLineNo = testLineNo; } }

} }

} return ++maxLineNo;

}

11. 行番号を設定するときに、そのメソッドを呼び出します。this.lineNo = lineNo;という行を

次のように変更して、setLineNo()メソッドを変更します。

this.lineNo = (lineNo==null )?getNextLineItem():lineNo;

12. 「SaveAll 」をクリックして、作業を保存します。

後続コードと一致する属性のマッピング ServiceRequests エンティティには、データベースの CREATED_BY列と ASSIGNED_TO列への Usersオブ

ジェクトの 2 つのマッピングが含まれています。このチュートリアルの残りのコードが正しく動作するよう

に 、 ServiceRequests.users を CREATED_BY に マ ッ プ し 、 ServiceRequests.users1 を

ASSIGNED_TOにマップする必要があります。ただし、マッピングが逆の順序で作成される場合があります。

後続のコードが正しく動作するように、これらの列がマップされることを確認するには、以下の手順を実行

します。

1. エディタ・ウィンドウで「ServiceRequests.java」を開き、ASSIGNED_TO列用のマッピングまでス

クロールします。その列にマップされている属性がusersである場合は、次のスクリーンショッ

トに示すように、その名前をusers1に変更します。

2. CREATED_BY列用のマッピングまでスクロールします。その列にマップされている属性がusers1

である場合は、次のスクリーンショットに示すように、その名前をusersに変更します。

3. 「Rebuild 」をクリックして、プロジェクトをコンパイルします。

ログ・ウィンドウの Messages タブに、コンパイルの正常終了が表示されます。

2-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

まとめ

まとめ これで、EJB 3.0 エンティティを使用する永続モデルが完成しました。実行した主な作業は、次のとおりです。

Create CMP Entity Beans from Tables ウィザードを使用して、SRDEMOスキーマの表すべてに EJB 3.0エンティティを作成しました。

作成したエンティティを調べて、POJO をエンティティとして識別するアノテーションを確認し、

データベースの表へのオブジェクト・リレーショナル・マッピングを実行しました。

アノテーションを使用して、名前付き問合せ、カスケード型、および ID 生成方法を追加しました。

NULL 日付フィールドを現在の日付にデフォルト設定し、NULL 行番号を次の行項目にデフォルト

設定しました。

このチュートリアルの残りのコードと一致するように、属性がマップされていることを確認しました。

永続性エンティティの開発 2-9

まとめ

2-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

3 セッション・ファサードの開発

この章では、セッション・ファサード Bean とインタフェースを開発する方法について説明します。

前の章をまだ完了していない場合は、¥setupディレクトリの¥solutionsサブディレクトリで前の章のソ

リューションにアクセスできます(¥setupディレクトリを作成する方法については、第 1 章の"環境のセッ

トアップ"の項を参照してください)。適当なディレクトリにSRDEMOCh02.zipファイルを抽出し、Oracle JDeveloperでSRDEMO.jwsワークスペースを開き、作業を継続します。

この章では、以下のトピックについて説明します。

データ・モデル・セッション・ファサードの作成

シングル・レコードを返す Query メソッドの変更

関連レコードを返すメソッドの追加

まとめ

セッション・ファサードの開発 3-1

データ・モデル・セッション・ファサードの作成

データ・モデル・セッション・ファサードの作成 セッション・ファサードは、基礎となる EJB(Enterprise JavaBeans)との統一されたインタフェースをクラ

イアント・オブジェクトに提供します。クライアントは、サーバーに存在し、適切な EJB メソッドを呼び出

すファサードのみと対話します。その結果、クライアントと EJB の間での依存関係と通信が減少します。

セッション・ファサードなしでリモート・アクセスを実行している場合、クライアントがネットワーク経由

で EJB 3.0 エンティティに直接アクセスするには、多数のリモート呼び出しが必要になります。そのため、

大量のネットワーク通信が発生して、パフォーマンスが低下します。さらに、ファサードがない場合、クラ

イアントはビジネス・オブジェクトの実装に直接依存するので、EJB のインタフェースが変化すると、クラ

イアント・オブジェクトも変更しなくてはなりません。

この項では、前の章で作成した EJB データ・モデル用のセッション・ファサードを作成します。そのために

以下の手順を実行します。

1. Applications Navigator で「Model」ノードを右クリックし、コンテキスト・メニューから「New」を

選択します。

2. New Gallery で、Categories リストの「Business Tier」を開き、「EJB」を選択します。次のスクリ

ーンショットに示すように、Items リストから「Session Bean (EJB 1.1/2.x/3.0)」を選択し、「OK」

をクリックして、Create Session Bean ウィザードを呼び出します。

3. Create Session Bean ウィザードの Welcome ページが表示されたら、内容を読み、「Next」をクリック

します。

4. ウィザードのEJB Name and Optionsページで、EJB名としてServiceRequestFacadeと入力しま

す。

セッションの種類がステートレスであり、トランザクションの種類がコンテナであることを確認し

ます。トランザクションの種類としてコンテナを指定すると、コンテナがトランザクションを管理

できるようになるので、トランザクション・メカニズムをコーディングする必要がありません。独

自のトランザクション・メカニズムをコーディングしたい場合のみ、変更してください。

3-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データ・モデル・セッション・ファサードの作成

「Generate Session Facade Methods」のチェック・ボックスが選択されていることを確認します。

このページの他の値はデフォルトのままにします。「Next」をクリックします。

5. ウィザードの Select EJB 3.0 Entity Methods ページで、「Core Facade Methods」のチェック・ボックス

を除くすべてのチェック・ボックスの選択を解除します。これらのメソッドは、トランザクションを

サポートする中核的な CRUD メソッドです。

次に示すように、Users を開き、「findUserByEmail」のチェック・ボックスを選択します。「Next」をクリックします。

注意:名前付き問合せ findUserByEmail が表示されない場合は、Create Session Bean ウィザードを

キャンセルし、「Rebuild 」をクリックしてウィザードを再び起動します。

6. ウィザードのClass Definitionsページで、(スクリーンショットに示すように)Bean Classをorg.srdemo.business.ServiceRequestFacadeBeanに変更し、「Next」をクリックします。

セッション・ファサードの開発 3-3

データ・モデル・セッション・ファサードの作成

7. EJB Component Interfaces ページで、(次のスクリーンショットに示すように)「Implement a Remote Interface」と「Implement a Local Interface」の両方が選択されていることを確認し、「Next」をク

リックします。

コマンドライン・テスト・クライアントを使用できるように、リモート・インタフェースを実装し

ます。JSP のように同じ Java Virtual Machine(JVM)で動作するクライアントには、ローカル・イン

タフェースが必要です。

8. Summary ページで、「Finish」をクリックします。org.srdemo.businessパッケージが作成され

ます。

3-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データ・モデル・セッション・ファサードの作成

9. Applications Navigator で 、 「 org.srdemo.business 」 パ ッ ケ ー ジ を 開 き 、

「ServiceRequestFacadeBean.java」を選択します。Structure ウィンドウで「Sources」を開き、次の

ようにオブジェクトが作成されていることを確認します。

セッション Bean(ServiceRequestFacadeBean.java)

リモート・インタフェース(ServiceRequestFacade.java)

ローカル・インタフェース(ServiceRequestFacadeLocal.java)

10. Applications Navigator で「Model」ノードを選択し、「Rebuild 」をクリックして、プロジェク

トをコンパイルします。次のスクリーンショットに示すように、Messages Log ウィンドウにコンパ

イルの正常終了を示すメッセージが表示されます。

セッション・ファサードの開発 3-5

シングル・レコードを返す Query メソッドの変更

11. まだ開いていない場合は、「ServiceRequestFacadeBean.java」をダブルクリックして、エディタ・

ウィンドウで開きます。コードをスクロールして、デフォルトで何が作成されているかを調べま

す。メソッドを表示して、エンティティ・オブジェクトを作成および永続化させます。また、Usersエンティティ・オブジェクトに追加した名前付き問合せを実装するメソッドも表示されます。な

お、findUserByEMail()メソッドが、名前付き問合せを定義したとき、指定したパラメータ

を取ることに注意してください。

シングル・レコードを返す Query メソッドの変更 前の章では、実行時に電子メール・アドレスでユーザーを問い合せるために、使用できる Users エンティテ

ィで名前付き問合せを定義しました。セッション・ファサードを生成するとき、ユーザーのリストを返すメ

ソッドを自動的に生成する、この名前付き問合せを入れました。ただし、ただ 1 人のユーザーを返すメソ

ッドが必要です。この項では、レコードのリストでなく、1 つのレコードだけを返すように、セッション・

ファサード Bean とインタフェースを変更します。そのために以下の手順を実行します。

1. エディタ・ウィンドウで「ServiceRequestFacadeBean.java」を開きます。すでに開いている場合は、

そのタブをクリックします。

2. Structureウィンドウで、「findUserByEmail()」メソッドを右クリックし、コンテキスト・メ

ニューから「Properties」を選択します。メソッドのプロパティを設定すると、Beanおよびその

ローカル・インタフェースとリモート・インタフェースに変更が反映され、同期化されます。

3. Bean Method Detailsダイアログ・ボックスで、Return Typeをorg.srdemo.persistence.Usersに変更します。「OK」をクリックします。

4. エディタでファイルの終わりまでスクロールし、以下の行を変更します。

public Users findUserByEmail(Object email) {

return

em.createNamedQuery("findUserByEmail").setParameter("email",

email).getResultList(); }

3-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

関連レコードを返すメソッドの追加

これらの行を次のように変更します。

public Users findUserByEmail(Object email) {

return

(Users)em.createNamedQuery("findUserByEmail").setParameter("email ", email).getSingleResult(); }

変更された内容は、次のとおりです。

5. 「Save All 」をクリックして、作業を保存します。

関連レコードを返すメソッドの追加 セッション・ファサードが問合せを呼び出して、電子メール・アドレスで要求されたユーザーを返すように

なったので、そのユーザーが作成したサービス・リクエストのリストを返すメソッドを追加する必要があり

ます。これは、現時点でファサードに対して行う 後の変更です(アプリケーションの開発進行に伴い、さ

らに多くの変更が必要になります)。

関連レコードの集合を返すメソッドを追加するには、以下の手順を実行します。

1. エディタで「ServiceRequestFacadeBean.java」を開きます。すでに開いている場合は、そのタブを

クリックします。

2. Structure ウィンドウで、「Methods」ノードを右クリックし、コンテキスト・メニューから「New Method」を選択します。このようにメソッドを追加すると、Bean およびそのローカル・インタフ

ェースとリモート・インタフェースに変更が反映され、同期化されます。

3. Bean Method Details ダイアログ・ボックスで、次の値を入力します。「OK」をクリックします。

フィールド 値

Name findSRbyUser

Return Type java.util.List<org.srdemo.persistence.ServiceRequests>

Parameters Object email

セッション・ファサードの開発 3-7

まとめ

4. エディタで、追加したメソッドを検索して行を変更します。

return null;

から

return findUserByEmail(email).getServiceRequestsList();

5. 「Save All 」をクリックして、作業を保存します。

まとめ これで、セッション・ファサード Bean とインタフェースが開発されました。実行した主な作業は、次のと

おりです。

Create Session Bean ウィザードを使用して、EJB 3.0 セッション Bean およびリモート・インタフェー

スとローカル・インタフェースを作成しました。

ユーザーのリストではなく、1 つの Users オブジェクトを返すように、セッション Bean の名前付き

問合せへの呼び出しを変更しました。

指定したユーザーが作成したサービス・リクエストに関連するリクエストのリストを返すよう、

セッション Bean にメソッドを追加しました。

3-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

4 データ・モデルの配置とテスト

この章では、OC4J を起動し、前の章で作成したセッション Bean を配置する方法について説明します。また、

データベースにレコードを挿入するサンプル・クライアントを作成および実行して、データ・モデルをテス

トする方法について説明します。

前の章をまだ完了していない場合は、¥setupディレクトリの¥solutionsサブディレクトリで前の章のソ

リューションにアクセスできます(¥setupディレクトリを作成する方法については、第 1 章の"環境のセッ

トアップ"の項を参照してください)。適当なディレクトリにSRDEMOCh03.zipファイルを抽出し、Oracle JDeveloperでSRDEMO.jwsワークスペースを開き、作業を継続します。

この章では、以下のトピックについて説明します。

OC4J の起動とアプリケーションの配置

名前付き問合せの追加

サンプル・クライアントの作成

データ・モデルのテスト

まとめ

データ・モデルの配置とテスト 4-1

OC4J の起動とアプリケーションの配置

OC4J の起動とアプリケーションの配置 前の章では、セッション・ファサード Bean とインタフェースを作成しました。この項では、Oracle JDeveloperに付属している内蔵 OC4J サーバーにセッション Bean を配置します。この Bean を実行すると、Bean は配置

され、JDeveloper IDE に内蔵されている OC4J サーバーで動作します。

OC4J を起動し、アプリケーションを配置するには、以下の手順を実行します。

1. エディタ・ウィンドウまたは Applications Navigator で、「ServiceRequestFacadeBean.java」を右クリッ

クし、コンテキスト・メニューから「Run」を選択します。

2. 次のスクリーンショットに示すように、ログ・ウィンドウにエラーが表示されず、OC4J が正常に初

期化されたことを確認します。(すでにセッション Bean を実行したことがある場合、OC4J は再初期

化されますが、初期化されたことを示すメッセージは表示されません)。

4-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

名前付き問合せの追加

名前付き問合せの追加 これで、データベース・オブジェクトと通信するために、必要なサービスを提供するセッション・ファサー

ド Bean が作成されました。ただし、アプリケーションのビュー部分を開発する前に、モデルが正常に動作

していることを確認するためのテストを実行できます。

Oracle JDeveloper は、EJB の機能をテストするために、サンプル・クライアント・クラスを作成する機能を

提供しています。ここで、新規のサービス・リクエストをデータベースに追加するためのアプリケーション

の機能をテストするかどうか決定します。サービス・リクエストを作成するために必要なコードについて検

討するときは、以下の手順を実行します。

ServiceRequests.javaを調べます。

別の名前付き問合せが必要かどうか決定します。

エンティティ Bean に名前付き問合せを追加します。

セッション Bean を変更します。

これらの作業を行うには、以下の手順を実行します。

1. Applications Navigator で、「ServiceRequests.java」を選択します。

2. Structureウィンドウで、(次のスクリーンショットに示すように)「Methods」ノードを開き、下方向

へスクロールしてsetterメソッドを調べます。setUsers()、setUsers1()、およびsetProducts()メソッドには、オブジェクトを渡す必要があります。

データ・モデルの配置とテスト 4-3

名前付き問合せの追加

3. Applications Navigator で、「ServiceRequestFacadeBean.java」を選択し、Structure ウィンドウでその

メソッドを確認します。すでに Usersオブジェクトに追加した名前付き問合せへアクセスするため

に作成した Users オブジェクトを検索する、findUserByEmail()メソッドを見つけることがで

きます。ただし、Products オブジェクトを検索するメソッドはありません。新規のサービス・リ

クエストを作成するとき、setProducts()メソッドに Productsオブジェクトを渡すことができ

るように、ID に基づいて Productsオブジェクトを検索するメソッドの追加を決定します。

4. Applications Navigatorで、「Products.java」をダブルクリックしてエディタ・ウィンドウで開き

ます。

5. 下のスクリーンショットに示すように、次の名前付き問合せを追加します。

@NamedQuery(name="findProductById", query="select" + " object (product) from Products product where" + " product.prodId = :prodId")

注意:このファイルには複数の名前付き問合せが入っているため、カンマで区切り、アノテー

ション@NamedQueries({ })で囲む必要があります。プロンプトが表示されたら、[Alt]を押しな

がら[Enter]キーを押して、javax.persistence.NamedQueriesをインポートします。不明な点

がある場合は、本書の第 2 章を参照してください。

4-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

名前付き問合せの追加

6. エンティティに名前付き問合せを追加したので、セッション Bean を変更する必要があります。

初に、追加した名前付き問合せをセッション Bean が使用できるように、Products.java をコンパイル

する必要があります。

「Make 」をクリックします。

7. Applications Navigator で、「ServiceRequestFacadeBean.java」を右クリックし、コンテキスト・メ

ニューから「Edit Session Facade」を選択します。

8. Session Façade Options ダイアログ・ボックスで、「Products」を開きます。「findProductById」メ

ソッドを選択し、「OK」をクリックします。Oracle JDeveloper は、セッション・ファサード Beanとインタフェースに、新規の名前付き問合せにアクセスするコードを生成します。

9. Structure ウィンドウで、「findProductById」メソッドを右クリックし、コンテキスト・メニューか

ら「Properties」を選択します。メソッドのプロパティを設定すると、Bean およびそのローカル・

インタフェースとリモート・インタフェースに変更が反映され、同期化されます。

10. Bean Method Detailsダイアログ・ボックスで、Return Typeをorg.srdemo.persistence.Productsに変更し、ParametersをLong prodIdに変更して、「OK」

をクリックします。

11. エディタで、ファイルの終わりまでスクロールし、次の行を変更します。

return

em.createNamedQuery("findProductById").setParameter("prodId",

prodId).getResultList();

この行を次のように変更します。

データ・モデルの配置とテスト 4-5

サンプル・クライアントの作成

return

(Products)em.createNamedQuery("findProductById").setParameter ("prodId", prodId).getSingleResult();

変更された内容は、以下のとおりです。

12. 「Save All 」をクリックして、作業を保存します。

13. ファサードを変更したので、Applications Navigator で「ServiceRequestFacadeBean.java」を右クリッ

クし、コンテキスト・メニューから「Run」を選択して、ファサードを再び配置します。

Embedded OC4J Server Log ウィンドウに、起動日時と "Ready message received from Oc4jNotifier"が表示されることを確認します。

サンプル・クライアントの作成 サンプル・クライアントを作成するには、以下の手順を実行します。

1. Applications Navigator で、「ServiceRequestFacadeBean.java」を右クリックし、コンテキスト・メニュー

から「New Sample Java Client」を選択します。

2. Sample EJB Java Client Detailsダイアログ・ボックスで、Client Class Nameをorg.srdemo.client.ServiceRequestFacadeClientEmbedに変更します。

(次のスクリーンショットに示すように)「Connect to OC4J Embedded in JDeveloper」が選択され

ていることを確認し、「OK」をクリックします。

3. org.srdemo.client パッケージに ServiceRequestFacadeClientEmbed.java ファイルが作

成され、エディタ・ウィンドウに開かれます。コードを調べると、生成されたサンプル・クライアン

トが、単に初期のセッション・コンテキストのハンドルを取得するだけであることがわかります。

4. 次に、サービス・リクエスト・レコードとサービス履歴レコードを挿入し、処理の経過を示すメッセー

ジを表示するようにサンプル・クライアントを変更します。新規の ServiceRequest オブジェクトを

作成するためにコードを追加し、それらのStatus、RequestDate、Products、ProblemDescription、

および Usersプロパティを設定します。

main()メソッドで、次の行を検索します。

4-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

サンプル・クライアントの作成

ServiceRequestFacade serviceRequestFacade = (ServiceRequestFacade)context.lookup("ServiceRequestFacade");

この行の後に、以下のコードを追加します。

System.out.println("Creating a service request"); ServiceRequests sr = new ServiceRequests(); System.out.println("setting the status"); sr.setStatus("Open"); System.out.println("setting the timestamp for request date"); Timestamp requestDate = new Timestamp(System.currentTimeMillis()); System.out.println(requestDate); sr.setRequestDate(requestDate); System.out.println("getting product object with id = 100"); Products product = serviceRequestFacade.findProductById(new Long(100)); System.out.println("setting the product for the request"); sr.setProducts(product); System.out.println("setting problem description"); sr.setProblemDescription("This is my first problem request"); System.out.println("need to retrieve user object"); Users user = serviceRequestFacade.findUserByEmail("ghimuro"); System.out.println("setting the user"); sr.setUsers(user);

5. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、以下をインポートします。 org.srdemo.persistence.Products

org.srdemo.persistence.ServiceHistories

org.srdemo.persistence.ServiceRequests org.srdemo.persistence.Users

java.sql.Timestamp

6. ServiceHistories オブジェクトを作成し、そのプロパティを設定するコードを追加します。追

加したコードのすぐ後に以下のコードを追加します。 System.out.println("create service history for notes"); ServiceHistories historyNotes = new ServiceHistories(); historyNotes.setNotes("This is my first problem request"); historyNotes.setLineNo(new Long (1)); historyNotes.setServiceRequests(sr); historyNotes.setSvhType("Customer"); historyNotes.setSvhDate(requestDate); historyNotes.setUsers(user);

7. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、以下をインポートします。 org.srdemo.persistence.ServiceHistories

データ・モデルの配置とテスト 4-7

データ・モデルのテスト

8. ServiceHistoriesオブジェクトのインスタンスを作成したので、ServiceRequestsオブジェ

クトの serviceHistoriesCollectionプロパティを設定できます。 初に、このプロパティを

設定するために使用する集合を作成します。追加したコードの下に以下のコードを追加します。

System.out.println("adding history to collection"); List<ServiceHistories> historyList = new ArrayList<ServiceHistories>(); historyList.add(historyNotes); System.out.println("setting the history list in the " + " ServiceRequest object"); sr.setServiceHistoriesList(historyList);

9. [Alt]を押しながら[Enter]キーを押して、以下をインポートします。 java.util.List

java.util.ArrayList

10. ファサードからメソッドを呼び出して、データベースにサービス・リクエストを作成します。前の

章で ServiceRequestエンティティに設定したカスケード型(PERSIST)のために、persist()

操作は関連する ServiceHistoriesエンティティにカスケードします。追加したコードの下に以

下のコードを追加します。

System.out.println("calling the persistEntity() facade " + "method"); serviceRequestFacade.persistEntity(sr); System.out.println("check the db now");

11. 「Save All 」をクリックして、作業を保存します。

データ・モデルのテスト サンプル・クライアントを作成したので、データ・モデルをテストできます。EJB 3.0 クライアントを実行

し、データベースにレコードが挿入されたことを確認します。

1. Applications Navigator またはエディタ・ウィンドウで、「ServiceRequestFacadeClientEmbed.java」を

右クリックし、コンテキスト・メニューから「Run」を選択します。次に示すように、クライアン

トにコーディングしたメッセージがログ・ウィンドウに表示されます。

4-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データ・モデルのテスト

2. データベースにレコードが挿入されたことを確認します。「Connection Navigator」タブをクリック

して、Connections Navigator を表示します。

3. Connection Navigator で、「Database」、「SRDemo」、「SRDEMO」、および「Tables」を開きます。

4. 「SERVICE_REQUEST」表をダブルクリックして、エディタで開きます。

5. エディタで、「Data」タブをクリックします。次のスクリーンショットに示すように、追加したレ

コードが表示されます(レコードはリストの 後にあるとは限りません)。

ServiceRequestエンティティ Bean に指定したように、SVR_IDがデータベース順序によって生

成されていることに注意してください。

6. 同様に、SERVICE_HISTORIES表のデータベース・レコードを調べます。次のスクリーンショット

に示すように、挿入された新しいレコードが表示されます(この場合も、レコードはリストの 後

にあるとは限りません)。

データ・モデルの配置とテスト 4-9

まとめ

まとめ これで、アプリケーションの配置とテストが完了しました。実行した主な作業は、次のとおりです。

自動で内蔵 OC4J サーバーを起動するセッション Bean を実行しました。

サンプル EJB Java クライアントを作成し、データベースにデータを挿入するように変更しました。

サンプル・クライアントを実行し、データベースにレコードが挿入されることを確認して、データ・

モデルをテストしました。

4-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

5 ユーザー・インタフェースの計画

この章では、アプリケーションのユーザー・インタフェースを計画します。

前の章をまだ完了していない場合は、¥setupディレクトリの¥solutionsサブディレクトリで前の章のソ

リューションにアクセスできます(¥setupディレクトリを作成する方法については、第 1 章の"環境のセッ

トアップ"の項を参照してください)。適当なディレクトリにSRDEMOCh04.zipファイルを抽出し、JDeveloperでSRDEMO.jwsワークスペースを開き、作業を継続します。

この章では、以下のトピックについて説明します。

ページの計画

ナビゲーション・ルールの指定

標準的なルック・アンド・フィールの計画

まとめ

ユーザー・インタフェースの計画 5-1

ページの計画

ページの計画

背景 ここまでで、アプリケーションのデータ・モデルを定義しました。作業を行ってきた Model プロジェクトは、

アプリケーションに必要なビジネス・モデルと永続性サービスを提供します。

初に、SRDEMO データベース・スキーマの 5 つの表を表すエンティティ Bean を開発しました。名前付き

問合せアノテーションを Bean に追加し、以下のような変更を行いました。

マスター/ディテール・エンティティ用のカスケード型の指定

データベース順序を使用した ID の生成

次に、セッション・ファサード Bean とインタフェースを作成しました。以下のために、Create Session Beanウィザードによって、生成したファイルが変更されました。

デフォルトのユーザーのリストではなく、1 つの Usersレコードを返すため

特定のユーザーに関連した、すべてのサービス・リクエストを返すため

Oracle JDeveloper の内蔵 OC4J にセッション Bean を配置しました。次に、アプリケーションをテストするた

めに、サンプル・クライアントを作成しました。エンティティ Bean 用に指定した ID 生成方法を使用して、

2 つの表にレコードを挿入する機能をデフォルトのサンプル・クライアントに追加しました。サンプル・ク

ライアントを実行した後で、新規レコードがデータベースの表に正常に挿入されることを確認しました。

概要 データ・モデルを実装したので、アプリケーションのユーザー・インタフェースの開発を開始できます。

これまでは、Model プロジェクトで作業を行ってきました。これからは、 初にセットアップした他のプ

ロジェクトで作業を行います。

JSF ナビゲーション(ページ・フロー)ダイアグラムを使用して、アプリケーションに必要なページとページ

間の移動を定義するナビゲーション・ルールを計画できます。プロジェクトに JSF テクノロジ・スコープを追

加すると、Oracle JDeveloper は空白のナビゲーション・ダイアグラム faces-config.xmlを作成します。

このダイアグラムを使用せずにページを作成することもできますが、ダイアグラムを使用するとページとナ

ビゲーションを 初から計画する場合に便利です。アプリケーション全体を設計し、必要に応じてページを

追加できます。

この項では、アプリケーション用のページを作成し、ページ間のナビゲーション・ルールを指定します。

注意:すでにページが存在する場合は、Applications Navigator からそれらのページをドラッグして、ダイア

グラムに追加できます。

JSFナビゲーション・ダイアグラムの使用 このチュートリアルでは、JSF ナビゲーション・ダイアグラムに、直接ページを作成します。そのために以

下の手順を実行します。

1. 「ViewController」プロジェクトを右クリックし、コンテキスト・メニューから「Open JSF Navigation」を選択します。

空白の JSF ナビゲーション・ダイアグラムとして表示される faces-config.xmlファイルが、エ

ディタで開かれます。Oracle JDeveloper IDE 画面の右側に、Component Palette と Property Inspectorが表示されます。

注意:空白のダイアグラムが表示されない場合は、エディタの一番下にある「Diagram」タブをクリッ

クします。Component PaletteやProperty Inspectorが表示されない場合は、「View」メニューからを開く

ことができます。

5-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ページの計画

2. ダイアグラムでページを配置しやすくするために、グリッド線を表示できます。ダイアグラムの中

を右クリックし、コンテキスト・メニューから「Visual Properties」を選択します。「Show Grid」チ

ェック・ボックスを選択し、「OK」をクリックします。

3. Component Palette で、「JSF Page」をクリックします。

4. 表示したいページのあるダイアグラムの中をクリックします。下に示すように、ページを表すアイコン

と/untitled1.jsp という見出しが、ダイアグラムに表示されます。なお、ページは単にダイアグラムの中

に作成されるだけで、まだ定義されていないため、アイコンに黄色の警告が付いています。この章では、

後述の章で定義するページを作成します。ページを定義すると、黄色の警告は消えます。

5. アイコンのラベルをクリックし、名前を/app/SRWelcome.jspに変更します(先頭のスラッシュ

と.jsp拡張子は、名前の一部です。省略すると、Oracle JDeveloperによって自動的に追加されます)。

これは、アプリケーションを起動するとき、すべてのユーザーに表示される 初のページです。

ユーザー・インタフェースの計画 5-3

ページの計画

6. 下のスクリーンショットに示す位置に、以下の JSP ページを追加します。

/app/SRCreate.jsp /app/SRList.jsp /app/SREdit.jsp

これらのページは、アプリケーションのすべてのユーザー(顧客、管理者、および技術者)がアク

セスできるページです。

7. (スクリーンショットに示す位置に)管理者だけがアクセスできる次のページを追加します。

/app/management/SRTriage.jsp

8. 次のスクリーンショットに示す位置に、すべての従業員(管理者および技術者)がアクセスできる

ページを追加します。

/app/staff/SRTEdit.jsp

5-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ナビゲーション・ルールの指定

9. 「Save All 」をクリックして、作業を保存します。

ナビゲーション・ルールの指定 アプリケーションのページを作成したので、ユーザーがページ間を移動する方法を定義する必要があります。

ナビゲーションの中央コントロールを使用すると、ユーザーがページ間を移動する方法を簡単に定義し、変

更できます。これは、JDeveloper を使用してアプリケーションに簡単に実装できるベスト・プラクティス、

Model-View-Controller(MVC)設計パターンの一部です。faces-config.xml ファイルはナビゲーション

の制御を定義できるので、ページ自体にナビゲーションをハードコードする必要がありません。

JSF ナビゲーションは、ユーザーが UI コンポーネントをクリックしたときに表示される、次のページを選択

する際の一連のルールによって定義されます。ユーザーがあるページから移動する方法には複数あり、その

ページのルール内の異なるナビゲーション・ケースで各方法を示します。これらのルールは、JSF ナビゲー

ション・ダイアグラムを使用して定義できます。

SRDemo アプリケーションの場合、ナビゲーション・ダイアグラムにナビゲーション・ケースを描画します。

そのため、以下の手順を実行します。

1. Component Palette で、「JSF Navigation Case」をクリックします。

2. ダイアグラムで、 初に移動元ページ/app/SRWelcome.jspのアイコンをクリックし、次に移動

先ページ/app/SRCreate.jspのアイコンをクリックします。

これで、ナビゲーション・ケースが作成され、ダイアグラムでは移動元から移動先への実線の矢

印として表示されます。ここで示すように、<from-outcome>のデフォルト値-successは、ナ

ビゲーション・ケース用のラベルです。

3. ラベルをクリックして変更し、デフォルト・ラベルをnewSRと上書きします。あるいは、Property InspectorでFrom Outcomeプロパティからラベルを変更することもできます。なお、JDeveloperは、

ダイアグラムで自動的にラベルの前にハイフンとスペースを追加します。

4. ナビゲーション・ケースを作成したので、生成された XML コードを調べます。エディタの一番下

にある「Overview」タブをクリックし、ウィンドウの左側にあるリストで「Navigation Rules」をク

リックします。スクリーンショットに示すように、ダイアグラムで作成したルールは Navigation

ユーザー・インタフェースの計画 5-5

ナビゲーション・ルールの指定

Rules ボックスに表示され、ナビゲーション・ケースは Navigation Cases ボックスに表示されます。

5. 「Source」タブをクリックして、選択したルールの XML コードを確認します。

<from-view-id>タグは移動元ページを識別し、<to-view-id>タグは移動先ページを識別しま

す。ページ名の下にある波線は、ページがまだ完全に定義されていないことを示します。

6. また、次のスクリーンショットに示すように、JDeveloper ウィンドウの左下、Applications Navigatorの下にある Structure ウィンドウで、ナビゲーション・ルールを確認できます。「Source」タブをク

リックします。

注意:Structureウィンドウが表示されない場合は、メニューから「View」→「Structure」を選択しま

す。

5-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ナビゲーション・ルールの指定

7. 手順を繰り返して、ダイアグラムでさらにナビゲーション・ケースを作成します。次の表に、ユー

ザーがページ間を移動する方法を示します。たとえば、ユーザーは、SRWelcome ページ上のリンク

をクリックして、SRList ページへ移動できます。

ダイアグラムで線を曲げるには、移動先ページをクリックする前に、線を曲げたい位置でクリック

します。既存の線を曲げるには、[Shift]キーを押しながら、線を曲げたい位置でクリックし、希望

する位置までドラッグします。

注意:ラベルの場合は、文字列を入力すると、JDeveloperが自動的に文字列の前にハイフンとスペー

スを追加します。

移動元 移動先 ラベル SRWelcome SRTriage -assign

SRWelcome SRList -srlist

SRCreate SRList -created

SRList SRWelcome -welcome

SRList SRTEdit -techupdate

SRList SREdit -update

SREdit SRList -saved

SRTEdit SRList -techsaved

SRTriage SRList -triaged

8. 「Save All 」をクリックして、作業を保存します。ダイアグラムは、次のスクリーンショット

のようになります。

ユーザー・インタフェースの計画 5-7

標準的なルック・アンド・フィールの計画

標準的なルック・アンド・フィールの計画 複数のページに標準的なルック・アンド・フィールを与えるには、多くの方法があります。たとえば、ペー

ジのレイアウトを決定するテンプレートを定義できます。また、各ページに標準的なヘッダーとフッターを

入れることもできます。

Oracle JDeveloper には、スタイル・シートをページに適用する単純な方法が組み込まれています。必要なら、

独自のスタイル・シートを定義できます。あるいは、デフォルトで Component Palette に付属しているスタイ

ル・シートを使用することもできます。

標準的な JDeveloper スタイル・シートがアプリケーションに適切なルック・アンド・フィールを提供するよ

う決定します。たとえば、次のようなページについて検討してみます。

5-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

まとめ

JDeveloper スタイル・シートを適用すると、ページは次のように変化します。

統一されたルック・アンド・フィールを実現するには、標準的な見出しスタイルを使用し、すべてのページ

に JDeveloper スタイル・シートを適用するように開発者に指示します。後述の章で実際のページを作成する

際に、スタイル・シートを適用します。

まとめ アプリケーションのユーザー・インタフェースを計画するために実行した主な作業は、次のとおりです。

JSF ナビゲーション・ダイアグラムでページを作成しました。

JSF ナビゲーション・ダイアグラムでページをリンクする方法を指定するナビゲーション・ルール

を定義しました。

JDeveloper スタイル・シートを使用して、標準的なルック・アンド・フィールをページに適用する

計画を実行しました。

ユーザー・インタフェースの計画 5-9

まとめ まとめ

5-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル 5-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

6 ログイン・ロジックの定義

ページを作成する前に、ユーザーがアプリケーションにログインする方法(認証)と特定の機能にアクセス

できる方法(認可)について決定します。この章では、アプリケーションのセキュリティとログイン・ロジック

を定義します。

前の章をまだ完了していない場合は、¥setupディレクトリの¥solutionsサブディレクトリで前の章のソ

リューションにアクセスできます(¥setupディレクトリを作成する方法については、第 1 章の"環境のセッ

トアップ"の項を参照してください)。適当なディレクトリにSRDEMOCh05.zipファイルを抽出し、Oracle JDeveloperでSRDEMO.jwsワークスペースを開き、作業を継続します。

この章では、以下のトピックについて説明します。

アプリケーションのセキュリティの定義

ロールを管理するクラスの作成

まとめ

ログイン・ロジックの定義 6-1

アプリケーションのセキュリティの定義

アプリケーションのセキュリティの定義 アプリケーションが動作する環境で、認証と認可の両方を実装する必要があります。

認証は、どのユーザーがアプリケーションにアクセスできるかを決定します。Java Authentication and Authorization Service(JAAS)は、サービスが認証とユーザー・アクセス制御を実施するパッケージ

です。JAAS 認証は、jazn.xmlファイルが参照する jazn-data.xml構成ファイルに定義されて

います。jazn-data.xmlファイルで、ユーザーID とパスワードを指定し、ロールを作成し、ユー

ザーにロールを割り当てることができます。このアプリケーションでは、ユーザーID にユーザーの

電子メール・アドレスを使用し、すべてのパスワードに welcomeを使用します。

認可は、ユーザーがアプリケーションにログインした後で、どの機能を実行できるかを決定します。

これを制御するために、Java EE デプロイメント・ディスクリプタ・ファイル web.xmlで特定の機

能をロールに許可します。このアプリケーションには、user、technician、manager という 3つのロールがあり、各ユーザーにはそのうちの 1 つのロールだけが割り当てられます。各ロールに

どのページとリンクが使用できるかを指定します。

まず、ユーザーとロールを定義して、コンテナのセキュリティを設定します。次に、特定のユーザーがどの

ページにアクセスできるかを定義して、アプリケーション固有のアクセスを設定します。

コンテナ・セキュリティの設定 Java EE コンテナが管理するセキュリティを使用すると、認証され、認可されたユーザーだけがアクセスでき

る Web アプリケーションを設定できます。コンテナ管理セキュリティは、簡単に使用でき、Java EE プラット

フォームに円滑に統合されます。Java EE コンテナは、特定のユーザーからのすべてのアプリケーション・リ

クエストが、ユーザーのセキュリティ・コンテキストの中で実行されることを保証します。

コンテナ管理セキュリティによって、Oracle Internet Directory(OID)、LDAP、またはファイル・ベースのセ

キュリティ・プロバイダを使用できます。デフォルトのインストールでは、ファイル・ベースのプロバイダ

が使用されます。

コンテナ・セキュリティは、jazn-data.xmlファイルに実装されています。コンテナ・セキュリティを設

定するには、ログインできるユーザーとそのパスワードを指定します。また、ロールを定義し、ユーザーに

割り当てます。

認可されたユーザーID、パスワード、およびロール情報を jazn-data.xmlファイルに追加するには、以下

の手順を実行します。

1. OC4J サーバーが動作している場合は、メニューから「Run」→「Terminate」→「Embedded OC4J Server」を選択して、OC4J サーバーを停止します。

2. Applications Navigator で、「SRDEMO」アプリケーションを選択します。

3. メニューから「Tools」→「Embedded OC4J Server Preferences」を選択します。Oracle JDeveloper 10.1.3では、内蔵 OC4J サーバーは、現在のプロジェクトに含まれる jazn-data.xmlファイルを使用し

ます(存在する場合)。現在のプロジェクトに jazn-data.xmファイルが存在しない場合は、アプ

リケーションの jazn-data.xmlファイルを使用します。そのため、ユーザーとグループの設定を

本番システムに配置でき、テスト用にスタンドアロンの OC4J に配置できます。

4. Embedded OC4J Server Preferences ダイアログ・ボックスの左側にあるツリーから、「Current Workspace」、「Authentication」、および「Realms」を開きます。

領域は、セキュリティの一般的なコンポーネントであり、セキュリティ・ポリシーと特定のユーザー

集合を表すセキュリティ・ドメインです。さまざまなアプリケーションに同じ領域を使用できます。

アプリケーションは、領域の中でブラウザ・ベースのシングル・サインオンに参加するので、領域内

のあるアプリケーションに認証されれば、途中でブラウザを閉じない限り、同じ領域内の別のアプリ

ケーションで再び認証される必要はありません。

Realms ノードに jazn.com領域がすでに存在する場合は、新規の領域を作成しないで、ステップ 6へ進んでください。

6-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

アプリケーションのセキュリティの定義

5. Realmsノードにjazn.com領域が存在しない場合は、「Realms」ノードを選択し、「New」をクリッ

クします。次のスクリーンショットに示すように、Create Realmダイアログ・ボックスでjazn.comという名前を入力し、「OK」をクリックします。jazn-data.xmlのデフォルト領域はjazn.com

ですが、必要であれば独自のデフォルト領域を作成できます。

6. jazn.com ノードで、ツリーから「Users」ノードを選択し、「Add」をクリックします。

7. 以下のユーザーを追加し、Credentialsにwelcomeと入力します。

ghimuro nkochhar bernst daustin sking

これはデータベース内のすべてのユーザーではありませんが、アプリケーションをテストするには

十分です。本番データベースの場合は、アプリケーションにアクセスするすべてのユーザーを追加

する必要があります。実際には、ユーザー数の多い本番システムで、OID または LDAP プロバイダ

を使用します。

8. ツリーで(jazn.com ノードの下にある)「Roles」ノードを選択し、「Add」をクリックします。

9. Create Roleダイアログ・ボックスで、userと入力して「OK」をクリックします。

ログイン・ロジックの定義 6-3

アプリケーションのセキュリティの定義

10. 2 つの追加ロール、technicianとmanagerを作成します。

11. Roles リストで「user」を選択し、「Member Users」タブをクリックします。

Availableリストで以下のユーザーを選択し、「Add 」をクリックします。Selectedリストへ移動

し、userロールを与えます。

ghimuro nkochhar

12. 同様に、skingにmanagerロールを与えます。bernstとdaustinにtechnicianロールを与えま

す。

13. 「OK」をクリックして Embedded OC4J Server Preferences ダイアログ・ボックスを閉じます。

6-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

アプリケーションのセキュリティの定義

14. 入力したすべてのデータは、アプリケーションのルート・ディレクトリにあるファイルに保存されま

す。ファイルの命名規則は、<applicationName>-jazn-data.xml です。このチュートリアルで

は、ファイル名を SRDEMO-jazn-data.xmlとします。必要に応じて、ワードパッドでこのファイル

を開き、宣言的に作成した XML を確認できます。ファイル内のパスワードは暗号化されます。

注意:すでに説明したように、アプリケーション固有のjazn-data.xmlファイルは、プロジェク

トにjazn-data.xmlファイルが存在しない場合のみ使用されます。

コンテナ管理セキュリティの実施 JSF は、デフォルトで、コンテナ管理セキュリティを迂回するサーバー側ナビゲーションを実行します。ア

プリケーションにコンテナ管理セキュリティを実施するには、デフォルトの ViewHandler メカニズムではな

く、HTTP リダイレクトを使用するように JSF ナビゲーション・ケースを設定する必要があります。

これを宣言的に設定するには、以下の手順を実行します。

1. エディタで、「faces-config.xml」を開きます(Applications Navigatorで「ViewController」プロ

ジェクトを右クリックし、「Open JSF Navigation」を選択します)。すでに開いている場合は、

faces-config.xmlに切り替えます。「Overview」タブをクリックします。

2. 左側にあるリストで、「Navigation Rules」ノードを選択します。

3. Navigation Rules リストで、「/app/SRWelcome.jsp」を選択します。

4. Navigation Cases リストで、From Outcome として newSR を持つ項目を選択します。

5. (次のスクリーンショットに示すように)Property Inspector で、Redirect プロパティのドロップダウン・

リストから「true」を選択します。

ログイン・ロジックの定義 6-5

アプリケーションのセキュリティの定義

6. (From Outcomes が assign と srlist である)他の 2 つのナビゲーション・ケースを順番に選択し、

Redirect プロパティを「true」に設定します。

7. 上にあるリストから他のナビゲーション・ルールを選択し、それぞれのナビゲーション・ケースの

Redirect プロパティを「true」に設定します。

アプリケーション・アクセスの設定 ユーザーとロールを作成し、コンテナが使用するロールを与えたので、このアプリケーションで各ロールが

使用できる機能を定義できます。各ロールがアクセスできるページを異なるディレクトリに分割したので、

URL パターンを使用して、各ページ集合へのアクセスを認可するユーザーを定義できます。

このような認可を定義する Java EE デプロイメント・ディスクリプタ・ファイルを宣言的に編集するには、

以下の手順を実行します。

1. Applications Navigator で、「ViewController」→「Web Content」→「WEB-INF」ノードを開き、web.xmlを右クリックします。コンテキスト・メニューから「Properties」を選択します。

2. 左側にあるツリーで、「Login Configuration」ノードを選択します。ウィンドウの Login Configurationセクションで、「Form-Based Authentication」オプションを選択します。フォーム・ベースの認証は、

JSP フォームのようなカスタム Web アプリケーションを使用して、ログオン・ダイアログ・ボック

スを提供します。

注意:フォーム・ベースの認証は、セッションでユーザー名とパスワードの組合せを格納しますが、

リクエスト・オブジェクトにはクリアテキストとして表示されます。フォーム・ベースの認証また

は基本的な認証を使用する場合は、SSLを使用してセキュリティを強化する必要があります。

3. Login Pageをinfrastructure/Login.jspに設定し、Error Pageをinfrastructure/Errors.jspに設定します。これらのページは、次の章で作成するページです。

6-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

アプリケーションのセキュリティの定義

4. 左側にあるツリーで「Security Roles」ノードを選択し、「Add」をクリックします。

5. Create Security Role ダイアログ・ボックスで、Security Role Name として userと入力します。「OK」

をクリックします。

6. 同様に、他の 2 つのロール、technicianと managerを追加します。

注意:認可が正常に機能するには、OC4Jプリファレンスで領域を設定するときに使用したロール名

と同じロール名を使用する必要があります。異なる名前を選択する場合は、OC4J内のロール名に

web.xmlで定義するJava EEセキュリティ・ロールをマップするために、orion-web.xmlファイル

でマッピングを定義する必要があります。

ログイン・ロジックの定義 6-7

アプリケーションのセキュリティの定義

7. セキュリティ・ロールを定義したので、認可を実施するためにセキュリティ制約を割り当てる必要

があります。「Security Constraints」ノードを選択し、「New」をクリックします。

8. Web Resourcesタブで、「Add」をクリックし、Web Resource Nameとして「ALL Manager」を指定

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

9. ALL Manager集合を選択したまま、ウィンドウの下部でURL Patternsタブの右側にある「Add」ボ

タンをクリックします。Create URL Patternダイアログ・ボックスで、faces/app/management/*と入力し、「OK」をクリックします。

10. ALL Manager集合を選択したまま、「Authorization」タブをクリックし、「manager」チェック・ボ

ックスを選択します。

11. 左側にあるツリーでもう一度「Security Constraints」を選択し、「New」をクリックして、さらに 2つのセキュリティ制約を作成します。次の表に示す値を使用します。

Web Resource Collections URL Patterns Authorization AllStaff faces/app/staff/* technician and manager

SRDemoSample faces/app/* user, technician, and manager

12. Security Constraints ノードには、3 つの制約項目があることになります。「OK」をクリックして、

Web Application Deployment Descriptor ダイアログ・ボックスを閉じます。

13. Applications Navigator で、「web.xml」をダブルクリックして、エディタで開きます。エディタの右

側に Component Palette があることに注意してください。Component Palette を使用すると、Propertiesウィンドウの代わりにエディタで web.xml ファイルを宣言的に編集できます。<jsp-config/>

行以後のすべての項目が、指定したセキュリティ制約、ログイン設定、およびセキュリティ・ロー

ルを示していることがわかります。

6-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

アプリケーションのセキュリティの定義

14. エディタでweb.xmlファイルを開くと、指定したすべての要素がStructureウィンドウにも表示され

ます。

15. 「Save All 」をクリックして、作業を保存します。

ログイン・ロジックの定義 6-9

ロールを管理するクラスの作成

ロールを管理するクラスの作成 コンテナのセキュリティを実装したので、アプリケーションからユーザーとロールに関する情報にアクセス

できる必要があります。それには、以下の作業を実行します。

ユーティリティ・クラスの作成

マネージド Bean の作成

ユーティリティ・クラスの作成 このアプリケーションの主なセキュリティ要素は、UserInfo Bean です。この Bean は次に定義します。こ

のクラスを初めて参照すると、このクラスは、コンテナ・セキュリティ属性(たとえば、Users 表の email列と一致する remoteUserの値)を読取り、式言語(EL)で主な情報にアクセスできるようにします。

たとえば、UserInfoは、Java EE 環境からログイン・ユーザー(remoteUser)を取得し、Users表の行

にマップされた、対応する Usersオブジェクトを検索します。UserInfo Bean にはセッション・スコープ

があるため、アプリケーションは常にログイン・ユーザーを把握し、Users オブジェクトを取る CRUD 操作

を実行できます。

この項では、マネージド Bean として使用する UserInfo クラスを作成します。次の表に、アプリケー

ションで使用できる UserInfo クラスの EL 式を示します。

式 値 #{UserInfo.userName} ログイン ID または文字列 Not Authenticatedを返します。 #{UserInfo.userRole} 現在のユーザーのロールを表す文字列(たとえば、manager)を返します。

#{UserInfo.userName} ユーザーのロールが technicianまたは managerの場合、trueを返します。

#{UserInfo.customer} ユーザーのロールが userの場合、trueを返します。 #{UserInfo.technician} ユーザーのロールが technicianの場合、trueを返します。 #{UserInfo.manager} ユーザーのロールが managerの場合、trueを返します。

また、セッション・ファサードのハンドルを取得するために使用する別のユーティリティ・クラス

ServiceLocator.javaも作成します。また、ロケータはBeanを再び参照せずに、ファサードのインスタ

ンスをキャッシュします。サービス・ロケータ・クラスを使用すると、core Java EE design patternが実装され

ます。

ユーザーを検証し、使用できるロールを決定する一連のユーティリティ・クラスを作成するには、以下の手

順を実行します。

1. Applications Navigator で、「ViewController」プロジェクトを右クリックし、コンテキスト・メニュー

から「New」を選択します。

2. New Gallery で、General カテゴリから「Java Class」項目を選択し、「OK」をクリックします。

3. Create Java Class ダイアログ・ボックスで、クラスの Name を UserInfoに、 Package をorg.srdemo.view.utilに設定し、「OK」をクリックします。

6-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ロールを管理するクラスの作成

4. 同様に、同じパッケージにServiceLocatorという名前の追加クラスを作成します。

5. ¥setupディレクトリの¥filesサブディレクトリから、ServiceLocatorJava.txtファイルを開

きます(¥setupディレクトリを作成する手順については、第 1 章の"環境のセットアップ"の項を参

照してください)。このファイルのすべてのテキストをコピーし、ServiceLocator.javaクラス

のコードに上書きします。これで、ServiceLocatorJava.txtを閉じることができます。

6. 同様に、¥setup¥files¥UserInfoJava.txtのコードで、UserInfo.javaクラスのコードを上

書きします。

7. 「Save All 」をクリックして、作業を保存します。

マネージドBeanの作成 マネージド Bean は、faces-config.xmlファイルに定義されているオブジェクトです。具体的には、POJO(単純な古い Java オブジェクト)、リスト、またはマップです。マネージド Bean として使用できるクラスに

は、引数が空のコンストラクタが必要です。

faces-config.xmlファイル内の主な設定により、すべてのマネージド Bean のプロパティを 1 箇所に宣言し

て初期化し、Bean のスコープをアプリケーション、セッション、またはリクエストに制限できます。JSF ELを使用すると、マネージド Bean にアクセスでき、そのプロパティを初期化できます。また、Bean 内のコード

を変更せずに、Bean クラスやそのプロパティの初期値を変更できます。

UserInfoマネージド Bean を作成するには、以下の手順を実行します。

1. すでに開いている場合は、エディタで faces-config.xmlファイルに切り替えます。まだ開いて

いない場合は、「ViewController」プロジェクトを右クリックし、コンテキスト・メニューから「Open JSF Navigation」を選択します。

2. 「Overview」タブをクリックします。

3. 左側にあるリストで「Managed Beans」を選択し、「New」をクリックします。

ログイン・ロジックの定義 6-11

ロールを管理するクラスの作成

4. Create Managed Bean ダイアログ・ボックスで、次の表のようにプロパティの値を設定します。

フィールド 値 Name UserInfo

Class org.srdemo.view.util.UserInfo

Scope Session

Generate Class If It Does Not Exist チェック・ボックスを選択します。

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

6. 「Source」タブをクリックします。ファイルの終わり付近で定義したマネージド Bean を確認できます。

7. 「Save All 」をクリックして、作業を保存します。

6-12 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

まとめ

これで、ページを実行し、データを入力できるように、ユーザーとユーザー情報にアクセスする Bean が追

加されました。次の章では、ユーザーがログインし、ユーザーのロールに許可された機能にアクセスできる

ページを作成します。

まとめ この章では、SRDemo アプリケーションのセキュリティを実装しました。そのために、主に以下の作業を実

行しました。

ユーザーとロールを定義して、コンテナ・セキュリティを設定しました。

HTTP リダイレクトを使用するように JSF ナビゲーションを設定して、コンテナ管理セキュリティ

を実施しました。

各ロールがアクセスできるページを定義して、アプリケーション・アクセスを設定しました。

ロールを管理するクラスを作成しました。

アプリケーションからユーザーとロールに関する情報にアクセスできるクラスを作成しました。

ログイン・ロジックの定義 6-13

まとめ

6-14 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

7 ログイン、表示、および

ナビゲーション・ロジックの実装

前の章では、ユーザーがアプリケーションにログインする(認証)方法およびユーザーに特定の機能へのア

クセスを許可する(認可)方法を定義しました。このログイン・ロジックはアプリケーション・レベルで指

定しました。ここでは、このログイン・ロジックを実装するページを作成します。また、ユーザーが使用を

許可されたページへ移動できるように、条件付きでリンクを表示するページを作成します。

前の章をまだ完了していない場合は、¥setupディレクトリの¥solutionsサブディレクトリで前の章のソ

リューションにアクセスできます(¥setupディレクトリを作成する方法については、第 1 章の"環境のセッ

トアップ"の項を参照してください)。適当なディレクトリにSRDEMOCh06.zipファイルを抽出し、Oracle JDeveloperでSRDEMO.jwsワークスペースを開き、作業を継続します。

この章では、以下のトピックについて説明します。

索引ページの作成

エラー・ページの作成

ログイン・ページの概要

ログイン・ページの作成

アプリケーションの状態を保存する場所の指定

Welcome ページの概要

Welcome ページの作成

ナビゲーション・ロジックと表示ロジックの追加

ログイン・ロジック、ナビゲーション・ロジック、および表示ロジックのテスト

まとめ

ログイン、表示、およびナビゲーション・ロジックの実装 7-1

索引ページの作成

索引ページの作成 通常、Web アプリケーションのホームページの名前は、index.*です(たとえば、index.html)。URL に

ページを指定しなければ、デフォルトでは索引ページが自動的にロードされます。

このアプリケーションでは、SRWelcome ページがユーザーに表示したいメイン・ページなので、ユーザー

を SRWelcome ページへリダイレクトする索引ページを作成します。次に、配置プロパティを変更して、

索引ページがアプリケーションの入り口ページになるように指定します。

索引ページを作成し、アプリケーションの入り口とするには、以下の手順を実行します。

1. 「ViewController」プロジェクトを右クリックし、コンテキスト・メニューから「New」を選択します。

2. Categories リストで「Web Tier」を開き、「JSP」を選択します。次に Items リストから「JSP」を選

択し、「OK」をクリックします。

3. Create JSP ウィザードの Welcome ページが表示されたら、「Next」をクリックします。

4. ウィザードのJSP Fileページで、名前としてindex.jspと入力し、「Next」をクリックします。

5. ウィザードのError Page Optionsページで、「Do Not Use an Error Page to Handle Uncaught Exceptions in this File」オプションを選択し、「Finish」をクリックします。

6. ビジュアル・エディタで、index.jsp ファイルが開きます。下に示すように、Component Palette ドロ

ップダウン・リストから「JSP」を選択し、「Scriptlet」コンポーネントを選択します。

7. Insert Scriptletダイアログ・ボックスで、次のテキストを挿入します。 response.sendRedirect("faces/app/SRWelcome.jsp");

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

このスクリプトレットは、ユーザーが索引ページを呼び出すと、SRWelcome ページへリダイレクト

されることを保証します。

7-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

エラー・ページの作成

8. ここで、index.jsp をアプリケーションの入り口として設定する必要があります。Applications Navigator で、「web.xml」(「ViewController」→「Web Content」→「WEB-INF」→「web.xml」の順)

を右クリックし、コンテキスト・メニューから「Properties」を選択します。

9. ページの左側にあるツリーで「Welcome File Lists」を選択し、「New」をクリックします。

10. ページの右側で、「Add」をクリックします。

11. Create Welcome File ダイアログ・ボックスで index.jsp と入力し、「OK」をクリックします。

12. 「OK」をクリックして、(web.xmlの)Web Application Deployment Descriptor ウィンドウを閉じます。

13. 「Save All 」をクリックして、作業を保存します。

エラー・ページの作成 ログイン・エラー・メッセージを表示するページを作成するには、以下の手順を実行します。

1. 「ViewController」プロジェクトを右クリックし、コンテキスト・メニューから「New」を選択します。

2. Categories リストで「Web Tier」を開き、「JSP」を選択します。次に Items リストから「JSP」を選

択し、「OK」をクリックします。

3. Create JSP ウィザードの Welcome ページが表示されたら、「Next」をクリックします。

4. 次のスクリーンショットに示すように、ウィザードのJSP Fileページで、名前としてErrors.jspと入力します。

既存のディレクトリ名に¥infrastructureを追加し、「Next」をクリックします。

ログイン、表示、およびナビゲーション・ロジックの実装 7-3

エラー・ページの作成

5. ウィザードの Error Page Options ページで「Create This File as an Error Page」オプションを選択し、

「Finish」をクリックします。

6. ビジュアル・エディタで、Errors.jspファイルが開きます。次のテキストを検索します。

An error occured:

これを次のように変更します。

A login error occurred

7. エディタの左上にある Block Format ドロップダウン・リストから、「Heading 2」を選択します。

8. Component Palette でドロップダウン・リストから「CSS」を選択し、「JDeveloper」をクリックしま

す。ページは、次のスクリーンショットのようになります。

9. 「Save All 」をクリックして、作業を保存します。

7-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ログイン・ページの概要

ログイン・ページの概要 前の章では、アプリケーションがフォーム・ベースの認証を使用し、ログイン・ページを Login.jsp と呼ぶこ

とを指定しました。ここでは、ユーザーが初めてアプリケーションにアクセスしようとすると自動的に表示

される、このページを定義します。

次のスクリーンショットに、ログイン・ページの詳細を示します。

1. ユーザーに表示する各ページでは、タイトルがページごとに異なります。

2. ログイン・ページには、入力および出力コンポーネントを表形式にした HTML の表があります。

3. 表の左側のセルには、右列のセルのラベルとなる固定値を持った出力テキスト・コンポーネントが

あります。

4. 表の右上にあるセルには、ユーザー名を入力するためのHTMテキスト入力コンポーネントがあります。

5. 表の右下にあるセルには、パスワードを入力するための HTM パスワード入力コンポーネントがあ

ります。

6. Sign On ボタンに指定したアクションは、ユーザーを認証し、認証に失敗するとエラー・ページを

表示します。ログインが成功すると、アプリケーションの 初のページが表示されます。

ログイン・ページの作成 ここでは、このアプリケーションで使用することを指定した、Java EE フォームに基づく認証に使用するペー

ジを作成します。ページを正しく作成するには、フォームに以下のタグを入れる必要があります。

<form action="j_security_check" method="post" >

<input type="text" name="j_username"> <input type="password" name="j_password">

</form>

ユーザー認証情報を受け付け、ユーザーを認証するログイン・ページを作成するには、以下の手順を実行し

ます。

1. 「ViewController」プロジェクトと「Web Content」ノードを開きます。「infrastructure」ノードを

右クリックし、コンテキスト・メニューから「New」を選択します。

2. Categories リストで「Web Tier」を開き、「JSP」を選択します。次に Items リストから「JSP」を選

択し、「OK」をクリックします。

3. Create JSP ウィザードの Welcome ページが表示されたら、「Next」をクリックします。

4. ウィザードの JSP Fileページで、名前としてLogin.jspと入力します。ディレクトリ名が

/infrastructureで終わっていることを確認し、「Next」をクリックします。

ログイン、表示、およびナビゲーション・ロジックの実装 7-5

ログイン・ページの作成

5. ウィザードの Error Page Options ページで、「Use an Error Page to Handle Uncaught Exceptions in This File」オプションを選択し、「Next」をクリックします。

6. ウィザードの Use Error Page ページで「Errors.jsp」を選択し、「Finish」をクリックします。

7. ビジュアル・エディタで、Login.jspファイルが開きます。LogintoSRDEMOと入力します。

8. エディタの左上にある Block Format ドロップダウン・リストから、「Heading 1」を選択します。

9. Component Palette でドロップダウン・リストから「CSS」を選択し、「JDeveloper」をクリックします。

10. ヘッダーの下にある行にカーソルを合わせます。Component Palette ドロップダウン・リストから、

「HTML Forms」を選択します。

11. コンポーネント・リストから「Form」をクリックします。

12. 次のスクリーンショットに示すように、Insert Formダイアログ・ボックスで、Actionとして

j_security_checkと入力し、Methodドロップダウン・リストから「post」を選択します。「OK」

をクリックします。

13. Component Palette で、ドロップダウン・リストから「HTML Common」を選択します。ここに示す

ように、「Table」コンポーネントを選択し、すでに作成したフォームまでドラッグします。

7-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ログイン・ページの作成

14. Insert Tableダイアログ・ボックスで、RowsとColumnsの両方を2に設定します。Widthを250に設定し、

「pixels」オプションを選択して、「OK」をクリックします。

15. 表の左側にある列で、UsernameフィールドとPasswordフィールドに入力します。

16. 表の右上にあるセルにカーソルを合わせます。[Shift]キーを押しながら、表の右下にあるセルの中

をクリックします。Property Inspectorで、列のWidthプロパティを150に設定します。ページは、次

のスクリーンショットのようになります。

17. Component Palette ドロップダウン・リストから「HTML Forms」を選択して、Forms コンポーネン

トへ戻ります。

18. 「Text Field」コンポーネントを選択し、表の右上にあるセルまでドラッグします。下のスクリーン

ショットに示すように、Insert Text Fieldダイアログ・ボックスで、Nameにj_usernameと入力し、

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

19. 「Password Field」コンポーネントを選択し、表の右下にあるセルまでドラッグします。Insert Password Fieldダイアログ・ボックスで、Nameにj_passwordと入力し、「OK」をクリックします。

20. 表の右側にカーソルを合わせ、[Enter]キーを押してフォームの中に空白行を作成し、「Submit Button」コンポーネントをクリックします。

21. Insert Submit Buttonダイアログ・ボックスで、Nameにlogon、ValueにSign Onを入力します。「OK」

をクリックします。

ログイン、表示、およびナビゲーション・ロジックの実装 7-7

アプリケーションの状態を保存する場所の指定

22. 「Source」タブをクリックして、コードを調べます。次のスクリーンショットに示すように、この

項の初めに説明したフォーム・ベースの認証に必要な要素が定義されたことがわかります。

23. 「Save All 」をクリックして、作業を保存します。

アプリケーションの状態を保存する場所の指定 JavaServer Faces(JSF)では、アプリケーションの状態はデフォルトでサーバーに保存されます。アプリケー

ションの状態をクライアントに保存すると、パフォーマンスを改善できます。この場合、アプリケーションの

状態はページ上の隠れたフィールドに保存されますが、実行時にページ・ソースを表示すると参照できます。

アプリケーションの状態を保存するクライアントを指定するには、以下の手順を実行します。

1. エディタまたは Applications Navigator(「ViewController」→「Web Content」→「WEB-INF」→「web.xml」)で、「web.xml」を右クリックし、コンテキスト・メニューから「Properties」を選択します。

2. Web Application Deployment Descriptor ウィンドウの左側にあるツリーで「Context Initialization」を

選択し、ウィンドウの右側にある「Add」をクリックします。

3. Define Parameterダイアログ・ボックスで、Nameにjavax.faces.STATE_SAVING_METHODと入力

し、Valueにclientと入力して、「OK」をクリックします。

7-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

Welcome ページの概要

4. 「OK」をクリックして、Web Application Deployment Descriptor ウィンドウを閉じます。

Welcome ページの概要 次に、すべてのユーザーがアプリケーションにログインしたときに 初に表示される SRWelcome ページを

作成します。次のスクリーンショットは、Welcome ページの機能を示しています。

1. 各アプリケーション・ページには、タイトル、ログインしたユーザーに関する情報、および Logoutリンクが表示されます。

タイトルは、ページごとに異なります。

ログイン、表示、およびナビゲーション・ロジックの実装 7-9

Welcome ページの作成

ログインしたユーザーに関する情報は、UserInfo マネージド Bean が式言語を使用して提

供します。

Logout リンクは、Logout マネージド Bean からメソッドを実行して、ユーザーをログアウ

トし、ログイン・ページへ戻ります。

2. View Your Service Requests リンクは、SRList ページへ移動して、ログインしたユーザーが作成した

サービス・リクエストやログインしたユーザーに割り当てられているサービス・リクエストを表示

します。このリンクは、すべてのユーザーに表示されます。

3. Create a New Service Request リンクは、ユーザーが新規のサービス・リクエストを作成できる

SRCreate ページへ移動します。このリンクは、すべてのユーザーに表示されます。

4. Triage Service Requests リンクによって、管理者が技術者にサービス・リクエストを割り当てる

SRTriage ページへ移動します。このリンクは、ログインしたユーザーが manager ロールを持って

いる場合のみ表示されます。

ログインしたユーザーのロールに基づいて条件付きでリンクを表示するには、ページのバッキングBeanに、

リンクの Rendered プロパティを設定するコードを追加します。また、すでに定義したナビゲーション・ルー

ル内の From outcome に対応する各リンクのアクションを指定します。

Welcome ページの作成 Welcome ページを作成するには、以下の手順を実行します。

1. (まだ開いていない場合)エディタで faces-config.xml を開きます。すでに開いている場合は、そのタ

ブをクリックします(ファイルを開くには、「ViewController」プロジェクトを右クリックし、コンテ

キスト・メニューから「Open JSF Navigation」選択します)。「Diagram」タブをクリックします。

2. 「/app/SRWelcome.jsp」アイコンをダブルクリックして、Create JSF JSP ウィザードを起動します。

3. ウィザードの Welcome ページが表示されたら、「Next」をクリックします。

4. ウィザードの JSP File ページで、「Next」をクリックします。

5. (次のスクリーンショットに示すように)ウィザードのComponent Bindingページで、「Automatically Expose UI Components in a New Managed Bean」オプションを選択します。マネージドBeanのNameをSRWelcomeに変更し、Packageをorg.srdemo.view.backingに変更します。「Finish」をクリ

ックします。

7-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

Welcome ページの作成

6. エディタで新規ページが開きます。WelcometoServiceRequestDemoと入力し、Block Formatドロップダウン・リストから「Heading 1」を選択します。

7. 次の行に、ThisdemousesEnterpriseJavaBeans(EJB)3.0and JavaServerFaces(JSF)と入力します。Block FormatがNoneに設定されていることを確認します。[Enter]キーを 2 回押して、

行をスキップします。

8. Youareloggedinasと入力し、[Space]キーを押します。Block Formatドロップダウン・リストから、

「Heading 5」を選択します。

9. Component Palette ドロップダウン・リストから「JSF HTML」を選択し、「Output Text」をクリッ

クします。

10. エディタで、出力テキスト・フィールドが作成されます。出力テキストのProperty Inspectorで、「value」

プロパティを選択し、「Bind to Data 」をクリックします。

11. Value ダイアログ・ボックスで、「JSF Managed Beans」と「UserInfo」を開きます。「userName」を

選択し、右矢印 をクリックして、右側にある式に追加します。「OK」をクリックします。

これで、アプリケーションは、実行時に認証されたユーザーの名前を表示します。Value プロパティ

を調べると、Value プロパティが式言語を使用して、前の章で定義した UserInfoマネージド Beanからユーザーの名前を取得することがわかります。

12. エディタで次の行にカーソルを合わせ、Component Palette から「Messages」を選択します。実行時

にメッセージを表示するためのプレースホルダが作成されます。

13. Component Palette ドロップダウン・リストから「CSS」を選択し、「JDeveloper」を選択します。ペー

ジは、次のスクリーンショットのようになります("Not Authenticated"の部分が"#{UserInfo.userName}"となっている場合があります)。

ログイン、表示、およびナビゲーション・ロジックの実装 7-11

ナビゲーション・ロジックと表示ロジックの追加

14. 「Save All 」をクリックして、作業を保存します。

ナビゲーション・ロジックと表示ロジックの追加 ここでは、Welcome ページの表示ロジックとナビゲーション・ロジックを実行するために、リンク、バッキ

ング Bean コード、およびアクションを追加します。次に、Welcome ページでコンポーネントを結び付け、

バッキング Bean でコードを作成します。

ここでは、次の項目を実行するために、いくつかのリンクを作成し、コードを追加します。

ユーザーがログアウトできるようにする

ユーザーのサービス・リクエストを表示する

新規のサービス・リクエストを作成する

サービス・リクエストを割り当てる

Triage リンクは、managerロールを認可されたユーザーに条件付きで表示されます。

ユーザーがログアウトできるようにする 初に Logout マネージド Bean を作成して、ユーザーがログアウトできるようにするロジックのコードを作

成し、次に SRWelcome ページからそのコードを呼び出します。それには、以下の手順を実行します。

1. faces-config.xml を開くか、またはそれに切り替え、「Overview」タブをクリックします(ファイル

を開くには、「ViewController」プロジェクトを右クリックし、コンテキスト・メニューから「Open JSF Navigation」選択します)。

2. Managed Bean セクションで、「New」をクリックします。

3. Create Managed Bean ダ イ ア ロ グ ・ ボ ッ ク ス で 、 Name に Logout と 入 力 し 、 Class に

org.srdemo.view.backing.SRLogoutと入力します。次のスクリーンショットに示すように、

Scopeがrequestに設定され、「Generate Class If It Does Not Exist」が選択されていることを確認しま

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

7-12 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ナビゲーション・ロジックと表示ロジックの追加

4. SRLogout.javaファイルが作成され、エディタで開かれます。SRLogout.java ファイルのタブをク

リックして SRLogout.java ファイルに切り替え、現在のユーザーをログアウトするために次のメソッ

ドを追加し、SRWelcome ページを再び表示します。

public String logoutButton_action() throws IOException { ExternalContext ectx = FacesContext.getCurrentInstance().getExternalContext(); HttpServletResponse response = (HttpServletResponse)ectx.getResponse(); HttpSession session = (HttpSession)ectx.getSession(false); session.invalidate(); response.sendRedirect("SRWelcome.jsp"); return null; }

ログイン、表示、およびナビゲーション・ロジックの実装 7-13

ナビゲーション・ロジックと表示ロジックの追加

メソッドを追加するとき、import 文を追加するようにプロンプトが数回表示されます。プロンプト

が表示されたら、[Alt]を押しながら[Enter]キーを押して、import 文を追加します。

5. SRWelcome ページに、このコードを呼び出すコンポーネントを追加します。エディタで SRWelcomeページのタブをクリックして、SRWelcome ページに切り替えます。

"You are logged in as"テキストの上にある空白行にカーソルを合わせます。Component Palette でドロ

ップダウン・リストから「JSF HTML」を選択し、「Command Hyperlink」をクリックします。Insert Command Hyperlink ダイアログ・ボックスで、Value に Logoutと入力し、「OK」をクリックします。

6. Command Hyperlink の Property Inspector で、Action に#{}と入力して[Enter]キーを押し、「Back」をク

リックして Action プロパティへ戻ります。 フィールドの 後にある省略記号 をクリックします。

7. Action ダイアログ・ボックスで、「Method Binding」オプションが選択されていることを確認します。

下に示すように、Managed bean ドロップダウン・リストから「Logout」を選択し、Method ドロップ

ダウン・リストから「logoutButton_action」を選択します。「OK」をクリックします。

8. 「Save All 」をクリックして、作業を保存します。

条件付き表示のリンクの作成 次に、アプリケーションの他の部分へ移動するためのリンクを SRWelcome ページに作成します。SRList ページ

と SRCreate ページへのリンクはすべてのユーザーに表示されますが、サービス・リクエストを割り当てること

ができるのは管理者だけなので、SRTriage ページへのリンクは manager ロールだけに表示するロジックを持ち

ます。

7-14 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ナビゲーション・ロジックと表示ロジックの追加

初に、次のスクリーンショットに示すように、JSF ナビゲーション・ダイアグラム(第 5 章を参照)でナ

ビゲーション・ルールを設定したときに定義した、From outcomes に対応するすべてのリンクにアクション

を追加します。条件付きで表示するリンクを実装するには、SRWelcome マネージド Bean に条件ロジックを

追加し、SRWelcome ページに置いたリンクからそのコードを呼び出します。

以下のページへのリンクを作成します。

ページ From Outcome 表示する対象 SRList srlist すべてのユーザー

SRCreate newSR すべてのユーザー

SRTriage assign 管理者

SRList ページへのリンクの作成 まず、SRList ページへ移動するリンクを SRWelcome ページに追加します。SRList ページはすべてのユーザー

に表示されますが、一貫性を維持するために条件ロジックのフレームワークを SRWelcome Bean に追加しま

す。これにより、後に必要な場合に表示条件を簡単に追加できます。条件ロジックは、実行時にリンクを表

示するかどうかを制御するリンクの Rendered プロパティを設定します。 後に、srlistの From outcomesでナビゲーション・ルールを実行するアクションを追加します。

ユーザーのサービス・リクエストを表示する SRList ページへのリンクを作成するには、以下の手順を実行し

ます。

1. エディタで SRWelcome.jsp ページのタブをクリックして、SRWelcome.jsp ページに切り替えます。

Messages コンポーネントの下にある空白行に You can use the following SR services:と入力し、Block Format ドロップダウン・リストから「Heading 3」を選択します。[Enter]キーを押し

て、空白行を作成します。

2. Component Palette ドロップダウン・リストから「JSF HTML」を選択し、「Command Hyperlink」コ

ンポーネントをクリックしてページにリンクを作成します。

3. Insert Command Hyperlink ダイアログ・ボックスで、Value に ViewYourServiceRequestsと入力

し、「OK」をクリックします。

ログイン、表示、およびナビゲーション・ロジックの実装 7-15

ナビゲーション・ロジックと表示ロジックの追加

4. Block Format ドロップダウン・リストから、「None」を選択します。

5. Property Inspector で、出力テキスト・コンポーネントの ID を viewSRに変更します(Structure ウィン

ドウで h:outputText が選択されていることを確認します)。

6. Applications Navigator で、「ViewController」、「Application Sources」、「org.srdemo.view」、「backing」を開きます。「SRWelcome.java」をダブルクリックして、エディタで開きます。SRWelcome.java は、

SRWelcome ページのバッキング Bean です。

7. 次のスクリーンショットに示すように、ローカル変数宣言に以下を追加します。

private String roleString;

7-16 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ナビゲーション・ロジックと表示ロジックの追加

8. 現在のユーザーのロールを取得するために、以下のコードを追加します。

public SRWelcome() { FacesContext ctx = FacesContext.getCurrentInstance(); Application app = ctx.getApplication(); ValueBinding curUser =

app.createValueBinding("#{UserInfo.userRole}"); Object obj = curUser.getValue(ctx); roleString = obj.toString();

}

9. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、以下をインポートします。

javax.faces.context.FacesContext

javax.faces.application.Application javax.faces.el.ValueBinding

10. Structure ウィンドウで、「setViewSR()」メソッドをダブルクリックして、エディタで検索します。

11. (下に示すように)viewSR 出力テキストを条件付きで表示するようにメソッドを変更します。

注意:これらのすべての条件によって、すべてのロールに対して同様の出力テキストを表示します

が(デフォルトでの動作)、後で必要な場合は、条件ロジックを簡単に変更できます。

public void setViewSR(HtmlOutputText viewSR) { if (roleString.equals("user")) {

ログイン、表示、およびナビゲーション・ロジックの実装 7-17

ナビゲーション・ロジックと表示ロジックの追加

viewSR.setRendered(true); }

else if (roleString.equals("technician")) {

viewSR.setRendered(true); }

else { viewSR.setRendered(true); }

this.viewSR = viewSR; }

12. エディタの SRWelcome.jsp ページで、作成したコマンド・ハイパーリンクを選択します(Structureウィンドウで h:commandLink が選択されていることを確認します)。Property Inspector で、Actionドロップダウン・リストから「srlist」を選択します。

これは、実行時にリンクをクリックすると SRList ページへ移動することを保証する、JSF ナビゲー

ション・ダイアグラムですでに作成したナビゲーション・ルール用の From outcome の名前です。

13. 「Save All 」をクリックして、作業を保存します。

SRCreate ページへのリンクの作成 次に、SRWelcome ページから新規のサービス・リクエストを作成できる SRCreate ページへ移動するリンクを

定義します。定義した前のリンクと同様に、このリンクはすべてのロールに表示されます。以前と同様に、一

貫性を維持し、後で必要な場合に条件ロジックをより簡単に実装できるように、 初に SRWelcome マネージド

Bean にリンクの Rendered プロパティを条件付きで設定するコードを追加します。次に、ユーザーがリンクを

クリックしたら、SRCreate ページへ移動することを指定するアクションを追加します。

それには、以下の手順を実行します。

1. エディタで「SRWelcome.jsp」を開き、viewSR リンクの後にある行にカーソルを合わせ、Component Palette から「Command Hyperlink」を選択します。

7-18 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ナビゲーション・ロジックと表示ロジックの追加

2. Insert Command Hyperlink ダイアログ・ボックスで、Value に CreateaNewService Requestと入

力し、「OK」をクリックします。

3. Property Inspector で、出力テキスト・コンポーネントの ID を srCreate に変更します(Structureウィンドウで h:outputText が選択されていることを確認します)。

4. 以下のように、エディタで SRWelcome.java を開くか、切り替えます。「ViewController」→

「Application Sources」→「org.srdemo.view」→「backing」→「SRWelcome.java」

5. Structure ウィンドウで、「setSrCreate()」メソッドをダブルクリックして、エディタで検索します。

6. 下に示すように、srCreate出力テキストを条件付きで表示するようにメソッドを変更します。

注意:これらのすべての条件が、すべてのロールに対して同じ出力テキストを表示しますが(デフォ

ルトでの動作)、後で必要な場合は、条件ロジックを簡単に変更できます。

public void setSrCreate(HtmlOutputText srCreate) { if (roleString.equals("user")) {

srCreate.setRendered(true); }

else if (roleString.equals("technician")) { srCreate.setRendered(true); }

else { srCreate.setRendered(true);

ログイン、表示、およびナビゲーション・ロジックの実装 7-19

ナビゲーション・ロジックと表示ロジックの追加

} this.srCreate = srCreate;

}

7. エディタの SRWelcome.jsp ページで、作成したコマンド・ハイパーリンクを選択します(Structureウィンドウで h:commandLink が選択されていることを確認します)。Property Inspector で、Actionドロップダウン・リストから「newSR」を選択します。

これは、実行時にリンクをクリックすると SRCreate ページへ移動することを保証する、JSF ナビゲー

ション・ダイアグラムですでに作成したナビゲーション・ルール用の From outcome の名前です。

8. 「Save All 」をクリックして、作業を保存します。

SRTriage ページへのリンクの作成 後に、サービス・リクエストを割り当てることができる SRTriage ページへのリンクを作成します。管理者

だけがサービス・リクエストを割り当てることができるので、manager ロールにのみこのリンクを表示さ

せる必要があります。この条件付きロジックを実装するには、まず、ユーザーのロールに基づいて Renderedプロパティを設定するコードを SRWelcome マネージド Bean に追加します。次に、SRTriage ページへ移動す

ることを保証するアクションをリンクに追加します。

それには、以下の手順を実行します。

1. エディタで「SRWelcome.jsp」を開き、srCreate リンクの後にある行にカーソルを合わせます。次に、

Component Palette から「Command Hyperlink」を選択します。

2. Insert Command Hyperlink ダイアログ・ボックスで、Value に TriageServiceRequestsと入力し、

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

3. Property Inspector で、出力テキスト・コンポーネントの ID を srTriage に変更します(Structureウィンドウで h:outputText が選択されていることを確認します)。

4. エディタで SRWelcome.java を開くか、切り替えます。(「ViewController」→「Application Sources」→「org.srdemo.view」→「backing」→「SRWelcome.java」)

7-20 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ログイン・ロジック、ナビゲーション・ロジック、および表示ロジックのテスト

5. Structure ウィンドウで、「setSrTriage()」メソッドをダブルクリックして、エディタで検索します。

6. srTriage出力テキストを条件付きで表示するように、メソッドを以下のコードに変更します(ロー

ルが manager であるユーザーのみ、Rendered プロパティが true に設定されていることに注意し

てください)。

public void setSrTriage(HtmlOutputText srTriage) { if (roleString.equals("manager")) {

srTriage.setRendered(true); }

else if (roleString.equals("user")) { srTriage.setRendered(false); }

else if (roleString.equals("technician")) { srTriage.setRendered(false); }

else { srTriage.setRendered(false); }

this.srTriage = srTriage; }

7. エディタの SRWelcome.jsp ページで、作成したコマンド・ハイパーリンクを選択します(Structureウィンドウで h:commandLink が選択されていることを確認します)。Property Inspector で、Actionドロップダウン・リストから「assign」を選択します。

これは、実行時にリンクをクリックすると SRTriage ページへ移動することを保証する、JSF ナビゲー

ション・ダイアグラムですでに作成したナビゲーション・ルール用の From outcome の名前です。

8. 「Save All 」をクリックして、作業を保存します。

ログイン・ロジック、ナビゲーション・ロジック、および表示ロ

ジックのテスト セキュリティとログイン・ロジックを定義し、表示ロジックとナビゲーション・ロジックを実装したので、

機能をテストできます。それには、以下の手順を実行します。

1. Applications Navigator で、「ViewController」プロジェクトと「Web Content」ノードを開きます。

2. 「index.jsp」を右クリックして、コンテキスト・メニューから「Run」を選択します。ブラウザが

開き、Logon ページが表示されます。

3. Username と Password に適当な文字の組合せを入力し、「Sign On」をクリックします。

ログイン、表示、およびナビゲーション・ロジックの実装 7-21

ログイン・ロジック、ナビゲーション・ロジック、および表示ロジックのテスト

4. Errors ページに、ログイン・エラーが発生したことを示すメッセージが表示されます。ブラウザの

「戻る」ボタンをクリックします。

5. 次に、(顧客用に)以下を入力し、「Sign On」をクリックします。

Username Password

ghimuro Welcome

6. ブラウザに、ユーザーの名前と顧客(userロール)がアクセスできる、2 つのリンクが表示された

SRWelcome ページが表示されます。「Logout」をクリックします。

7-22 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ログイン・ロジック、ナビゲーション・ロジック、および表示ロジックのテスト

7. Logon ページが再び表示されます。技術者用のログイン情報を入力します。

Username Password

bernst welcome

8. ブラウザに、ユーザーの名前と技術者がアクセスできる 2 つのリンク(顧客用に表示されるリンク

と同様)を表示する SRWelcome ページが表示されます。「Logout」をクリックします。

9. Logon ページが再び表示されます。管理者用のログイン情報を入力します。

ログイン、表示、およびナビゲーション・ロジックの実装 7-23

まとめ

Username Password

sking welcome

10. ブラウザに、(管理者はすべてのページにアクセスできるため)ユーザーの名前とすべてのリンク

を表示する SRWelcome ページが表示されます。

11. すべてのリンクにアクセスできるようになったので、各リンクを順番にクリックしてナビゲーショ

ンをテストします。なお、まだページを作成していないので、移動しようとすると 404 Not Foundエラーになりますが、エラー・メッセージを見ると、どのページが呼び出されたかを確認できます。

ブラウザの「戻る」ボタンをクリックして、Welcome ページへ戻ります。

12. テストが終了したら、ブラウザを閉じます。

まとめ この章では、アプリケーションの入り口を提供するページを作成し、ロールに基づくログイン・ロジックと

条件付き認可を実装しました。そのために、主に以下の作業を実行しました。

ユーザーを Welcome ページへリダイレクトする索引ページを作成しました。

ログインが正しくない場合に表示するエラー・ページを作成しました。

前の章で定義したユーザーID とパスワードの組合せの 1 つを使用して、ユーザーがアプリケーション

にログインできるログイン・ページを作成しました。

アプリケーションの状態をクライアントに保存するように指定しました。

現在のユーザーの名前と、ユーザーがログアウトしてアプリケーションの他のページへ移動できる

リンクを表示する Welcome ページを作成しました。

ロールに基づいて条件付きでリンクを表示し、すでに設定したナビゲーション・ルールを使用する

ロジックを Welcome ページに追加しました。

セキュリティとログオン・ロジック、および表示ロジックとナビゲーション・ロジックをテストし

ました。

7-24 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

8 レコードを表示するページの開発

前の章では、ログイン・ロジック、表示ロジック、およびナビゲーション・ロジックを実装しました。ここ

では、ユーザーのサービス・リクエストを表示するページを作成します。このアプリケーションには、すべ

てのユーザー用の SRList.jsp ページがあります。ユーザーは、リンクをクリックして、Welcome ページからリ

スト・ページにアクセスします。これによって、ユーザーのサービス・リクエストに関連するデータにアク

セスし、リスト・ページに表示します。

前の章をまだ完了していない場合は、¥setupディレクトリの¥solutionsサブディレクトリで前の章のソ

リューションにアクセスできます(¥setupディレクトリを作成する方法については、第 1 章の"環境のセッ

トアップ"の項を参照してください)。適当なディレクトリに SRDEMOCh07.zip ファイルを抽出し、Oracle JDeveloper で SRDEMO.jwsワークスペースを開き、作業を継続します。

この章では、以下のトピックについて説明します。

リスト・ページの概要

ユーザー用のリスト・ページの作成

名前付き問合せの追加

新規の名前付き問合せの公開

データを検索するバッキング Bean の更新

データの表示

ページ間のデータ渡し

セッション・ファサードの位置の指定

更新ロジックと UI コンポーネントのテスト

まとめ

レコードを表示するページの開発 8-1

リスト・ページの概要

リスト・ページの概要 SRList ページは、個々のユーザーが作成する、または個々のユーザーに割り当てられるすべてのサービス・

リクエストの上位ビューです。このページには、SRWelcome ページのリンクからアクセスします。

次のスクリーンショットに、SRList ページの詳細を示します。

1. 各アプリケーション・ページには、タイトル、ログインしたユーザーに関する情報、および Logoutリンクが表示されます。

タイトルは、ページごとに異なります。

ログインしたユーザーに関する情報は、UserInfo マネージド Bean が式言語を使用して提供

します。

Logout リンクは、Logout マネージド Bean からメソッドを実行して、ユーザーをログアウト

し、ログイン・ページへ戻ります。

2. サービス・リクエストのリストは、ログインしたユーザーが作成した、またはログインしたユーザー

に割り当てられた、サービス・リクエストを表示する JSF データ表コンポーネントです。データ表

は、ページのバッキング Bean で作成する新規の属性に関連付けられます。この属性のアクセッサ・

メソッドは、ServiceRequests エンティティに追加する名前付き問合せを呼び出して、サービ

ス・リクエストのリストを検索します。

3. ユーザーは、リクエスト・リストの検索に加えて、SRList で特定のサービス・リクエストに検索を

絞り込む、あるいはサービス・リクエストを編集できるページにデータを渡すこともできます。

データ表の Svr ID 列は、すでに定義した 2 つのナビゲーション・ケースの 1 つを実行する JSF コマン

ド・リンク・コンポーネントです。ログインしたユーザーが顧客であるか従業員であるか(管理者

であるか技術者であるか)を決定するコードをバッキング Bean に追加します。ユーザーが顧客の場

合は、顧客用の編集ページ(SREdit)へ移動します。そうでない場合は、従業員用の SRTEdit ペー

ジへ移動します。いずれの場合も、コードは適切な編集ページにデータの現在行を渡します。

4. Back to Home リンクは、ユーザーを SRWelcome ページへ戻すナビゲーション・ルールを実行します。

8-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ユーザー用のリスト・ページの作成

ユーザー用のリスト・ページの作成 このアプリケーションのこのページ以降では、マネージド Bean で UI コンポーネントを公開します。ビジネ

ス・モデル間のデータ交換と UI コンポーネントを扱うマネージド Bean をバッキング Bean と呼びます。

JavaServer Faces は、固有の EL 値結合方式を使用して、UI コンポーネントをバッキング Bean のプロパティ

に関連付けます。バッキング Bean は、データ・モデルに接続してデータの検索と格納を実行できるので、

ビューとモデル間の対話を処理できます。設計を変更すると、バッキング Bean 内のコードは、自動的に UIコンポーネントに同期化されます。

本番アプリケーションでは、大量の未使用コードが生成されるのを避けるため、バッキング Bean ですべて

の UI コンポーネントを公開しないようにする場合があります。その代わり、バッキング Bean を作成し、必

要に応じて属性を追加して、UI コンポーネントに属性を結び付けることができます。

SRList ページを定義するには、以下の手順を実行します。

1. まだ開いていない場合は、エディタで「faces-config.xml」を開きます。すでに開いている場合は、

エディタの一番上にあるそのタブをクリックします。(ファイルを開くには、「ViewController」プ

ロジェクトを右クリックし、コンテキスト・メニューから「Open JSF Navigation」を選択します)。

「Diagram」タブをクリックします。

2. 「/app/SRList.jsp」アイコンをダブルクリックして、Create JSF JSP ウィザードを起動します。

3. ウィザードの Welcome ページが表示されたら、「Next」をクリックします。

4. ウィザードの JSP File ページで、「Next」をクリックします。

5. ウィザードのComponent Bindingページで、「Automatically Expose UI Components in a New Managed Bean」オプションを選択します。マネージド Bean の Name を SRList に変更し、Package を

org.srdemo.view.backingに変更します。「Finish」をクリックします。

6. エディタで新規ページが開きます。My Service Requestsと入力し、Block Format ドロップダウ

ン・リストから「Heading 1」を選択します。

7. 次の行で、Youareloggedinasと入力し、[Space]キーを押します。Block Format ドロップダウン・

リストから、「Heading 5」を選択します。

8. Component Palette でドロップダウン・リストから「JSF HTML」を選択し、「Output Text」コンポー

ネントをクリックします。

9. エディタで、出力テキスト・フィールドが作成されます。出力テキストの Property Inspector で、

「Value」プロパティを選択し、「Bind to Data 」をクリックします。

レコードを表示するページの開発 8-3

ユーザー用のリスト・ページの作成

10. Value ダイアログ・ボックスで、「JSF Managed Beans」と「UserInfo」を開きます。

「userName」を選択し、右矢印 をクリックして、右側にある式に追加します。「OK」をクリッ

クします。これで、アプリケーションは、実行時に認証されたユーザーの名前を表示します。

11. ビジュアル・エディタで、次の行にカーソルを合わせます。Component Palette で、「Command Hyperlink」コンポーネントをクリックします。

12. 下に示すように、Insert Command Hyperlink ダイアログ・ボックスで、Value に Logoutと入力し、

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

13. Command Hyperlink の Property Inspector で、Action に#{}と入力して[Enter]キーを押し、「Back」を

クリックして Action プロパティへ戻ります。

フィールドの 後にある省略記号 をクリックします。

14. Action ダイアログ・ボックスで、Method Binding オプションが選択されていることを確認します。

Managed bean ドロップダウン・リストから「Logout」を選択し、Method ドロップダウン・リストか

ら「logoutButton_action」を選択します。「OK」をクリックします。

これによって、Logout リンクが、前の章で作成した Logout マネージド Bean 内のコードを実行する

ことが保証されます。

15. ここでは、ユーザーをWelcomeページへ戻すためのリンクを追加します。[Enter]キーを 3回押して、

Logout リンクの後に 3 つの空白行を挿入します。Component Palette ドロップダウン・リストから「JSF HTML」を選択し、「Command Hyperlink」コンポーネントをクリックしてページにリンクを作成

します。

8-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

名前付き問合せの追加

16. Insert Command Hyperlink ダイアログ・ボックスで、Value に BacktoHomeと入力し、「OK」をクリッ

クします。

17. Structure ウィンドウで、h:commandLink コンポーネントが選択されていることを確認します。

Command Hyperlink の Property Inspector 内にある Action 属性で、ドロップダウン・リストから

「welcome」を選択します。

18. Component Palette ドロップダウン・リストから「CSS」を選択し、「JDeveloper」をクリックします。

ページは、次のスクリーンショットのようになります。

19. 「Save All 」をクリックして、作業を保存します。

名前付き問合せの追加 SRList ページは、ユーザーが作成した、またはユーザーに割り当てられた、すべてのサービス・リクエスト

を表示します。このデータ検索をサポートするには、別の名前付き問合せを作成する必要があります。それ

には、以下の手順を実行します。

1. Applications Navigator で、「Model」、「Application Sources」、「org.srdemo.persistence」を開きます。

2. 「ServiceHistories.java」をダブルクリックして、エディタで開きます。

3. @NamedQueryアノテーションがある行の上に、次のアノテーションを追加します。

@NamedQueries({

4. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、

javax.persistence.NamedQueriesをインポートします。

5. findAllServiceRequests名前付き問合せの後に、次の findServiceRequests名前付き問合

せを追加します。

@NamedQuery(name="findServiceRequests", query="select " + "object (sr) from ServiceRequests sr where " + "sr.users = :user or sr.users1 = :user1")

6. 初の名前付き問合せの後に区切り文字としてカンマを追加し、次の行を追加して名前付き問合せ

の集合を閉じます。

})

レコードを表示するページの開発 8-5

新規の名前付き問合せの公開

7. 「Save All 」をクリックして、作業内容を保存します。

新規の名前付き問合せの公開 新規の名前付き問合せは、セッション・ファサードを変更してこの問合せにアクセスするメソッドを組み込

むまで、アプリケーションで使用できません。新規の名前付き問合せを公開するには、以下の手順を実行し

ます。

1. ファサード・エディタで名前付き問合せを表示するには、名前付き問合せを含むクラスをコンパイ

ルする必要があります。それには、「Rebuild 」をクリックしてすべてをコンパイルします。

2. Applications Navigator で、「Model」→「Application Sources」→「org.srdemo.business」と開きます。

3. 「ServiceRequestFacadeBean.java」を右クリックし、「Edit Session Facade」を選択します。

4. Session Facade Options ダイアログ・ボックスで、「ServiceRequests」ノードを開き、追加した問合せ

「findServiceRequests」のチェック・ボックスを選択します。「OK」をクリックします。

エディタで ServiceRequestFacadeBean.java ファイルが開きます。ファイルの終わりまでス

クロールして、新規の名前付き問合せを公開するために追加した新規のメソッドを確認します。

findServiceRequests()メソッドで、次の行を検索します。

8-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データを検索するバッキング Bean の更新

return em.createNamedQuery("findServiceRequests").setParameter("user",

user).setParameter("user1", user1).getResultList();

この行を次の 4 行で上書きします( 初と 後の中括弧はそのまま残してください)。

Query query = (Query)em.createNamedQuery("findServiceRequests"); query.setParameter("user",user); query.setParameter("user1",user1); return query.getResultList();

5. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、javax.persistence.Query をイン

ポートします。

6. 「Save All 」をクリックして、作業を保存します。

データを検索するバッキング Bean の更新 SRList ページは、現在のユーザーが作成した、またはユーザーに割り当てられた、サービス・リクエストを

表示します。データはセッション・ファサードから検索され、SRList.jsp ページのデータ表で公開されます。

このデータを使用できるようにページのバッキング Bean を変更するには、以下の手順を実行します。

1. Applications Navigator で、「ViewController」プロジェクト、「Application Sources」、「org.srdemo.view」、

および「backing」ノードを開きます。

2. 「SRList.java」をダブルクリックして、エディタで開きます。

3. 次の属性を追加します。

List<ServiceRequests> requestList = new ArrayList();

セッション・ファサードからこの変数用のデータが検索され、ページでコンポーネントがデータの

アクセッサを使用できるようになります。

レコードを表示するページの開発 8-7

データを検索するバッキング Bean の更新

4. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、以下をインポートします。

java.util.List

org.srdemo.persistence.ServiceRequests

java.util.ArrayList

5. コード・エディタ・ウィンドウの中を右クリックし、コンテキスト・メニューから「Generate Accessors」を選択します。

6. Generate Accessors ダイアログ・ボックスで、追加した requestList 変数のチェック・ボックスを選択

し、「OK」をクリックします。

ファイルの一番下までスクロールして、作成したアクセッサを確認できます。getRequestList()メソッドで、次の行を検索します。

return requestList;

この行を以下の行で上書きします。

// Get the Service Locator's instance ServiceLocator serviceLocator = null; try {

serviceLocator = serviceLocator.getInstance(); ServiceRequestFacadeLocal srLocal =

(ServiceRequestFacadeLocal)serviceLocator. getFacadeService("java:comp/env/ejb/ServiceRequestFacade");

FacesContext ctx = FacesContext.getCurrentInstance(); Application app = ctx.getApplication(); ValueBinding curUser =

app.createValueBinding("#{UserInfo.currentUser}"); Users currentUser = (Users)curUser.getValue(ctx);

8-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データの表示

return srLocal.findServiceRequests(currentUser, currentUser);

} catch (NamingException e) { // TODO e.printStackTrace();

} return null;

コード内の// TODOコメントは、「View」→「Tasks Window」を選択して表示する Tasks ウィンド

ウに表示されるタスクを作成します。後でタスクを完成させる必要がある場合は、// TODOで始ま

る行をコードに追加できます(この場合は、ネーミング例外の例外ハンドラを追加するなど)。コメ

ントの後に入力したテキストは、Tasks ウィンドウ内の説明として表示されます。このチュートリア

ルでは、例外ハンドラを実際に戻って追加することはしません。ただし、実際の開発状況では、// TODO が例外ハンドラの追加を指摘します。

7. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、いくつかの import 文を追加し

ます(Applicationの場合は、「javax.faces.application.Application」を選択します)。

8. 「Save All 」をクリックして、作業を保存します。

データの表示 名前付き問合せとバッキング Bean コードを追加したので、このコードを利用して該当するデータを検索す

るために、JSP にデータ・コンポーネントを追加できます。この読取り専用データを表示するコンポーネン

トを追加するには、以下の手順を実行します。

1. Applications Navigator で、「ViewController」、「Web Content」、および「app」を開きます。

2. 「SRList.jsp」をダブルクリックしてエディタで開き、「Design」タブをクリックします。

レコードを表示するページの開発 8-9

データの表示

3. Component Palette ドロップダウン・リストから「JSF HTML」を選択し、ビジュアル・エディタのペー

ジにある Back to Home リンクの上にある行まで「Data Table」コンポーネントをドラッグします。

4. Create Data Table ウィザードの Welcome ページが表示されたら、「Next」をクリックします。

5. ウィザードの Binding ウィンドウで「Bind the Data Table Now」を選択し、「Next」をクリックします。

6. ウィザードの Bind Data Table ページで、「Bind」をクリックします。

7. Expression Builder ウィンドウで、「SRList」を開いて「requestList」を選択し、右矢印 をクリッ

クして Expression に追加します。「OK」をクリックします。

8. ウィザードの Bind Data Table ページで以下の値を入力し、「Next」をクリックします。

フィールド 値 Class org.srdemo.persistence.ServiceRequests

Var sr

8-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データの表示

9. ウィザードの Header and Row Data ペ-ジで、ヘッダーの値が Service Histories List になっている表

の列を選択し、「Remove」をクリックします。

10. 同様に、ヘッダーの値が Users、Users1、および Assigned Date になっている表の列を削除します。

11. ウィンドウの右側にあるボタンを使用して、残りの表の列を次の順序で配列します。

Svr Id Status Request Date Products Problem Description

12. Products 行の Component Value を#{sr.products.name}に変更し、「Finish」をクリックします。

レコードを表示するページの開発 8-11

ページ間のデータ渡し

13. 「Save All 」をクリックして、作業を保存します。

ページ間のデータ渡し ここでは、選択した Service Request オブジェクトを SREdit.jsp ページへ転送するメソッドを SRList.java に追

加します。それには、以下の手順を実行します。

1. Applications Navigator で、「ViewController」、「Application Sources」、「org.srdemo.view」、および

「backing」を開きます。

2. 「SRList.java」をダブルクリックして、エディタで開きます。

3. SREdit.jsp ページまたは SRTEdit.jsp ページに、選択した Service Request オブジェクトを転送する次

のメソッドを追加します。

public String editLinkAction() {

/* pull out the currently selected service request */ ServiceRequests editSR = (ServiceRequests)this.getDataTable1().getRowData(); FacesContext ctx = FacesContext.getCurrentInstance(); Application app = ctx.getApplication(); ValueBinding curUser = app.createValueBinding("#{UserInfo.userRole}"); Object obj = curUser.getValue(ctx); String roleString = obj.toString(); if (roleString.equals("user")) {

ValueBinding binding =

ctx.getApplication().createValueBinding("#{SREdit.serviceRequest}"); binding.setValue(ctx,editSR); return "update";

} else {

ValueBinding binding = ctx.getApplication().createValueBinding("#{SRTEdit.serviceRequest}");

8-12 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ページ間のデータ渡し

binding.setValue(ctx,editSR); return "techupdate";

} }

このメソッドが作成する値の関連付けは、次の章で SREdit ページと SRTEdit ページを定義するとき

に使用します。また、メソッドは、ユーザーが user ロールを持っているかどうかによって、updateまたは techupdate を返すことに注意してください。これらの文字列は、それぞれ SREdit ページ

と SRTEdit ページへ移動するために、JSF ナビゲーション・ダイアグラムで定義したナビゲーショ

ン・ケースに対応しています。

4. ページのタブをクリックして(または前述のように開いて)、SRList.jsp へ戻ります。ページの

「Design」タブをクリックします。

5. svrIdフィールドを選択した行を編集用に別のページへ渡すリンクに変更します。そのために、ビ

ジュアル・エディタまたは Structure ウィンドウで、出力テキスト・コンポーネント「#{sr.svrId}」を右クリックし、コンテキスト・メニューから「Surround With…」を選択します。

6. Surround With ダイアログ・ボックスで、「Command Hyperlink」を選択し、「OK」をクリックします。

7. Insert Command Hyperlink ダイアログ・ボックスで、Value を空白のままにして「OK」をクリックし

ます。

8. Structure ウィンドウで、(#{sr.svrId}出力テキストの前にある)余分に作成された「outputText」コンポーネントを選択し、[Delete]キーを押して削除します。

レコードを表示するページの開発 8-13

セッション・ファサードの位置の指定

9. Structure ウィンドウで、作成した「h:commandLink」を選択します。Property Inspector で、「Action」属性を選択し、ドロップダウン・リストから「editLinkAction()」を選択します。

10. 「Save All 」をクリックして、作業を保存します。

セッション・ファサードの位置の指定 SRList ページは、セッション・ファサードを使用するために開発した 初のページです。Web において、ペー

ジがセッション・ファサードを使用する前に、アプリケーションの Web デプロイメント・ディスクリプタ

(web.xml)でセッション・ファサードのローカル・ホームを指定する必要があります。宣言には、以下の要

素があります。

オプションの説明

エンタープライズ Bean を参照する Web アプリケーションのコードで使用される EJB 参照名

参照先エンタープライズ Bean の想定タイプ

参照先エンタープライズ Bean の想定ローカル・ホームとローカル・インタフェース

オプションの ejb リンク情報(参照先エンタープライズ Bean を指定するために使用)

セッション・ファサードの位置を指定するために Web デプロイメント・ディスクリプタを設定するには、以

下の手順を実行します。

1. Applications Navigator で、「ViewController」プロジェクトを開き、「Web Content」と「WEB-INF」を開きます。

2. 「web.xml」を右クリックして、コンテキスト・メニューから「Properties」を選択します。

3. Web Application Deployment Descriptor ウィンドウの左側にあるツリーで「EJB Local References」を

選択し、ウィンドウの右側にある「Add」をクリックします。

8-14 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

更新ロジックと UI コンポーネントのテスト

4. Create EJB Local Reference ダイアログ・ボックスに、次の値を入力します。

フィールド 値 Name ejb/ServiceRequestFacade

Local Interface org.srdemo.business.ServiceRequestFacadeLocal

EJB Link ServiceRequestFacade

EJB Type 「Session」オプションを選択します。

「OK」をクリックし、もう一度「OK」をクリックして、Web Application Deployment Descriptorウィンドウを閉じます。

5. 「web.xml」ファイルをダブルクリックして、エディタで開きます。

6. ファイルの終わりまでスクロールし、次の行を削除します。

<local-home></local-home>

7. 「Save All 」をクリックして、作業を保存します。

更新ロジックと UI コンポーネントのテスト リスト・ロジックを定義し、サービス・リクエストを表示するために必要な UI コンポーネントを作成した

ので、機能をテストできます。それには、以下の手順を実行します。

1. Applications Navigator で、「ViewController」プロジェクトと「Web Content」ノードを開きます。

2. 「index.jsp」を右クリックして、コンテキスト・メニューから「Run」を選択します。

3. ブラウザが開き、Logon ページが表示されます。次のログオン情報を入力し、「Sign On」をクリッ

クします。

レコードを表示するページの開発 8-15

まとめ

Username Password

sking welcome

4. SRWelcome ページで、「View Your Service Requests」をクリックします。

5. SRList ページは、ユーザーが作成した、またはユーザーに割り当てられた、すべてのサービス・リ

クエストを表示します。

"SvrID"がリンクであることに注意してください。このリンクは、次の章で定義する SREdit.jsp ペー

ジまたは SRTEdit.jsp ページへ、選択したオブジェクトを渡します。Service Request オブジェクトを

渡すメソッドは、すでに定義されています。今、このリンクをクリックすると、ページが存在しな

いことを示すエラーが発生します。Back to Home リンクをクリックすると、Welcome ページへ戻る

ことができます。

まとめ この章では、ユーザーがサービス・リクエストを表示できるページを作成しました。そのために、主に以下

の作業を実行しました。

以下のコンポーネントを含むリスト・ページを作成しました。

ログイン・ユーザーの名前を表示するコンポーネント

8-16 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

まとめ

アプリケーションからログアウトするコンポーネント

アプリケーションのホームページへ移動するコンポーネント

現在のユーザーが作成した、またはユーザーに割り当てられたサービス・リクエストを検索するた

めに、名前付き問合せを追加しました。

名前付き問合せをセッション・ファサードに公開しました。

データを検索するセッション・ファサード・メソッドを呼び出すように、バッキング Bean を更新

しました。

バッキング Bean 内のメソッドによって検索されたデータを表示するページに、データ表を追加し

ました。

Service Requests オブジェクトをパッケージ化し、編集用に転送するために、バッキング Bean にロ

ジックを追加しました。

ページ上のデータ表の各行に、選択した Service Requests オブジェクトを編集用に渡すコードをバッ

キング Bean から呼び出すためのリンクを追加しました。

実行時にセッション・ファサードの位置を指定できるように、Web デプロイメント・ディスクリプ

タを変更しました。

更新ロジックと UI コンポーネントのテストを実行しました。

レコードを表示するページの開発 8-17

まとめ

8-18 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

9 レコードを編集するページの開発

ユーザーのサービス・リクエストを表示するページを作成しました。ここでは、ユーザーがサービス・リク

エストを編集できるページを作成します。このアプリケーションには、このようなページが 2 つあります。

顧客用の SREdit ページおよび技術者と管理者用の SRTEdit ページです。

ユーザーは、選択したサービス・リクエストに関連したデータを編集ページへ渡すというリンクをクリック

して、リスト・ページから編集ページにアクセスします。SRList ページを作成した際、そのデータを渡すた

めのロジックと、ロールに基づいてどの編集ページを表示するかを決定するロジックを定義しました。

前の章をまだ完了していない場合は、¥setupディレクトリの¥solutionsサブディレクトリで前の章のソ

リューションにアクセスできます(¥setupディレクトリを作成する方法については、第 1 章の"環境のセッ

トアップ"の項を参照してください)。適当なディレクトリに SRDEMOCh08.zip ファイルを抽出し、Oracle JDeveloper で SRDEMO.jwsワークスペースを開き、作業を継続します。

この章では、以下のトピックについて説明します。

編集ページの概要

顧客用の編集ページの作成

データを表示するコンポーネントの追加

データ入力コンポーネントの追加

更新の永続化または取り消し

詳細レコードの表示

レコードの条件付き非表示

スタッフ用の編集ページの開発

更新ロジックと UI コンポーネントのテスト

まとめ

レコードを編集するページの開発 9-1

編集ページの概要

編集ページの概要 SREdit ページでは、顧客は既存のサービス・リクエストを編集できます。このページには SRList ページか

らアクセスし、ユーザーはサービス・リクエストを表示し、更新できます。

SREdit ページで、顧客はリストから新規のステータスを選択し、サービス・リクエストのステータスを変更

できます。また、サービス・リクエストに注記を追加し、サービス履歴レコードとして注記を保存できます。

ページは、サービス・リクエストに関連した履歴レコードも表示するマスター/ディテール・ページです。

また、ユーザーは、SREdit ページで Cancel ボタンをクリックして、サービス・リクエストの編集を取り消

すこともできます。Cancel をクリックすると、すべてのフォーム検証を迂回して SRList ページに戻ります。

ユーザーがデータをコミットする場合、バッキング Bean コードは、サービス・リクエスト・レコードを更新

します。また、コードは、関連するサービス履歴レコードをデータベースに挿入します。次に、SRList ページ

への移動が実行されます。

次のスクリーンショットは、Edit ページの機能を示しています。

1. 各アプリケーション・ページには、タイトル、ログインしたユーザーに関する情報、および Logoutリンクが表示されます。

2. HTML の表は、JSF コンポーネントを配置するために使用します。

3. ラベルとは、HTML の表の左列に入力するプレーン・テキストです。

4. 出力テキスト・コンポーネントは、4 つの Service Request フィールドを表示します。ページのバッ

キング Bean に ServiceRequestsオブジェクトを追加し、式言語を使用してデータにアクセスし

て、これらのフィールドをデータに関連付けます。ユーザーは、出力テキスト・コンポーネントに

9-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

顧客用の編集ページの作成

表示されるデータを編集できません。

5. JSF Listbox コンポーネントは、サービス・リクエストのステータス用のハードコード値を表示しま

す。式言語を使用して、このコンポーネントをバッキング Bean の ServiceRequestsオブジェク

トの status 属性に関連付けます。ユーザーは、新規のステータスを選択し、リクエストを更新でき

ます。

6. JSF Input Textarea コンポーネントを使用すると、ユーザーは複数のテキスト行を入力できます。入

力テキスト領域の値を取り、関連する ServiceHistories エンティティの notes 属性に割り当

てるバッキング Bean コードを定義します。

7. 基礎となるデータベースの表にデータを永続化するため、Save ボタンでバッキング Bean に追加す

るコードを呼び出します。Bean は、セッションのすべてのページでデータが使用できるように、

session スコープに設定されます。Bean 内のこのコードは、すでに定義したナビゲーション・ルール

内の From outcome の 1 つに対応する文字列値を返します。

8. Cancel ボタンは、すでに定義されたナビゲーション・ルール内の From outcome の 1 つに設定された

アクションを持っています。そのため、コードを実行してデータを永続化せずに移動できます。

9. JSF データ表は、バッキング Bean の ServiceRequests オブジェクトに関連するサービス履歴の

リストに関連付けられており、関連するサービス履歴レコードを表示します。

顧客用の編集ページの作成 SREdit ページを定義するには、以下の手順を実行します。

1. まだ開いていない場合は、エディタで「faces-config.xml」を開きます。すでに開いている場合は、

そのタブをクリックします。(ファイルを開くには、「ViewController」プロジェクトを右クリック

し、コンテキスト・メニューから「Open JSF Navigation」を選択します)。「Diagram」タブをクリ

ックします。

2. 「/app/SREdit.jsp」アイコンをダブルクリックして、Create JSF JSP ウィザードを起動します。

3. ウィザードの Welcome ページが表示されたら、「Next」をクリックします。

4. ウィザードの JSP File ページで、「Next」をクリックします。

5. ウィザードのComponent Bindingページで、「Automatically Expose UI Components in a New Managed Bean」オプションを選択します。マネージド Bean の Name を SREdit に変更し、Package を

org.srdemo.view.backingに変更します。「Finish」をクリックします。

レコードを編集するページの開発 9-3

顧客用の編集ページの作成

6. エディタで新しいページが開きます。Update Service Requestと入力し、Block Format ドロッ

プダウン・リストから「Heading 1」を選択します。

7. Component Palette で、ドロップダウン・リストから「JSF HTML」を選択し、ビジュアル・エディ

タのページ上の次の行まで「Messages」コンポーネントをドラッグします。

8. Messages コンポーネントの後にカーソルを合わせて[Enter]キーを押し、Component Palette で

「Command Hyperlink」コンポーネントをクリックします。

9. Insert Command Hyperlink ダイアログ・ボックスで、Value に Logoutと入力し、「OK」をクリック

します。

9-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

顧客用の編集ページの作成

10. Command HyperlinkのProperty Inspectorで、Actionプロパティに#{}と入力し、[Enter]キーを押します。

「Back」をクリックして、Action プロパティに戻ります。フィールドの 後にある省略記号 を

クリックします。

11. Action ダイアログ・ボックスで、「Method Binding」オプションが選択されていることを確認します。

Managed bean ドロップダウン・リストから「Logout」を選択し、Method ドロップダウン・リストか

ら「logoutButton_action」を選択します。「OK」をクリックします。

これで、Logout リンクが、前の章で作成した Logout マネージド Bean 内のコードを実行することが

保証されます。

12. Structure ウィンドウで、定義した commandLink を含む「paragraph node 」を選択します。

13. Property Inspector で、ドロップダウン・リストから値を選択して、段落の Align プロパティを「right」に設定します。

レコードを編集するページの開発 9-5

顧客用の編集ページの作成

14. エディタで、次の行に Youareloggedinasと入力し、[Space]キーを押します。Block Format ドロップ

ダウン・リストから、「Heading 5」を選択します。

15. Component Palette で、「Output Text」コンポーネントをクリックします。

16. エディタで、出力テキスト・フィールドが作成されます。出力テキストの Property Inspector で、

「Value」プロパティを選択し、「Bind to Data 」をクリックします。

17. Value ダイアログ・ボックスで、「JSF Managed Beans」と「UserInfo」を開きます。「userName」を

選択し、右矢印 をクリックして、右側にある式に追加します。「OK」をクリックします。こ

れで、アプリケーションは、実行時に認証されたユーザーの名前を表示します。

18. Component Palette ドロップダウン・リストから「HTML Common」を選択し、エディタで次の行ま

で「Table」コンポーネントをドラッグして、ページ上に表を作成します。

19. Insert Table ダイアログ・ボックスで、行数を 6に、列数を 2に設定し、「percent」オプションを選

択して、幅を 100にします。「OK」をクリックします。

20. 左側の列で、各行に次の語句を入力します。

SR ID Request Date Description Product Status Notes

21. Component Palette ドロップダウン・リストから「CSS」を選択し、「JDeveloper」を選択します。ペー

ジは、次のスクリーンショットのようになります。

9-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データの表示

22. 「Save All 」をクリックして、作業を保存します。

データの表示 SREdit ページの一部のフィールドは、データを表示するだけで編集はできません。この読取り専用データを

表示する出力テキスト・コンポーネントを追加するには、以下の手順を実行します。

1. サービス・リクエスト用のバッキング Bean に新規の属性を追加します。Applications Navigator で、

「ViewController」、「Application Sources」、「org.srdemo.view」、および「backing」を開きます。

2. 「SREdit.java」をダブルクリックして、エディタで開きます。

3. 次の属性を追加します。

ServiceRequests serviceRequest;

レコードを編集するページの開発 9-7

データの表示

4. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、

「org.srdemo.persistence.ServiceRequests」をインポートします。

5. エディタ・ウィンドウの中を右クリックし、コンテキスト・メニューから「Generate Accessors」を

選択します。

6. Generate Accessors ダイアログ・ボックスで、「serviceRequest」のチェック・ボックスを選択し、「OK」

をクリックします。

7. サービス・リクエスト・データにアクセスするコードをバッキング Bean に追加したので、SREditページにデータ関連コンポーネントを追加できます。エディタで「SREdit.jsp」タブをクリックし

て、SREdit.jsp に切り替えます。Component Palette ドロップダウン・リストから「JSF HTML」を選

択し、ビジュアル・エディタで表の右上セルまで「Output Text」コンポーネントをドラッグします。

8. Property Palette で「Value」プロパティを選択し、「Bind to Data 」をクリックします。

9. Value ダイアログ・ボックスで、「JSF Managed Beans」、「SREdit」、および「serviceRequest」を開

きます。「svrId」を選択し、右矢印 をクリックして Expression に追加します。「OK」をクリック

します。

9-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データの表示

10. 同様に、svrId セルの下にある次の 3 つのセルに以下を追加します。

行のラベル コンポーネント 値 Request Date Output Text #{SREdit.serviceRequest.

requestDate}

Description Output Text #{SREdit.serviceRequest. problemDescription}

Product Output Text #{SREdit.serviceRequest.

products.name}(「products」を開き、name

を Expressionへ転送します。)

レコードを編集するページの開発 9-9

データ入力コンポーネントの追加

11. 「Save All 」をクリックして、作業を保存します。ページは、次のスクリーンショットのよう

になります。

データ入力コンポーネントの追加 ここでは、データの正確さを保証し、データ入力を簡素化する UI コンポーネントを追加します。コンポー

ネントを作成し、ユーザーが以下を実行できるためのコードを追加します。

ステータスの選択

注記の入力

ユーザーがステータスを選択できるようにする ユーザーが正しいステータスを入力できるように、選択リストを実装します。ステータスには 3 つの値しか

ないため、3 つの選択項目に値をハードコードします。選択リストをページに追加するには、以下の手順を

実行します。

1. Component Palette で、ドロップダウン・リストから「JSF HTML」を選択し、Statusラベルを付

けた行の右セルまで「Listbox」コンポーネントをドラッグします。

2. 「Create list (select item)」オプションを選択して「Add」をクリックし、Item Label と Item Value に

それぞれ Open と入力します。これで、選択リストで、ラベルと値の両方が"Open"に設定された 1つの項目が作成されます。

3. さらに「Add」を 2 回クリックして、ラベルと値が Pending と Closed である 2 つのリスト項目

を追加します。

9-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データ入力コンポーネントの追加

4. 「Advanced Properties」タブをクリックします。

5. 「Value」プロパティをクリックし、「Bind to Data 」をクリックします。

6. Value ダイアログ・ボックスで、「JSF Managed Beans」、「SREdit」、および「serviceRequest」を開

きます。「status」を選択し、右矢印をクリックして Expression へ転送し、「OK」をクリックします。

これで、このリスト項目の値に、SREditマネージド Bean 内の serviceRequest変数のステータ

スが関連付けられます。

7. 「OK」をクリックして、Insert Listbox ダイアログ・ボックスを閉じます。

8. 「Save All 」をクリックして、作業内容を保存します。

レコードを編集するページの開発 9-11

更新の永続化または取り消し

ユーザーが注記を入力できるようにする 次に、この更新に関連した新規のサービス履歴レコードの一部となる注記をユーザーが入力できるようにす

るコンポーネントを追加します。テキストを入力できるようにするには、以下の手順を実行します。

1. Component Palette から、「Input Textarea」コンポーネントをビジュアル・エディタで Notesラベル

を付けた行の右セルまでドラッグします。これで、ユーザーが複数のテキスト行を入力できる領域

が作成されます。

次の項で定義するバッキング Bean コードが入力テキスト領域から値を取り出し、

ServiceHistoriesエンティティの notes属性に割り当てるので、値をデータに関連付ける必要

はありません。

2. 「Save All 」をクリックして、作業を保存します。

更新の永続化または取り消し ここでは、入力値をエンティティ・オブジェクトに割り当て、データベースにデータをコミットするコード

をページのマネージド Bean に追加します。また、そのコードを呼び出すボタンと更新を取り消すボタンを

追加します。 後に、セッション全体を通じて更新された情報を表示できるように、マネージド Bean のス

コープを sessionに変更します。

それには、以下の手順を実行します。

1. SREdit.javaを開くか、またはSREdit.javaに切り替えます(「ViewController」→「Application Sources」→「org.srdemo.view」→「backing」)。

2. 入力フィールドをエンティティ Bean 内のプロパティに割り当て、データベースにデータを永続化

(コミット)する次のメソッドを追加します。

public String updateSR(){ FacesContext ctx = FacesContext.getCurrentInstance(); Application app = ctx.getApplication(); ValueBinding curUser =

app.createValueBinding("#{UserInfo.currentUser}"); Users currentUser = (Users)curUser.getValue(ctx); ServiceHistories historynotes = new ServiceHistories(); historynotes.setServiceRequests(serviceRequest); historynotes.setNotes(getInputTextarea1().getValue().

toString()); historynotes.setLineNo(null); historynotes.setSvhType("Customer"); historynotes.setSvhDate(null); historynotes.setUsers(currentUser); serviceRequest.addServiceHistories(historynotes); ServiceLocator serviceLocator = null; try {

serviceLocator = serviceLocator.getInstance(); ServiceRequestFacadeLocal srLocal =

(ServiceRequestFacadeLocal) serviceLocator.getFacadeService ("java:comp/env/ejb/ServiceRequestFacade");

srLocal.mergeEntity(serviceRequest); return "saved";

9-12 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

更新の永続化または取り消し

} catch (NamingException e) { // TODO e.printStackTrace();

} return "saved";

}

このメソッドが、すでに JSF ナビゲーション・ダイアグラムで定義された、(このページから SRListページを指し示す)ナビゲーション・ケースの名前である文字列 savedを返すことに注意してくだ

さい。

3. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、以下をインポートします。

javax.faces.context.FacesContext javax.faces.application.Application javax.faces.el.ValueBinding org.srdemo.persistence.Users org.srdemo.persistence.ServiceHistories org.srdemo.view.util.ServiceLocator org.srdemo.business.ServiceRequestFacadeLocal javax.naming.NamingException

4. エディタで SREdit.jsp に切り替えます。表の後にカーソルを合わせ、[Enter]キーを押して空白行を

作成します。

5. Component Palette でドロップダウン・リストから「JSF HTML」を選択し、「Command Button」をク

リックします。

6. Property Palette で、Value プロパティを Save に設定します。

7. エディタで「Save」ボタンをダブルクリックし、Bind Action Property ダイアログ・ボックスで、Methodドロップダウン・リストから「updateSR」を選択します。「OK」をクリックします。

注意:SREditマネージドBean内のupdateSR()メソッドは、SRListページへ移動するために、

faces-config.xmlファイルに定義したナビゲーション・ケースの名前である文字列savedを返

します。

8. SREdit.jsp のエディタで、Component Palette からページの Save ボタンの右側まで、「Command Button」コンポーネントをドラッグします。

9. バッキング Bean 内の更新コードを実行せずにユーザーが SRList ページへ移動するように、Property Palette で Value プロパティを Cancelに設定し、Action プロパティを saved に設定します。

10. アプリケーションの他のページで変更を参照できるように、マネージド Bean のスコープを

session に変更します。エディタで、「faces-config.xml」ファイルを開くか(「ViewController」を

右クリックして「Open JSF Navigation」を選択します)、または faces-config.xml ファイルに切り替

えます。

11. 「Overview」タブをクリックし、「SREdit」を選択して、「Edit」をクリックします。

レコードを編集するページの開発 9-13

詳細レコードの表示

12. マネージド Bean の Properties ダイアログ・ボックスで、Scope ドロップダウン・リストから「session」を選択し、「OK」をクリックします。

13. session スコープを持つ Bean のクラスは、配布可能な Web アプリケーションの一部である場合、

シリアライズ可能なインタフェースを実装する必要があります。「SREdit.java」を開くか、または

SREdit.java に切り替えて、次の行を検索します。

public class SREdit {

これを次のように変更します。

public class SREdit implements Serializable{

プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、java.io.Serializableを

インポートします。

14. 「Save All 」をクリックして、作業を保存します。

詳細レコードの表示 すでに追加した注記を顧客が参照できるように、顧客がサービス・リクエストを編集するページで、関連し

たサービス履歴レコードを表示することにします。詳細レコードを表示するには、以下の手順を実行します。

1. エディタで「SREdit.jsp」を開き、コマンド・ボタンの後にある行をスキップして、Request Historyと入力します。Block Format ドロップダウン・リストから、「Heading 2」を選択します。

9-14 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

詳細レコードの表示

2. Request History 見出しの下にある横線の 後にカーソルを合わせ、[Enter]キーを押して新規の行を

作成します。

3. Component Palette で、ドロップダウン・リストから「JSF HTML」を選択し、作成した空白行まで

「Data Table」をドラッグして、ページにデータ表を配置します。

4. Create Data Table ウィザードの Welcome ページが表示されたら、「Next」をクリックします。

5. ウィザードの Binding ページで、「Bind the Data Table Now」オプションを選択し、「Next」をクリッ

クします。

6. ウィザードの Bind Data Table ページで、Value フィールドの隣にある「Bind」をクリックします。

7. Expression Builder ウィンドウで、Filter By ドロップダウン・リストから「All Types」を選択します。

8. 左側にあるツリーで、「JSF Managed Beans」、「SREdit」、および「serviceRequest」を開きます。

9. 「serviceHistoriesList」を選択し、右矢印 をクリックして Expression フィールドに転送し、

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

レコードを編集するページの開発 9-15

詳細レコードの表示

10. ウィザードの Bind Data Table ページで、Class をorg.srdemo.persistence.ServiceHistoriesに変更します。Var フィールドに historyと

入力し、「Next」をクリックします。

11. ウィザードの Header and Row Data ページで、データ表の列を指定します。データ表では、Users、Notes、および Svh Date の 3 つの列のみ必要です。他の列を順番に選択し、「Remove」をクリック

して、他の列を削除します。Header Value の Usersを Submitted Byに変更し、Svh Dateを Dateに変更します。Component Value の Submitted Byを#{history.users.firstNameに変更しま

す。ウィンドウの右側にあるボタンを使用して、データを次の順序に並べ替え、「Finish」をクリッ

クします。

ヘッダーの値 コンポーネント コンポーネントの値 Notes Output Text #{history.notes}

Date Output Text #{history.svhDate}

Submitted By Output Text #{history.users.firstName}

9-16 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

レコードの条件付き非表示

12. 「Save All 」をクリックして、作業を保存します。

レコードの条件付き非表示 一部のサービス履歴レコードは、スタッフによって非表示マークが付けられます。これらのレコードには、

顧客に表示してはならない機密情報が含まれています。顧客が使用する SREdit ページ内のビューからこれ

らのレコードを条件付きで非表示にするには、以下の手順を実行します。

1. エディタで「SREdit.jsp」を開き、「#{history.notes}」出力テキストを選択して、Property Inspector

で「Rendered」プロパティを選択し、「Bind to Data 」をクリックします。

2. Rendered プロパティ・ダイアログ・ボックスで、Expression フィールドに#{history.svhType != "Hidden"}と入力し、「OK」をクリックします。

3. 同様に、ページの詳細セクションにある他の 2 つの出力テキスト項目用でも、Rendered プロパティ

を#{history.svhType != "Hidden"}に設定します。

4. 「Save All 」をクリックして、作業を保存します。

スタッフ用の編集ページの開発 スタッフがサービス・リクエストを編集するために使用するページは、顧客が使用するページとほとんど同

様です。ただし、スタッフ用の編集ページには、注記が顧客ビューから隠れていることを示すフィールドが

あります。また、スタッフは顧客に非表示にしている注記を確認できるため、条件付き表示は不要です。

スタッフ用の編集ページを作成するほとんどの手順は、顧客用の編集ページを作成する手順と同様です。

1. "顧客用の編集ページの作成"にあるすべてのステップを実行します。ただし、JSF ナビゲーション・

ダイアグラムでは、(/app/SREdit でなく)「/app/staff/SRTEdit」をダブルクリックし、表には(6 つ

でなく)7 つの行を作成します。 後の行のラベルは Notesですが、6 番目の行のラベルは Hiddenです。ページは、次のスクリーンショットのようになります。

レコードを編集するページの開発 9-17

スタッフ用の編集ページの開発

2. "データの表示"にあるすべてのステップを実行します。ただし、(SREdit.java と SREdit.jsp でなく)

SRTEdit.java と SRTEdit.jsp を編集し、すべて(SREdit ではなく)SRTEdit を参照します。このセ

クションが完成すると、ページは次のスクリーンショットのようになります。

9-18 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

スタッフ用の編集ページの開発

3. "データ入力コンポーネントの追加"にあるすべてのステップを実行します。ただし、(SREdit.jsp で

なく)SRTEdit.jsp を編集し、すべて(SREdit でなく)SRTEdit を参照します。このセクションが

完成すると、ページは次のスクリーンショットのようになります。

4. 顧客にコメントを非表示にすることを示すチェック・ボックスを追加します。Component Palette から Hidden ラベルが付いている行の右セルまで「Checkbox」コンポーネントをドラッグします。

5. 次に、チェック・ボックスの値を保持するコードをページのバッキング Bean に追加します。エディ

タで「SRTEdit.java」を開くか、または SRTEdit.java に切り替えます(「ViewController」→「Application Sources」→「org.srdemo.view」→「backing」)。

6. 次の private 変数を追加します。private boolean hideComments = false;

7. エディタの中を右クリックし、コンテキスト・メニューから「Generate Accessors」を選択します。

8. Generate Accessors ダイアログ・ボックスで、「hideComments」のチェック・ボックスを選択し、「OK」

をクリックします。

9. エディタで SRTEdit.jsp に切り替え、作成したチェック・ボックス・コンポーネントを選択します。

Property Palette で「Value」フィールドをクリックし、「Bind to Data 」をクリックします。

レコードを編集するページの開発 9-19

スタッフ用の編集ページの開発

10. Value ダイアログ・ボックスで「JSF Managed Beans」を開き、Variables ツリーで「SRTEdit」を開

きます。

「hideComments」を選択し、右矢印 をクリックして Expression に追加し、「OK」をクリッ

クします。

11. "更新の永続化または取り消し"にあるすべてのステップを実行します。ただし、(SREdit.java および

SREdit.jsp の代わりに)SRTEdit.java と SRTEdit.jsp を編集し、(updateSR()メソッドの代わりに)

サービス・リクエストを更新する以下のコードを追加します。

public String updateTSR(){ FacesContext ctx = FacesContext.getCurrentInstance(); Application app = ctx.getApplication(); ValueBinding curUser = app.createValueBinding

("#{UserInfo.currentUser}"); Users currentUser = (Users)curUser.getValue(ctx); ServiceHistories historynotes = new ServiceHistories(); historynotes.setServiceRequests(serviceRequest); historynotes.setNotes(getInputTextarea1().

getValue().toString()); historynotes.setLineNo(null); if (hideComments) {

historynotes.setSvhType("Hidden"); } else {

historynotes.setSvhType("Technician"); } historynotes.setSvhDate(null); historynotes.setUsers(currentUser); serviceRequest.addServiceHistories(historynotes); ServiceLocator serviceLocator = null; try {

serviceLocator = serviceLocator.getInstance(); ServiceRequestFacadeLocal srLocal =

(ServiceRequestFacadeLocal)serviceLocator. getFacadeService ("java:comp/env/ejb/ServiceRequestFacade");

srLocal.mergeEntity(serviceRequest);

9-20 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

スタッフ用の編集ページの開発

return "techsaved"; } catch (NamingException e) {

// TODO e.printStackTrace();

} return "techsaved";

}

このメソッドが、すでに JSF ナビゲーション・ダイアグラムで定義された、(このページから SRListページを指し示す)ナビゲーション・ケースの名前である文字列 techsaved を返すことに注意してく

ださい。

プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、いくつかの import 文を追加し

ます。インポートするアプリケーション・パッケージの選択が表示されたら、 「javax.faces.application.Application」を選択します。

"更新の永続化または取り消し"にあるコマンド・ボタンの作成を継続します。ただし、Cancel ボタン

用の Action には(saved ではなく)techsaved を定義します。また、マネージド Bean のスコープ

を sessionに変更し、SREditのバッキング Bean で行ったように、SRTEditのバッキング Bean ク

ラス用のシリアライズ可能インタフェースを実装する必要があります。

12. "詳細レコードの表示"にあるすべてのステップを実行します。ただし、(SREdit.java と SREdit.jsp の

代わりに)SRTEdit.java と SRTEdit.jsp を編集します。

13. 顧客用の編集ページと異なり、詳細レコードを条件付きで非表示にすることはありません。非表示

マークが付いている場合でも、スタッフにはすべての注記を表示する必要があります。

レコードを編集するページの開発 9-21

更新ロジックと UI コンポーネントのテスト

14. 「Save All 」をクリックして、作業を保存します。ページは、次のスクリーンショットのよう

になります。

更新ロジックと UI コンポーネントのテスト 更新ロジックを定義し、サービス・リクエストを編集するために必要な UI コンポーネントを作成したので、

機能をテストできます。それには、以下の手順を実行します。

1. Applications Navigator で、「ViewController」プロジェクトと「Web Content」ノードを開きます。

2. 「index.jsp」を右クリックして、コンテキスト・メニューから「Run」を選択します。

9-22 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

更新ロジックと UI コンポーネントのテスト

3. ブラウザが開き、Logon ページが表示されます。次のログオン情報を入力し、「Sign On」をクリッ

クします。

Username Password

ghimuro Welcome

4. SRWelcome ページで、「View Your Service Requests」をクリックします。

5. List ページで、いずれかのサービス・リクエストのリンクをクリックします。

6. Edit ページで、「Cancel」をクリックします。これで List ページへ戻ります。

レコードを編集するページの開発 9-23

更新ロジックと UI コンポーネントのテスト

7. 別のサービス・リクエストのリンクをクリックします。Edit ページで、ステータスを変更して注記

を入力し、「Save」をクリックします。

9-24 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

更新ロジックと UI コンポーネントのテスト

8. これで List ページへ戻ります。同じリンクをもう一度クリックして、Edit ページの詳細セクション

に新しい注記が表示されるのを確認します。

9. 「Logout」をクリックして、Logon ページを再び表示します。次のログオン情報を入力し、「Sign On」をクリックします。

Username Password

sking Welcome

10. SRWelcome ページで、「View Your Service Requests」をクリックします。

11. List ページで、SR ID「110」のリンクをクリックします。Edit ページで、ステータスを変更し、注

記に非表示マークを付けます。注記を追加して、「Save」をクリックします。

12. これで List ページへ戻ります。変更されたステータスを確認します。SR ID「110」のリンクを再び

クリックします。入力した注記が、詳細セクションに表示されます。

レコードを編集するページの開発 9-25

まとめ

13. 「Logout」をクリックし、次の情報でログインしなおします。

Username Password

gimuro Welcome

注意:ここでエラーが発生する場合は、アプリケーションを再起動してghimuroとしてログインし、

残りのステップを継続します。

14. 「View Your Service Requests」をクリックします。List ページで、SR ID「110」のリンクをクリッ

クします。非表示にされた注記は、詳細セクションに表示されません。

まとめ この章では、ユーザーがサービス・リクエストを編集できるページを作成しました。そのために、主に以下

の作業を実行しました。

以下を含む顧客用とスタッフ用の編集ページを作成しました。

読取り専用データの表示コンポーネント

データ入力を簡素化するコンポーネント

更新を永続化するボタンと取り消すボタン

詳細なサービス履歴レコードを表示するセクション

特定の詳細レコードを条件付きで非表示にするロジックを顧客用の編集ページに追加しました。

特定の詳細レコードを顧客ビューで非表示にするマークの付いたロジックを、スタッフ用の編集ペー

ジに追加しました。

更新ロジックと UI コンポーネントのテストを実行しました。

9-26 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

10 Triage ページの作成

この章では、管理者がサービス・リクエストを技術者に割り当てるための SRTriage ページを作成する方法に

ついて説明します。

前の章をまだ完了していない場合は、¥setupディレクトリの¥solutionsサブディレクトリで前の章のソ

リューションにアクセスできます(¥setupディレクトリを作成する方法については、第 1 章の"環境のセッ

トアップ"の項を参照してください)。適当なディレクトリに SRDEMOCh09.zip ファイルを抽出し、Oracle JDeveloper で SRDEMO.jwsワークスペースを開き、作業を継続します。

この章では、以下のトピックについて説明します。

Triage ページの概要

ページの概要の作成

データ・モデルへの名前付き問合せの追加

セッション・ファサードでの新規の名前付き問合せの公開

データを検索するバッキング Bean の更新

ページへのデータ表の追加

更新の永続化または取り消し

ページの機能のテスト

まとめ

Triage ページの作成 10-1

Triage ページの概要

Triage ページの概要 管理者は、SRTriage ページを使用して、新規のリクエストを技術者に割り当て、また、既存のリクエストを

異なる技術者に割り当てます。JSF ナビゲーション・ダイアグラムは、SRTriage ページと他のページの関係

を示します。

SRTriage ページでは、以下の点に注意する必要があります。

このページは、管理者にのみ使用可能です。

管理者は、managerのロールを持ったユーザーだけに表示されるリンクをクリックして、Welcomeページから SRTriage ページにアクセスします。

管理者が Triage Service Requests リンクをクリックすると、SRTriage ページに、まだ技術者が割り当

てられていないサービス・リクエストと未処理のサービス・リクエストのリストが表示されます。

管理者は、技術者のリストからリクエストを担当する技術者を選択し、Assign Technicians をクリッ

クしてサービス・リクエストを更新できます。

次のスクリーンショットは、SRTriage ページの機能を示しています。

10-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ページの概要の作成

1. 各アプリケーション・ページには、タイトル、ログインしたユーザーに関する情報、および Logoutリンクが表示されます。

2. JSF Data Table コンポーネントは、未処理のサービス・リクエストと技術者が割り当てられていな

いサービス・リクエストのリストを表示します。データは、ServiceRequestsエンティティに

追加する名前付き問合せから取得されます。このサービス・リクエストのリストを検索するコー

ドをページのバッキング Bean に追加し、式言語を使用してこのコードにデータ表を関連付けます。

3. JSF Listbox コンポーネントは、technicianロールを持つすべてのユーザーを表示します。データ

は、Usersエンティティに追加する名前付き問合せから取得されます。この技術者リストを検索す

るコードをページのバッキング Bean に追加し、式言語を使用してこのコードにリスト・ボックスを

関連付けます。サービス・リクエストがすでに技術者に割り当てられている場合も、式言語を使用

してリスト・ボックスの値をそのサービス・リクエストにすでに割り当てられている技術者に設定

します。

4. Assign Technicians ボタンは、基礎となるデータベースの表にデータを永続化するために、バッキン

グ Bean に追加するコードを呼び出します。Bean は、セッションのすべてのページでデータが使用

できるように、session スコープに設定されます。Bean 内のこのコードは、すでに定義したナビゲー

ション・ルール内の From outcome の 1 つに対応する文字列値を返します。

5. Cancel ボタンには、すでに定義したナビゲーション・ルール内の From outcome の 1 つに設定された

アクションがあります。そのため、コードを実行してデータを永続化せずに移動できます。

ページの概要の作成 まず、以下の手順に従って、基本的なページを作成します。

1. エディタで「faces-config.xml」を開くか、切り替えます(ファイルを開くには、「ViewController」プロジェクトを右クリックし、コンテキスト・メニューから「Open JSF Navigation」を選択します)。

2. Diagram タブで、「SRTriage」ページをダブルクリックして、Create JSF JSP ウィザードを起動します。

3. ウィザードの Welcome ページが表示されたら、「Next」をクリックします。

4. ウィザードの JSP File ページで、「Next」をクリックします。

Triage ページの作成 10-3

ページの概要の作成

5. ウィザードのComponent Bindingページで、「Automatically Expose UI Components in a New Managed Bean」オプションを選択します。Name を SRTriageに変更し、Package を

org.srdemo.view.backingに変更して、「Finish」をクリックします。

6. SRTriage ページが作成され、エディタで開かれます。AssignService RequeststoTechniciansと入力し、Block Format ドロップダウン・リストから「Heading 1」を選択します。

7. Component Palette で、ドロップダウン・リストから「JSF HTML」を選択し、ビジュアル・エディ

タで次の行まで「Messages」コンポーネントをドラッグします。

8. Messages コンポーネントの後にカーソルを合わせて[Enter]キーを押し、Component Palette で

「Command Hyperlink」コンポーネントをクリックします。

9. Insert Command Hyperlink ダイアログ・ボックスで、Value に Logoutと入力し、「OK」をクリック

します。

10. Command Hyperlink の Property Inspector で、Action に#{}と入力して[Enter]キーを押し、「Back」をク

リックして Action プロパティへ戻ります。フィールドの 後にある省略記号 をクリックします。

11. Action ダイアログ・ボックスで、「Method Binding」オプションが選択されていることを確認します。

Managed bean ドロップダウン・リストから「Logout」を選択し、Method ドロップダウン・リストか

ら「logoutButton_action」を選択します。「OK」をクリックします。

10-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ページの概要の作成

これで、Logout リンクが、前の章で作成した Logout マネージド Bean 内のコードを実行することが

保証されます。

12. Structure ウィンドウで、定義した commandLink を含む「paragraph node 」を選択します。

13. Property Inspector で、ドロップダウン・リストから値を選択して、段落の Align プロパティを「right」に設定します。

Triage ページの作成 10-5

データ・モデルへの名前付き問合せの追加

14. エディタで、次の行に Youareloggedinasと入力し、[Space]キーを押します。Block Format ドロッ

プダウン・リストから、「Heading 5」を選択します。

15. Component Palette で、「Output Text」コンポーネントをクリックします。

16. エディタで、出力テキスト・フィールドが作成されます。出力テキストの Property Inspector で、

「Value」プロパティを選択し、「Bind to Data 」をクリックします。

17. Value ダイアログ・ボックスで、「JSF Managed Beans」と「UserInfo」を開きます。「userName」を

選択し、右矢印 をクリックして、右側にある式に追加します。「OK」をクリックします。こ

れで、アプリケーションは、実行時に認証されたユーザーの名前を表示します。

18. Component Palette で、ドロップダウン・リストから「CSS」を選択し、「JDeveloper」を選択します。

19. 「Save All 」をクリックして、作業を保存します。

データ・モデルへの名前付き問合せの追加 次に、一部のサービス・リクエストを表示するデータ表と、各リクエストを割り当てることができる技術者

のリストをページに追加します。そのために、さらに 2 つの名前付き問合せをデータ・モデルに追加する必

要があります。追加する 初の名前付き問合せは、未処理または割り当てられていないサービス・リクエス

トを検索します。2 番目の名前付き問合せは、技術者のリストを返します。

データ表に必要な名前付き問合せを追加するには、以下の手順を実行します。

1. Applications Navigator で、「Model」プロジェクト・ノードを開き、「Application Sources」と

「oracle.srdemo.persistence」を開きます。

2. 「ServiceHistories.java」をダブルクリックして、エディタで開きます。

3. 他の名前付き問合せからカンマで区切って、Named Queries セクションに次の名前付き問合せを追

加します。

@NamedQuery(name="findTriageRequests",query="select object(sr)" + " from ServiceRequests sr where " + "sr.status = :status or sr.users1 is null " )

この問合せは、指定したステータスを持つ、またはまだ技術者に割り当てられていないサービス・

リクエストを検索します。データ表でこの名前付き問合せを呼び出すときは、Open ステータスを

渡します。そのため、Open ステータスを使用して、すべての未処理サービス・リクエストと割り

当てられていないサービス・リクエストを検索します。

4. Applications Navigator で、「Users.java」をダブルクリックして、エディタで開きます。

5. 他の名前付き問合せからカンマで区切って、Named Queries セクションに次の名前付き問合せを追

加します。

@NamedQuery(name="findUsersByRole", query="select object (user)"+ " from Users user where user.userRole = :userRole")

この問合せは、指定したロールのすべてのユーザーを検索します。データ表でこの名前付き問合せ

を呼び出すときは、ロール名 technicianを渡します。

6. 「Save All 」をクリックして、作業を保存します。

10-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

セッション・ファサードでの新規の名前付き問合せの公開

セッション・ファサードでの新規の名前付き問合せの公開 新規の名前付き問合せは、セッション・ファサードを変更してこの問合せにアクセスするメソッドを組み込

むまで、アプリケーションで使用できません。新規の名前付き問合せを公開するには、以下の手順を実行し

ます。

1. ファサード・エディタで名前付き問合せを表示するには、名前付き問合せを含むクラスをコンパイ

ルする必要があります。それには、「Rebuild 」をクリックしてすべてをコンパイルします。

2. Applications Navigator で、「Model」→「Application Sources」→「org.srdemo.business」と開きます。

3. 「ServiceRequestFacadeBean.java」を右クリックし、「Edit Session Facade」を選択します。

4. Session Facade Options ダイアログ・ボックスで、「ServiceRequests」ノードと「Users」ノードを開

き、追加した問合せ「findTriageRequests」と「findUsersByRole」のチェック・ボックスを選択しま

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

5. エディタで ServiceRequestFacadeBean.java ファイルが開きます。ファイルの終わりまでスクロール

して、新規の名前付き問合せを公開するために追加した新規のメソッドを確認します。

6. 「Save All 」をクリックして、作業を保存します。

Triage ページの作成 10-7

データを検索するバッキング Bean の更新

データを検索するバッキング Bean の更新 SRTriage ページは、未処理のサービス・リクエスト、技術者が割り当てられていないサービス・リクエスト、

および各リクエストに割り当てることができる技術者のリストを表示します。データがセッション・ファサー

ドから検索され、SRTriage.jsp ページのデータ表で公開されます。このデータを使用できるようにページのバッ

キング Bean を変更するには、以下の手順を実行します。

1. Applications Navigator で、「ViewController」プロジェクト、「Application Sources」、「org.srdemo.view」、

および「backing」ノードを開きます。

2. 「SRTriage.java」をダブルクリックして、エディタで開きます。

3. 以下の private 変数を追加します。

private List<ServiceRequests> srTriageList = new ArrayList(); private List<SelectItem> techniciansList = new ArrayList(); private HashMap usersMap = new HashMap(); private List<String> assignedUsers;

セッション・ファサードからこれらの変数用のデータが検索され、ページでコンポーネントがデー

タのアクセッサを使用できるようになります。

4. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、import 文を追加します。この

とき、Listクラスは java.util.Listです。

5. コード・エディタ・ウィンドウの中を右クリックし、コンテキスト・メニューから「Generate Accessors」を選択します。

6. Generate Accessors ダイアログ・ボックスで、追加したすべての変数のチェック・ボックスを選択し、

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

10-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データを検索するバッキング Bean の更新

7. ファイルの一番下までスクロールして、作成したアクセッサを確認できます。

8. SRTriage.java バッキング Bean クラスで、配列にすべての技術者を入力するコンストラクタを

追加します。リスト・ボックスに表示できるように、javax.jsf.SelectItemオブジェクトを持

つ ArrayListを使用します。

コンストラクタは、セッション・ファサードのインスタンスをキャッシュし、セッション・ファ

サードでfindUsersByRoleメソッドを呼び出すServiceLocatorクラスのインスタンスを取得

します。このメソッドは、Listof Users を返します。次に、検索されたリストは、userid と

usernameを格納する SelectItem オブジェクトを持った techniciansListに入力されます。ペー

ジのリスト・ボックスで選択されるユーザーと適合させるために、検索された各 Usersも hashMap

に保存されます。

SRTriage.java に次のメソッドを追加します。

public SRTriage(){ // Get the Service Locator's instance

ServiceLocator serviceLocator = null; try {

serviceLocator = serviceLocator.getInstance(); ServiceRequestFacadeLocal srLocal =

(ServiceRequestFacadeLocal)serviceLocator.getFacadeService("java: comp/env/ejb/ServiceRequestFacade");

List usersList = srLocal.findUsersByRole("technician");

techniciansList.add(new SelectItem("", "Not Assigned"));

Iterator it = usersList.iterator(); while(it.hasNext()){

Users user = (Users)it.next(); String userID = user.getUserId().toString(); usersMap.put(userID, user); String userName = user.getFirstName() +

" " + user.getLastName(); techniciansList.add(new SelectItem(userID,

userName)); }

} catch (NamingException e) { e.printStackTrace();

} }

Triage ページの作成 10-9

データを検索するバッキング Bean の更新

9. [Alt]を押しながら[Enter]キーを押して、推奨される import 文を受け入れます。

10. Structure ウィンドウで、「getSrTriageList()」メソッドをダブルクリックして、エディタで検

索します。

11. 割り当てる必要があるサービス・リクエストを検索するように、getSrTriageList()メソッドを

更新します。メソッドは、セッション・ファサードのインスタンスをキャッシュし、セッション・

ファサードで findTriageRequests()メソッドを呼び出す ServiceLocatorクラスのインスタ

ンスを取得します。このメソッドは、割り当てる必要があるサービス・リクエスト("Open"ステー

タスを持つサービス・リクエストまたは技術者に割り当てられていないサービス・リクエスト)の

リストを返します。

public List<ServiceRequests> getSrTriageList() { // Get the Service Locator's instance ServiceLocator serviceLocator = null; try { serviceLocator = serviceLocator.getInstance(); ServiceRequestFacadeLocal srLocal =

(ServiceRequestFacadeLocal)serviceLocator.getFacadeService("java: comp/env/ejb/ServiceRequestFacade");

List<ServiceRequests> srList = srLocal.findTriageRequests("Open");

if (assignedUsers == null) { assignedUsers = new ArrayList();

} else {

assignedUsers.clear(); } for (ServiceRequests sr : srList) {

String userId = (sr.getUsers1() == null) ? "" : sr.getUsers1().getUserId().toString();

assignedUsers.add(userId); } return srList;

} catch (NamingException e) { // TODO e.printStackTrace();

} return srTriageList;

}

10-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ページへのデータ表の追加

12. 「Save All 」をクリックして、作業を保存します。

ページへのデータ表の追加 バッキング Bean を変更したので、データ表でそのコードを使用できます。ページ上のデータ表を作成する

には、以下の手順を実行します。

1. エディタで「SRTriage.jsp」を開き、Component Palette でドロップダウン・リストから「JSF HTML」を選択し、ビジュアル・エディタで「Data Table」コンポーネントをページの 後にある空白行まで

ドラッグします。

2. Create Data Table ウィザードの Welcome ページが表示されたら、「Next」をクリックします。

3. ウィザードの Binding ページで、「Bind the Data Table Now」オプションを選択し、「Next」をクリッ

クします。

4. ウィザードの Bind Data Table ページで、「Bind」をクリックします。

5. Expression Builder ダイアログ・ボックスで、「SRTriage」を開き、「srTriageList」を選択し、右矢印

をクリックして Expression に追加します。「OK」をクリックします。

6. ウィザードで、Class を org.srdemo.persistence.ServiceRequests に変更します。Varフィールドに triageSRと入力し、「Next」をクリックします。

Triage ページの作成 10-11

ページへのデータ表の追加

7. ウィザードの Header and Row Data ページで「Users」を選択し、「Remove」をクリックします。

同様に、「AssignedDate」、「Service Histories List」、および「Users1」を削除します。

8. ウィンドウの右側にあるボタンを使用して、データを次の順序で配列します。

Svr ID Status Request Date Products Problem Description

9. Component Value of Productsを#{triageSR.products.name}に変更し、「Finish」をクリック

します。

10-12 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ページへのデータ表の追加

10. データ表を作成したので、管理者が選択できる技術者のリストを表示するための列を追加する必要

があります。Applications Navigator またはエディタで、「SRTriage.jsp」を選択します。Structure ウィ

ンドウで、「h:dataTable」コンポーネントを右クリックし、コンテキスト・メニューから「Insert inside h:dataTable」と「Column」を選択します。

データ表の右側に列が挿入されます。

11. この列にリスト・ボックスを追加する必要があります。このリスト・ボックスの選択項目は、SRTriageバッキング Bean に作成した techniciansList を使用します。次に、リスト・ボックスの値を

サービス・リクエストの users1 属性の userId に関連付けます。これは、データベース内の

ASSIGNED_TOにマップされる属性です。

Component Palette で、「JSF HTML」を選択します。「Listbox」コンポーネントを選択し、前のステッ

プで挿入した列までドラッグします。エディタまたは Structure ウィンドウで、列までドラッグでき

ます。

12. Insert Listbox ダイアログ・ボックスで、「Bind」をクリックします。

Triage ページの作成 10-13

更新の永続化または取り消し

13. Expression ダイアログ・ボックスで、「SRTriage」ノードを開き、「techniciansList」を選択し、右矢

印 をクリックして、#{SRTriage.techniciansList}式を追加します。「OK」をクリック

します。

14. Insert Listbox ダイアログ・ボックスで、「Advanced Properties」タブをクリックします。

15. 「Value」プロパティを選択し、次の値を入力します。

#{SRTriage.assignedUsers[SRTriage.dataTable1.rowIndex]}

「OK」をクリックして、Insert List ダイアログ・ボックスを閉じます。

16. 「Save All 」をクリックして、作業を保存します。

更新の永続化または取り消し ここでは、ページがサービス・リクエスト更新を処理できるように、マネージド Bean にコードを追加しま

す。また、そのコードを呼び出すボタンとレコードの更新を取り消す別のボタンを追加します。次に、セッ

ション全体を通じて更新された情報を表示できるように、マネージド Bean のスコープを session に変更し

ます。

それには、以下の手順を実行します。

1. 「SRTriage.java」を開くか、または SRTriage.java に切り替えます(「ViewController」→「Application Sources」→「org.srdemo.view」→「backing」)。

2. 次のメソッドを追加します。

public String triageRequests(){ for (int i = 0; i < getDataTable1().getRowCount(); i++) {

getDataTable1().setRowIndex(i); ServiceRequests assignTechToSR =

(ServiceRequests)getDataTable1().getRowData(); String assignedUserId = assignedUsers.get(i); if (

10-14 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

更新の永続化または取り消し

usersMap.containsKey(assignedUserId)) {

Users techUser = (Users)usersMap.get(assignedUserId);

assignTechToSR.setUsers1(techUser); assignTechToSR.setAssignedDate(null); ServiceLocator serviceLocator = null; try {

serviceLocator = serviceLocator.getInstance();

ServiceRequestFacadeLocal srLocal = (ServiceRequestFacadeLocal)serviceLocator.getFacadeService("java: comp/env/ejb/ServiceRequestFacade");

srLocal.mergeEntity(assignTechToSR);

} catch (NamingException e) { // TODO e.printStackTrace();

} }

} return "triaged";

}

このメソッドは、割り当てる必要がある各サービス・リクエストの技術者を管理者が選択した後で、

サービス・リクエスト更新を処理します。メソッドは、データ表の各行を順番にたどって、管理者

がリストからユーザーを選択したかどうかを確認します。管理者がリストからユーザーを選択した

場合は、ServiceLocatorのインスタンスを取得し、サービス・リクエスト・ファサードBeanを検

索して、mergeEntityメソッドを呼び出し、データベースにコミットする更新された

ServiceRequestsオブジェクトを渡します。

注意:このメソッドは、すでにJSFナビゲーション・ダイアグラムで定義された、(このページから

SRListページを指し示す)ナビゲーション・ケースの名前である文字列triagedを返します。

3. エディタで SRTriage.jsp に切り替えます。フォーム内のデータ表(赤い点線)の後にカーソルを合

わせ、[Enter]キーを押して空白行を作成します。

4. Component Palette でドロップダウン・リストから「JSF HTML」を選択し、「Command Button」を

クリックします。

5. Property Palette で、Value プロパティを AssignTechniciansに設定します。

6. エディタで「Assign Technicians」ボタンをダブルクリックし、Bind Action Property ダイアログ・ボッ

クスで、Method ドロップダウン・リストから「triageRequests」を選択します。「OK」をクリック

します。

注意:SRTriageマネージドBean内のtriageRequests()メソッドは、更新されたレコードを永続化

し、SRListページへ移動するために、faces-config.xmlファイルに定義したナビゲーション・ケ

ースの名前である文字列triagedを返します。

Triage ページの作成 10-15

更新の永続化または取り消し

7. SRTriage.jsp のエディタで、Assign Technicians ボタンの右側にカーソルを合わせ、Component Paletteで「Command Button」をクリックします。

8. ユーザーがバッキング Bean 内の更新コードを実行せずに SRList ページへ移動するために、Property Palette で Value プロパティを Cancelにし、Action プロパティを「triaged」に設定します。

9. アプリケーションの他のページで変更を参照できるように、マネージド Bean のスコープを

session に変更します。エディタで、「faces-config.xml」ファイルを開くか(「ViewController」を

右クリックして「Open JSF Navigation」を選択します)、または faces-config.xml ファイルに切り替

えます。

10. 「Overview」タブをクリックし、「SRTriage」を選択して、「Edit」をクリックします。

11. マネージド Bean の Properties ダイアログ・ボックスで、Scope ドロップダウン・リストから「session」を選択し、「OK」をクリックします。

12. session スコープを持つ Bean のクラスは、配布可能な Web アプリケーションの一部である場合、

シリアライズ可能なインタフェースを実装する必要があります。このアプリケーションをクラスタ

(OC4J インスタンスのグループ)に配置するには、以下のステップを実行する必要があります。

「SRTriage.java」を開くか、または切り替えて、次の行を検索します。

public class SRTriage {

これを次のように変更します。

public class SRTriage implements Serializable{

プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、「java.io.Serializable」をインポートします。

13. 「Save All 」をクリックして、作業を保存します。

10-16 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

ページの機能のテスト

ページの機能のテスト 更新ロジックを定義し、サービス・リクエストを割り当てるために必要な UI コンポーネントを作成したの

で、機能をテストできます。それには、以下の手順を実行します。

1. Applications Navigator で、「ViewController」プロジェクトと「Web Content」ノードを開きます。

2. 「index.jsp」を右クリックして、コンテキスト・メニューから「Run」を選択します。ブラウザが

開き、Logon ページが表示されます。次のログオン情報を入力し、「Sign On」をクリックします。

Username Password

Sking welcome

3. SRWelcome ページで、「Triage Service Requests」をクリックします。

4. Triage ページで、「Cancel」をクリックします。「Back to Home」をクリックすると、Welcome ペー

ジへ戻ることができる List ページへ移動します。

5. Welcome ページで、再度「Triage Service Requests」をクリックします。

6. Triage ページで、1 つまたは複数の技術者が割り当てられていないサービス・リクエストに対して

技術者を選択し、「Assign Technicians」をクリックします。

Triage ページの作成 10-17

まとめ

7. Oracle JDeveloper で、「Connections」タブをクリックします。Connection Navigator で、「Database」、「SRDemo」、「SRDEMO」、および「Tables」ノードを開きます。「SERVICE_REQUEST」表をダ

ブルクリックして、エディタで開きます。

8. 「Data」タブをクリックします。データベースに更新がコミットされたことが確認できます。

注意:エディタで表が開いている場合は、「View」→「Refresh」と選択して、更新を確認する必要

があります。

まとめ この章では、JavaServer Faces コンポーネントを使用するサービス・リクエストの割当てページを作成しまし

た。それらのコンポーネントは、EJB 3.0 データ・モデルから取得するデータを表示します。また、データ

表に表示されるサービス・リクエストを処理し、管理者の選択に基づいて技術者を割り当てるアクションを

追加しました。

要約すると、この章で実行した主な作業は、次のとおりです。

ヘッダー、Messages コンポーネント、Logout リンク、ログイン・ユーザーの名前を表示するメッセー

ジからなる、ページの概要を作成しました。

サービス・リクエストと技術者のリストを表示する名前付き問合せを追加しました。

セッション・ファサードを編集して、新規の名前付き問合せを公開しました。

セッション・ファサードからデータを取得するように、ページのバッキング Bean を更新しました。

未処理または割り当てられていないサービス・リクエストのリストと、それらのサービス・リクエ

ストを割り当てることができる技術者のリストを表示する Data Table コンポーネントをページに追

加しました。

更新を永続化する、または取り消す Command Button コンポーネントを追加しました。

ページの機能のテストを実行しました。

10-18 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

11 レコードを挿入するページの開発

これまでに作成した DML を実行するすべてのページを使用して、ユーザーは既存のデータを更新できます。

ここでは、ユーザーがデータベースに新規のサービス・リクエスト・レコードを挿入するための挿入ページ

を作成します。ページには、データの正確さを保証し、データ入力を簡素化する UI コンポーネントを追加

します。

前の章をまだ完了していない場合は、¥setupディレクトリの¥solutionsサブディレクトリで前の章のソ

リューションにアクセスできます(¥setupディレクトリを作成する方法については、第 1 章の"環境のセッ

トアップ"の項を参照してください)。適当なディレクトリに SRDEMOCh10.zip ファイルを抽出し、Oracle JDeveloper で SRDEMO.jwsワークスペースを開き、作業を継続します。

この章では、以下のトピックについて説明します。

挿入ページの作成

データ入力コンポーネントの追加

挿入の永続化または取り消し

挿入ロジックと UI コンポーネントのテスト

まとめ

レコードを挿入するページの開発 11-1

挿入ページの作成

挿入ページの作成 SRWelcome ページからアクセスする SRCreate ページを使用すると、ユーザーは新規のサービス・リクエスト

を作成できます。このページで、ユーザーは、全製品のリストから選択し、サービス・リクエスト・レコード

の問題の説明とサービス履歴レコードの注記レコードを入力できます。

また、ユーザーは、SRCreate ページで Cancel ボタンをクリックして、新規のサービス・リクエストの作成を

取り消すこともできます。Cancel をクリックすると、すべてのフォーム検証を迂回して SRList ページに戻り

ます。

ユーザーがデータをコミットすると、バッキング Bean コードは、サービス・リクエスト・レコードおよび

関連するサービス履歴レコードをデータベースに挿入します。次に、SRList ページへの移動が実行されます。

SRCreate ページを定義するには、以下の手順を実行します。

1. まだ開いていない場合は、エディタで「faces-config.xml」を開きます。すでに開いている場合は、

そのタブをクリックします。(ファイルを開くには、「ViewController」プロジェクトを右クリック

し、コンテキスト・メニューから「Open JSF Navigation」を選択します)。「Diagram」タブをクリッ

クします。

2. 「/app/SRCreate.jsp」アイコンをダブルクリックして、Create JSF JSP ウィザードを起動します。

3. ウィザードの Welcome ページが表示されたら、「Next」をクリックします。

4. ウィザードの JSP File ページで、「Next」をクリックします。

5. ウィザードのComponent Bindingページで、「Automatically Expose UI Components in a New Managed Bean」オプションを選択します。マネージド Bean の Name を SRCreate に変更し、Package を

org.srdemo.view.backingに変更します。「Finish」をクリックします。

6. エディタで新規ページが開きます。Createanewservicerequestと入力し、Block Format ドロッ

プダウン・リストから「Heading 1」を選択します。

7. Component Palette で、ドロップダウン・リストから「JSF HTML」を選択し、ビジュアル・エディ

タのページ上の次の行まで「Messages」コンポーネントをドラッグします。

11-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

挿入ページの作成

8. Messages コンポーネントの後にカーソルを合わせて、[Enter]キーを押します。次に、「Command Hyperlink」コンポーネントをクリックします。

9. Insert Command Hyperlink ダイアログ・ボックスで、Value に Logoutと入力し、「OK」をクリック

します。

10. Command Hyperlink の Property Inspector で、Action に#{}と入力して[Enter]キーを押し、「Back」をク

リックして Action プロパティへ戻ります。フィールドの 後にある省略記号 をクリックします。

11. Action ダイアログ・ボックスで、「Method Binding」オプションが選択されていることを確認します。

Managed bean ドロップダウン・リストから「Logout」を選択し、Method ドロップダウン・リストか

ら「logoutButton_action」を選択します。「OK」をクリックします。

これで、Logout リンクが、前の章で作成した Logout マネージド Bean 内のコードを実行することが

保証されます。

12. Structure ウィンドウで、定義した commandLink を含む「paragraph node 」を選択します。

レコードを挿入するページの開発 11-3

挿入ページの作成

13. Property Inspector で、ドロップダウン・リストから値を選択して、段落の Align プロパティを「right」に設定します。

14. 次の行で、Youareloggedinasと入力し、[Space]キーを押します。Block Format ドロップダウン・

リストから、「Heading 5」を選択します。

15. Component Palette で、「Output Text」コンポーネントをクリックします。

16. エディタで、出力テキスト・フィールドが作成されます。出力テキストの Property Inspector で、

「Value」プロパティを選択し、「Bind to Data 」をクリックします。

17. Value ダイアログ・ボックスで、「JSF Managed Beans」と「UserInfo」を開きます。「userName」を

選択し、右矢印 をクリックして、右側にある式に追加します。「OK」をクリックします。こ

れで、アプリケーションは、実行時に認証されたユーザーの名前を表示します。

18. Component Palette ドロップダウン・リストから「HTML Common」を選択し、ビジュアル・エディ

タでページ上の次の行まで「Table」コンポーネントをドラッグして、ページ上に表を作成します。

19. Insert Table ダイアログ・ボックスで、行数を 3に設定し、「OK」をクリックします。

20. 左側の列で、3 行に次の 3 つの語句を入力します。

SelectaProduct ProblemDescription Notes

11-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データ入力コンポーネントの追加

21. Component Palette ドロップダウン・リストから「CSS」を選択し、「JDeveloper」を選択します。ペー

ジは、次のスクリーンショットのようになります。

22. 「Save All 」をクリックして、作業を保存します。

データ入力コンポーネントの追加 ここでは、データの正確さを保証し、データ入力を簡素化する UI コンポーネントを追加します。複数のコ

ンポーネントを作成し、ユーザーが以下を実行できるためのコードを追加します。

製品の選択

テキストの入力

コミットまたは取り消し

ユーザーが製品を選択できるようにする ユーザーが正しい製品 ID を入力できるように、選択リストを実装します。

SRCreate マネージド Bean で製品リストを検索するためのロジックをコーディングし、マネージド Bean 内の

コードを呼び出すコンポーネントをページに追加します。製品リストを実装するには、セッション・ファ

サードに新規のメソッドを追加する必要もあります。

それには、以下の手順を実行します。

1. セッション・ファサードのインタフェースと Bean に、新規のメソッドを追加します。Applications Navigator で、「Model」、「Application Sources」、「org.srdemo.business」を開きます。

2. 「ServiceRequestFacadeBean.java」を右クリックし、コンテキスト・メニューから「Edit Session Facade」を選択します。

3. Session Facade Options ダイアログ・ボックスで、「Products」を開き、「Products.findAll」のチェッ

ク・ボックスを選択します。「OK」をクリックします。

レコードを挿入するページの開発 11-5

データ入力コンポーネントの追加

4. エディタで ServiceRequestFacadeBean.java が開きます。Structure ウィンドウで、追加した

「queryProductsFindAll()」メソッドを右クリックし、コンテキスト・メニューから「Properties」を

選択します。

5. Bean Methods Details ダイアログ・ボックスで、メソッドの名前を findAllProducts に変更し、

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

このようにメソッド・プロパティを変更すると、ローカル・インタフェースとリモート・インタ

フェースのコードが、セッション Bean のコードと同期化されます。

11-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データ入力コンポーネントの追加

6. エディタで ServiceRequestFacadeBean.java ファイルの終わりまでスクロールすると、追加したメソッ

ドを確認できます。

7. 「Save All 」をクリックして、作業を保存します。

8. セッション・ファサードにコードを追加したので、選択リスト・コンポーネントが使用できるよう

に製品リストを検索するよう、SRCreate ページのバッキング Bean を変更できます。Applications Navigator で、「ViewController」、「Application Sources」、「org.srdemo.view」、および「backing」を

開きます。「SRCreate.java」をダブルクリックして、エディタで開きます。

9. 以下の変数宣言を追加します。

private List prodList = new ArrayList(); private String productKey; HashMap productMap = new HashMap();

10. プロンプトが表示されたら、[Alt]を押しながら[Enter]キーを押して、import 文を追加します。この

とき、Listクラスには「java.util.List」を選択します。

11. エディタ・ウィンドウの中を右クリックし、コンテキスト・メニューから「Generate Accessors」を

選択します。

12. Generate Accessors ダイアログ・ボックスで、「prodList」、「productKey」、および「productMap」変数のチェック・ボックスを選択し、「OK」をクリックします。

レコードを挿入するページの開発 11-7

データ入力コンポーネントの追加

13. ファイルの終わり付近で、prodlistのアクセッサ・メソッドを変更します。

初に、setter メソッドの署名を変更します。次の行を検索します。

public void setProdList(List prodList) {

これを次のように変更します。

public void setProdList(List<Products> prodList) {

次に、[Alt]を押しながら[Enter]キーを押して、推奨される import 文を受け入れます。

14. getter メソッドの署名を変更します。次の行を検索します。

public List getProdList() {

これを次のように変更します。

public List<Products> getProdList() {

15. getter メソッドの本体を変更します。次の行を検索します。

return prodList;

以下の行で上書きします。

ServiceLocator serviceLocator = null; try {

serviceLocator = serviceLocator.getInstance(); ServiceRequestFacadeLocal srLocal =

(ServiceRequestFacadeLocal) serviceLocator.getFacadeService ("java:comp/env/ejb/ServiceRequestFacade");

List productsList = srLocal.findAllProducts(); Iterator it = productsList.iterator();

while(it.hasNext()){ Products product = (Products)it.next(); SelectItem sItem = new SelectItem(); String pId =

product.getProdId().toString(); productMap.put(pId, product); String prodName = product.getName(); sItem.setLabel(prodName); sItem.setValue(pId); prodList.add(sItem);

}

11-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データ入力コンポーネントの追加

} catch (NamingException e) { e.printStackTrace();

} return prodList;

16. プロンプトが表示されるたびに[Alt]を押しながら[Enter]キーを押して、推奨されるすべての import文を受け入れます。

17. 「Save All 」をクリックして、作業を保存します。

18. これで、ページに選択リスト・コンポーネントを追加できます。エディタで SRCreate.jsp を開くか、

切り替えます。Component Palette で、ドロップダウン・リストから「JSF HTML」を選択し、すで

にページに作成した表の右上にあるセルまで「Listbox」コンポーネントをドラッグします。

19. Insert Listbox ダイアログ・ボックスで、「Bind to list (select items)」オプションが選択されているこ

とを確認し、「Bind」をクリックします。

20. Expression Builder で、「JSF Managed Beans」と「SRCreate」を開きます。「prodList」を選択し、右

矢印をクリックして Expression へ転送し、「OK」をクリックします。

これは、SRCreate マネージド Bean から製品リストの項目に表示されます。

21. 「Advanced Properties」タブをクリックします。

22. 「Value」プロパティをクリックし、「Bind to Data 」をクリックします。

23. Value ダイアログ・ボックスで、「JSF Managed Beans」と「SRCreate」を開きます。「productKey」を選択し、右矢印をクリックして Expression へ転送し、「OK」をクリックします。

レコードを挿入するページの開発 11-9

挿入の永続化または取り消し

これで、リスト項目の値が、ユーザーがリストから選択する製品の製品 ID に設定されます。

24. 「OK」をクリックして、Insert Listbox ダイアログ・ボックスを閉じます。

25. 「Save All 」をクリックして、作業を保存します。

テキストを入力できるようにする 次に、ユーザーが問題の簡単な説明を入力し、注記を記録できるようにするコンポーネントを追加します。

テキストを入力できるようにするには、以下の手順を実行します。

1. Component Palette から、ビジュアル・エディタでページのリスト・ボックスの下にあるセルまで、

「Input Text」コンポーネントをドラッグします。ユーザーが 1 行で問題の説明を入力できる領域が

作成されます。

2. Component Palette から、ビジュアル・エディタでページの Input Text の下にあるセルまで、「Input Textarea」コンポーネントをドラッグします。これで、ユーザーが複数のテキスト行として注記を

入力できる領域が作成されます。

3. 「Save All 」をクリックして、作業を保存します。

挿入の永続化または取り消し ここでは、入力値をエンティティ・オブジェクトに割り当て、データベースにデータを永続化するコードを

ページのマネージド Bean に追加します。また、そのコードを呼び出すボタンとレコードの挿入を取り消す

別のボタンを追加します。

それには、以下の手順を実行します。

1. 「SRCreate.java」を開くか、または切り替えます(「ViewController」→「Application Sources」→

「org.srdemo.view」→「backing」)。

2. 入力フィールドをエンティティ内のプロパティに割り当て、データベースにデータを永続化(コミッ

ト)する次のメソッドを追加します。

public String CreateSR(){ ServiceRequests sr = new ServiceRequests(); sr.setStatus("Open"); Products product = (Products)productMap.get(productKey);

11-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

挿入の永続化または取り消し

//sr.setProducts(getProduct()); sr.setProducts(product); sr.setProblemDescription

(getInputText1().getValue().toString()); FacesContext ctx = FacesContext.getCurrentInstance(); Application app = ctx.getApplication(); ValueBinding curUser =

app.createValueBinding("#{UserInfo.currentUser}"); Users currentUser = (Users)curUser.getValue(ctx); sr.setUsers(currentUser); sr.setRequestDate(null); ServiceHistories svh = new ServiceHistories(); svh.setServiceRequests(sr); svh.setNotes(getInputTextarea1().getValue().toString()); svh.setLineNo(null); svh.setSvhDate(null); svh.setSvhType("Customer"); svh.setUsers(currentUser);

// sr.addToServiceHistoriesList(svh); List<ServiceHistories> svhList = new

ArrayList<ServiceHistories>(); svhList.add(svh); sr.setServiceHistoriesList(svhList); ServiceLocator serviceLocator = null; try {

serviceLocator = serviceLocator.getInstance(); ServiceRequestFacadeLocal srLocal =

(ServiceRequestFacadeLocal) serviceLocator.getFacadeService ("java:comp/env/ejb/ServiceRequestFacade");

srLocal.persistEntity(sr); return "created";

} catch (NamingException e) { // TODO e.printStackTrace();

} return "created";

}

3. プロンプトが表示されるたびに[Alt]を押しながら[Enter]キーを押して、import 文を受け入れます。

このとき、Application クラスには「javax.faces.application.Application」をインポート

します。

4. エディタで SRCreate.jsp に切り替えます。フォーム内の表(赤い点線)の後にカーソルを合わせ、

[Enter]キーを押して空白行を作成します。

5. Component Palette でドロップダウン・リストから「JSF HTML」を選択し、「Command Button」を

クリックします。

6. Command Button の Property Inspector で、Value プロパティを「Create」に設定します。

7. エディタで「Create」ボタンをダブルクリックし、Bind Action Property ダイアログ・ボックスで、

Method ドロップダウン・リストから「CreateSR」を選択します。「OK」をクリックします。

レコードを挿入するページの開発 11-11

挿入ロジックと UI コンポーネントのテスト

注意:SRCreateマネージドBean内のCreateSR()メソッドは、データを永続化し、SRListページへ

移動するために、faces-config.xmlファイルに定義したナビゲーション・ケースの名前である

文字列createdを返します。

8. SRCreate.jsp のエディタで、「Command Button」を Create ボタンの右側まで、Component Palette か

らドラッグします。

9. Property Palette で、Value プロパティを「Cancel」に設定します。レコードを作成し、保存するマネ

ージド Bean 内のコードを実行せずに、ユーザーが SRList ページへ移動するように、Action プロパテ

ィ・ドロップダウン・リストから「created」を選択します。

10. 「Save All 」をクリックして、作業を保存します。

挿入ロジックと UI コンポーネントのテスト 挿入ロジックを定義し、新規のサービス・リクエストを挿入するために必要な UI コンポーネントを作成し

たので、機能をテストできます。それには、以下の手順を実行します。

1. Applications Navigator で、「ViewController」プロジェクトと「Web Content」ノードを開きます。

2. 「index.jsp」を右クリックして、コンテキスト・メニューから「Run」を選択します。

3. ブラウザが開き、Logon ページが表示されます。次のログオン情報を入力し、「Sign On」をクリッ

クします。

Username Password

sking welcome

11-12 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

挿入ロジックと UI コンポーネントのテスト

4. SRWelcome ページで、「Create a New Service Request」をクリックします。

5. Create ページで、製品を選択し、問題の説明と注記を入力して、「Cancel」をクリックします。

6. データを入力してもコミットしなければ、SRListページにデータは表示されません。「Back to Home」リンクをクリックします。

レコードを挿入するページの開発 11-13

挿入ロジックと UI コンポーネントのテスト

7. SRWelcome ページで、再度「Create a New Service Request」をクリックします。

8. 製品を選択し、問題の説明と注記を入力して、「Create」をクリックします。

11-14 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

挿入ロジックと UI コンポーネントのテスト

9. SRList ページが表示され、作成したサービス・リクエストを確認します。

レコードを挿入するページの開発 11-15

挿入ロジックと UI コンポーネントのテスト

10. データがデータベースにコミットされたことを確認するには、Oracle JDeveloper で「Connection Navigator」タブをクリックし、「SRDemo」、「SRDEMO」、および「Tables」ノードを開きます。

11. 「SERVICE_HISTORIES」表をダブルクリックして開き、「Data」タブをクリックします。作成し

たサービス・リクエストが表示されます(すでに表が開いている場合は、新規のデータを確認する

ために、「View」→「Refresh」を選択する必要があります)。

11-16 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

まとめ

12. 次に、Connection Navigator で「SERVICE_HISTORIES」表をダブルクリックし、「Data」タブをク

リックします。新しく作成したレコードが表示されます。

まとめ この章では、ユーザーがデータベースに新規のサービス・リクエストを作成できるページを作成しました。

そのために、主に以下の作業を実行しました。

ユーザーID を表示してログアウトするための、標準的なロジックを持つ SRCreate ページを作成し

ました。

コンポーネントを配置する表を追加しました。

データ入力 UI コンポーネントをページに追加しました。

ページのマネージド Bean に UI を表示し、データベースにレコードを挿入するロジックを追加しま

した。

マネージド Bean 内のロジックに UI コンポーネントを対応付けました。

挿入ロジックと UI コンポーネントのテストを実行しました。

レコードを挿入するページの開発 11-17

まとめ まとめ

11-18 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル 11-18 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

12 Oracle Application Server 10g のインストール

このチュートリアルの 初に、Oracle JDeveloper を使用して、Java EE アプリケーションを作成し、JDeveloperの一部である内蔵 OC4J コンテナに配置する方法を説明しました。ただし、本番環境では、アプリケーション・

サーバーに配置する必要があります。このチュートリアルの 後の 2 つの章では、Oracle Application Server 10g(10.1.3.1)に SRDEMO アプリケーションを配置する方法について説明します。

この章では、以下のトピックについて説明します。

はじめに

Oracle Application Server のダウンロード

初の Oracle Application Server インスタンスのインストール

2 番目の OC4J インスタンスのインストール

Application Server Control コンソールの起動

まとめ

Oracle Application Server 10g のインストール 12-1

はじめに

はじめに Oracle Application Server のインストールと配置を開始する前に、Oracle Application Server を使用した EJB 3.0 ア

プリケーションの配置方法を理解しておくと有用です。この項では、以下の質問に対する回答を学習します。

Oracle Application Server とは何か

OC4J を使用する利点は何か

リクエストはどのようにアプリケーションまで転送されるか

この章では、主に以下の作業を実行します。

Oracle Application Server 10g をダウンロードする

1 台のホスト・マシンに Oracle Application Server の 2 つのインスタンスをインストールする

2 つのインスタンスをクラスタ化する

クラスタ全体にアプリケーションを配置する

クラスタで動作するアプリケーション・インスタンス間の HTTP セッション・ステートのレプリ

ケーションを設定する

このチュートリアルでは、クラスタ化、ステートのレプリケーション、アプリケーションのローリング・アッ

プグレードなどの機能を理解するために、Oracle Application Server 10g の 2 つのインスタンスをインストールし

ます。

同様の物理ホスト・マシンに両方の Oracle Application Server インスタンスをインストールするのが理想的です。

Oracle Application Server Oracle Application Server 10g は、Oracle Fusion Middleware のコンポーネントであり、次世代のエンタープラ

イズ・アプリケーション・サーバーを表します。Oracle Application Server のサービス指向アーキテクチャ基

盤とグリッド対応配置インフラストラクチャは、Oracle Application Server に処方されたすべてのハードウェ

ア・リソース(CPU、メモリー、ストレージ)を効率的にプールして社内で利用することで、全社的なオン

デマンド・コンピューティングを実現します。

このチュートリアルでは、以下の Oracle Application Server コンポーネントを取り扱います。

Oracle Application Server Containers for J2EE(OC4J):OC4J は、Oracle Application Server の中核で

あり、実際にアプリケーションが動作するコンテナを提供します。このチュートリアルの一環とし

て、2 つの OC4J インスタンスからなる小型クラスタを作成します。

Oracle HTTP Server(OHS):OHS は、フロントエンド Web リスナーとして、リクエストされたア

プリケーションが常駐する OC4J インスタンスへ Web リクエストを転送します。クラスタの一部と

して、1 つの OHS インスタンスをインストールします。

Application Server Control:このアプリケーションは、クラスタ内の Oracle Application Server コン

ポーネント(OC4J、OHS など)のインスタンスを管理するために、Web ベースのユーザー・インタ

フェースを提供します。OC4J インスタンスの 1 つに、このアプリケーションの 1 つのインスタンス

をインストールします。

Oracle Application Server の各インスタンスは、1 つまたは複数の OC4J インスタンスを含む場合があります。

このような OC4J インスタンスのことを管理インスタンスと呼びます。

OC4Jの利点 Oracle Application Server の中核は、Oracle Application Server Containers for J2EE(OC4J)です。 新リリース

である OC4J 10g Release 3(10.1.3)は、セキュアで移植性があり、パフォーマンスに優れたアプリケーショ

ンを作成して配置するために、Java EE に完全に準拠する環境を提供します。Java EE 仕様に規定された、以

下のようなすべてのコンテナ、API、サービスを提供します。

12-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

Oracle Application Server のダウンロード

JavaServer Page(JSP)とサーブレット用の実行時環境を提供する Web コンテナ

EJB 2.1 仕様と新規の EJB 3.0 仕様をサポートする Enterprise JavaBeans(EJB)コンテナ

Web サービス用の完全な設計環境と実行時環境

さらに、OC4J は、以下の標準的な Java EE サービスの完全な実装を提供しています。

コンテナで動作しているコンポーネントがメッセージを送受信できる、Java Message Service(JMS)の豊富な機能の実装

Java Database Connection API(JDBC)によるデータのアクセスと永続性このチュートリアルでは、

データベースに接続するためのデータソースを作成する方法を学習します。

Java Transaction API の実装を通じたトランザクション管理

Java Naming and Directory Interface(JNDI)経由のコンポーネント参照

Java Authentication and Authorization Service(JAAS)の実装を通じたアプリケーション・セキュリティ

(アプリケーション・ユーザーの認証と認可)

Java EE Connector Architecture(JCA)による従来のシステムとの接続機能

アプリケーションへのリクエストの転送 OC4J との Web 通信は、フロントエンド・リスナーとして機能する Oracle HTTP Server(OHS)と、Apache JServ Protocol(AJP)1.3を使用して OC4J サーバー・インスタンスに HTTP リクエストを転送する mod_oc4j

モジュールで管理することもできます。

OHS-OC4J のリクエストとレスポンスの流れは、以下のとおりです。

1. OHS リスナーが、着信 HTTP リクエストを受信します。

2. OHS は、OC4J インスタンス内に設定されているネイティブ Web リスナーへリクエストを渡します。

OHS と OC4J 間の接続は、OC4J の起動時に交渉されるポート番号で Apache JServ Protocol(AJP)を使用します。

着信リクエストは、OHS に格納されているマウント・ポイントを使用して、リクエストされたアプリケーシ

ョンをサービスする OC4J インスタンスへ転送されます。たとえば、マウント・ポイントは、基本的に

http://<host>:<port>/SRDEMO という URL を、クラスタで SRDEMO アプリケーションが常駐するホーム・イ

ンスタンスにマップします。

マウント・ポイントは、アプリケーションが配置されるときに動的に作成されます。同様に、未配置のアプ

リケーション用のマウント・ポイントは、自動的に削除されます。

特定のマウント・ポイント用の着信リクエストは、そのマウント・ポイントに対応する OC4J インスタンス

へ転送されます。動的なマウント・ポイント設定は、OC4J が提供する主要な強化機能です。この機能によ

り、リクエストされたアプリケーションのアクティブなインスタンスを持たないサーバーへのリクエストの

誤配を防止できます。

Oracle Application Server のダウンロード インストール CD がない場合は、Oracle Technology Network(OTN)から Oracle Application Server 10g をダ

ウンロードできます。ダウンロードするには、以下の手順を実行します。

1. ブラウザを開いて、次の URL を入力します。

http://www.oracle.com/technology/products/ias/index.html

2. 「Download」リンクをクリックします。

Oracle Application Server 10g のインストール 12-3

最初の Oracle Application Server インスタンスのインストール

注意:OTNの内容が変化することがあるので、Webページの外観がスクリーンショットと異なる場

合があります。

3. ダウンロード・ページで、Oracle Application Server SOA Suite (10.1.3.1.0)用のリンクをクリック

します。

4. 使用許諾と輸出制限の内容を確認し、プラットフォーム(Windows または Linux)に対応するリン

クをクリックします。この章では、Windows バージョンを使用する例を示します。Linux バージョ

ン用の手順は、異なる場合があります。インストールする前に、必ずインストール・ガイドを参照

してください。

5. ダウンロードが完了したら、適当なディレクトリにファイルを抽出します。

最初の Oracle Application Server インスタンスのインストール インストールする 初のインスタンスには、以下のコンポーネントが含まれます。

Oracle Containers for J2EE(OC4J) - 完全な Java EE 準拠環境を提供します。

Oracle HTTP Server - 着信 Web リクエストを監視し、リクエストされたアプリケーションが常駐す

る OC4J インスタンスへ転送します。

Oracle Process Manager and Notification Server(OPMN) - OC4J や OHS のような各種の Oracle Application Server コンポーネントを管理します。

インストールを実行するには、以下の手順を実行します。

1. Oracle Universal Installer を起動します。Windows では、インストール・ファイルを抽出したディレ

クトリで、「setup.exe」をダブルクリックします。

12-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

最初の Oracle Application Server インスタンスのインストール

2. インストーラのインストール画面で「Browse」をクリックして、アプリケーション・サーバーをイ

ンストールする必要がある Oracle ホーム・ディレクトリへ移動します。また、このアプリケーショ

ン・サーバーのバージョンに適した新規のサブディレクトリを必ず指定してください。このチュー

トリアルでは、このパス全体のことをアプリケーション・サーバーのホーム・ディレクトリまたは

<AS_HOME>と呼びます。「Advanced Install」オプションを選択し、「Next」をクリックします。

3. インストーラの Select Installation Type 画面で、「J2EE Server and Web Server」オプションを選択し

ます。「Next」をクリックします。

4. インストーラの Specify Port Configuration Options 画面で、「Automatic」オプションを選択し、「Next」をクリックします。

これで、OPMN コンポーネントが、インストール時に使用するポートを動的に選択できるようにな

ります。

Oracle Application Server 10g のインストール 12-5

最初の Oracle Application Server インスタンスのインストール

5. インストーラの Administration Settings 画面で、Oracle Application Server インスタンスの名前を指定

します。これは管理インスタンスであるため、(例のように)adminを使用しても問題ありません。

デフォルトの oc4jadmin 管理者アカウントに関連付ける管理者アカウント・パスワードを指定し

ます( 低 1 文字は数字にします)。例では、パスワードとして welcome1を使用しています。

「Configure this as an Administration OC4J Instance」チェック・ボックスを選択します。

便宜上、Oracle Application Server インスタンスで動作する OC4J インスタンス用に、デフォルト名の

home を受け入れることができます。「Next」をクリックします。

6. インストーラのCluster Topology Configuration画面で、「Configure this instance to be part of an Oracle Application Server cluster topology」チェック・ボックスを選択します。次に、OHS と OC4J のイン

スタンスをクラスタに追加するために使用する、マルチキャスト・アドレスとポートの組合せを提

供します。マルチキャスト・アドレスは、224.0.1.0~239.255.255.255 の有効なアドレス範囲にある

必要があります。

このステップでは、動的検出メカニズムを有効にして、Oracle Application Server のコンポーネント

が、マルチキャスト・メッセージを使用して、動的に検出し相互に通信できるようにします。Oracle Application Server の各ノードは、同様のアドレスとポートの組合せでブロードキャストする他の

ノードが、マルチキャスト・ブロードキャストを経由してクラスタに追加され、あるいはクラスタ

から削除されるときに更新されるので、クラスタは実質的にそれ自体を管理できます。

なお、インストール時のクラスタ化は不要です。また、マルチキャストに基づく動的検出は、サポー

トされている唯一のクラスタ化オプションではありません。ただし、これは実装するのにもっとも

単純なクラスタ化方式なので、ここではこの方法を使用します。クラスタ構成の完全な詳細につい

ては、『Oracle Containers for J2EE構成および管理ガイド』(http://download-west.oracle.com/docs/cd/ B25221_02/web.1013/b14432.pdf)を参照してください。

例では、IP アドレスは 225.0.0.1、ポートは 6789を使用しています。

12-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

最初の Oracle Application Server インスタンスのインストール

「Next」をクリックします。

7. インストーラの Summary 画面で「Install」をクリックして、インスタンスをインストールします。

8. インストールが完了すると、インストーラの Configuration Assistants 画面で、2 つの configuration assistant について Succeeded ステータスが表示されます。「Next」をクリックします。

9. End of Installation 画面に、以下のさまざまな情報が表示されます。

• Oracle HTTP Server インスタンスにアクセスするために必要なホストとポート情報

• Application Server Control コンソールの管理インタフェースにアクセスするために使用する URL

この情報は、<AS_HOME>¥install¥readme.txtファイルにも含まれます。

終了したら、「Exit」をクリックしてインストーラを終了します。Web ブラウザに"Welcome"ページ

が表示され、オンライン・マニュアルや他の資料へのリンクを提供します。また、このページから

Application Server Control を起動することもできます。ただし、後で実行してください。

インストーラが実行したアクションの詳細を確認する場合は、インストーラを閉じた後で

C:¥ProgramFiles¥Oracle¥Inventory¥logs¥installActions<datetime>.log ファイル

を開きます。

10. インストール・プロセスの一環として、インストールしたすべての Oracle Application Server コン

ポーネント(OC4J、OHS、および OPMN 管理コンポーネント)はデフォルトで起動します。こ

れらのコンポーネントが動作していることを確認するには、コマンド・プロンプトを開き、次の

コマンドを入力します。

<AS_HOME>/opmn/bin/opmnctl status

Oracle Application Server 10g のインストール 12-7

2 番目の OC4J インスタンスのインストール

次に例を示します。

C:¥oracle¥product¥10.1.3.1¥AS10g¥opmn¥bin¥opmnctl status

コンポーネントが動作している場合は、次のような出力が表示されます。

Processes in Instance: admin.<host.domain> -------------------+--------------------+---------+--------- ias-component | process-type | pid | status -------------------+--------------------+---------+--------- OC4J | home | 7108 | Alive HTTP_Server | HTTP_Server | 596 | Alive

exitと入力して、コマンド・プロンプト・ウィンドウを終了します。

注意:この章で説明するマルチキャスト型のクラスタ化を使用するには、仮想プライベート・

ネットワーク(VPN)経由ではなく、ネットワークに直接接続する必要があります。VPN経由

で接続している場合は、『OC4J 構成および管理ガイド』(http://download-west.oracle.com/ docs/cd/B25221_02/web.1013/b14432.pdf)の"静的検出サーバーの構成"の項に記載されている

peer-to-peerのクラスタ化を使用できます。このチュートリアルでは、(peer-to-peerではなく)マ

ルチキャスト型のクラスタ化を使用します。

2 番目の OC4J インスタンスのインストール 次に、2 番目の Oracle Application Server インスタンスをインストールします。ただし、今回は、OC4J と OPMNコンポーネントだけをインストールします。クラスタでリクエストを受信して転送するには、 初のインス

タンスにインストールした Oracle HTTP Server を使用します。

2 番目の OC4J インスタンスをインストールするには、以下の手順を実行します。

1. 前回と同様、Oracle Universal Installer を起動します。

インストーラの Installation 画面で「Browse」をクリックして、前回と同様のアプリケーション・

サーバーのホーム・ディレクトリまで移動し、前回のアプリケーション・サーバーのホーム・ディ

レクトリと区別するため、サブディレクトリに番号を追加します。このチュートリアルでは、この

パス全体を<AS2_HOME>と呼びます。「Advanced Install」オプションを選択し、「Next」をクリック

します。

12-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

2 番目の OC4J インスタンスのインストール

2. インストーラの Select Installation Type 画面で、「J2EE Server」オプションを選択します。「Next」を

クリックします。

3. インストーラの Specify Port Configuration Options 画面で、「Automatic」オプションを選択し、「Next」をクリックします。

4. インストーラの Administration Settings 画面で、Oracle Application Server インスタンスの名前を指定

します。これは 2 番目のインスタンスであるため、(例のように)instance2を使用しても問題あ

りません。

管理者アカウント用に指定したものと同様の管理者アカウント・パスワードを指定します。これは、

クラスタ内のすべてのノードへのインストールに必要です。例では、パスワードとして welcome1を使用しています。

今回は、「Configure this as an Administration OC4J Instance」チェック・ボックスを選択しません。こ

の OC4J は Application Server Control が常駐する他のインスタンスによって管理されるため、新規の

インスタンスではこのアプリケーションを無効にします。

初のインスタンスで指定したものと同様の OC4J インスタンス名を指定します。例では、OC4J イン

スタンス名として home を使用しています。これで、クラスタで同様の名前を持つインスタンス・グ

ループにアプリケーションをインストールできます。

「Next」をクリックします。

Oracle Application Server 10g のインストール 12-9

2 番目の OC4J インスタンスのインストール

5. インストーラの Cluster Topology Configuration 画面で、「Access this OC4J Instance from a separate Oracle HTTP Server」チェック・ボックスを選択して、この OC4J インスタンスのローカル Web リ

スナーが OHS インスタンスから転送されたリクエストを受信できるようにします。

「Configure this OC4J instance to be part of an Oracle Application Server cluster topology」チェッ

ク・ボックスを選択します。次に、 初のインスタンス用に設定したものと同様のマルチキャスト・

アドレスとポートの組合せを提供します。

6. 「Next」をクリックします。

7. インストーラの Summary 画面で「Install」をクリックして、インスタンスをインストールします。

8. インストールが完了すると、インストーラの Configuration Assistants 画面に、2 つの configuration assistant について Succeeded ステータスが表示されます。「Next」をクリックします。

9. End of Installation 画面に、さまざまな情報が表示されます。この情報は、

<AS2_HOME>¥install¥readme.txtファイルにも含まれます。終了したら、「Exit」をクリック

してインストーラを終了します。

10. インストーラが実行したアクションの詳細を確認する場合は、インストーラを閉じた後で

C:¥ProgramFiles¥Oracle¥Inventory¥logs¥installActions<datetime>.log ファイル

を開きます。

11. インストール・プロセスの 後に、OC4J インスタンスが起動します。これを確認するには、コマ

ンド・プロンプトを開き、次のコマンドを入力します。 <AS2_HOME>/opmn/bin/opmnctl status

次に例を示します。 C:¥oracle¥product¥10.1.3.1¥AS10g2¥opmn¥bin¥opmnctl status

12-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

Application Server Control コンソールの起動

これで、実質的に、2 つの Oracle Application Server インスタンスをクラスタ化しました。

Application Server Control コンソールの起動 次に、OC4J でアプリケーションを配置し、設定し、監視するための Web ベースのユーザー・インタフェース

である Application Server Control を起動します。Application Server Control を使用すると、アプリケーションが使

用する OC4J サーバー・インスタンスと Web サービスを管理できます。

それには、以下の手順を実行します。

1. Web ブラウザを開きます。Web ブラウザで、次の URL にインストールの 後に書きとめたホスト

名と OHS ポートを示します。http://<hostname>:<port>/em.

たとえば、次のようになります。http://myhost.oracle.com:7777/em/

2. アプリケーション・サーバーをインストールしたときに指定したパスワード(例では welcome1)を提供して、Application Server Control にログインします。「Login」をクリックします。

3. 上位の Cluster Topology ページに、クラスタ化された環境のビューが表示されます。ページの一番

上には、ホスト、サーバー、およびインスタンスの概要が表示されます。

Oracle Application Server 10g のインストール 12-11

4. ページの Members セクションには、2 つの Oracle Application Server インスタンスが表示されます。

各インスタンスを開いて、各インスタンスにインストールされているコンポーネントの詳細を確認

します。各 OC4J インスタンス(ホーム・ノード)を開いて、インストールされているアプリケー

ションを確認します。

ページの一番下にある"Groups"セクションに注意してください。グループとは、同様のクラスタ・

トポロジに属した、同期化されている OC4J インスタンスの集合です。作成した OC4J インスタンス

は同様のクラスタのメンバーであるため、暗黙的にインスタンスの default_group に属します。

グループに対して操作を実行する方法は、次の章で説明します。

これで、アプリケーション・サーバーにアプリケーションを配置できます。

注意:クラスタ内で両方のアプリケーション・サーバー・インスタンスを確認できないときは、ネット

ワークに直接接続されていないことが原因である場合があります。VPN経由で接続している場合は、

『OC4J 構成および管理ガイド』(http://download-west.oracle.com/docs/cd/B25221_02/web.1013/ b14432.pdf)の"静的検出サーバーの構成"の項に記載されているpeer-to-peerのクラスタ化を使用でき

ます。このチュートリアルでは、(peer-to-peerでなく)マルチキャスト型のクラスタ化を使用します。

12-12 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

まとめ

まとめ この章では、Oracle Application Server 10g をインストールして、アプリケーションを配置するための準備を

行いました。

要約すると、この章で実行した主な作業は、次のとおりです。

Oracle Application Server をダウンロードしました。

Oracle HTTP Server と OC4J を含む Oracle Application Server インスタンスをインストールしました。

クラスタで 初のインスタンスによって管理されるように、OC4J だけを含む 2 番目のアプリケー

ション・サーバー・インスタンスをインストールしました。

Application Server Control コンソールを起動して、インストールされているインスタンスを確認しま

した。

Oracle Application Server 10g のインストール 12-13

まとめ

12-14 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

13 Oracle Application Server 10g への

アプリケーションの配置

これで、クラスタ内の OC4J インスタンスの default-groupグループにアプリケーションを配置できます

(クラスタを構成していない場合は、1 つの OC4J インスタンスに配置できます)。Oracle JDeveloper を使用

して配置するアプリケーションをパッケージ化し、Oracle Application Server Control を使用して配置を完了し

ます。

アプリケーションの全ページの作成をまだ完了していない場合は、¥setupディレクトリの¥solutionsサ

ブディレクトリで前の章のソリューションにアクセスできます(¥setupディレクトリを作成する方法につ

いては、第 1 章の"環境のセットアップ"の項を参照してください)。適当なディレクトリに SRDEMOCh11.zip

ファイルを抽出し、Oracle JDeveloper で SRDEMO.jwsワークスペースを開き、作業を継続します。

この章では、以下のトピックについて説明します。

配置の概要

アプリケーションを配布可能に

配置プロジェクトの作成

配置プロファイルの作成

デプロイメント・ディスクリプタの作成

データソースの作成

アプリケーションの配置

アプリケーションのテスト

Application Server Control によるアプリケーションの調査

クラスタ化とローリング・アップグレード(オプション)

まとめ

Oracle Application Server 10g へのアプリケーションの配置 13-1

配置の概要

配置の概要 基本的なアプリケーションの配置は、以下のとおりです。

アーカイブをアップロードする

アプリケーション内の Web モジュールを、Oracle HTTP Server からリクエストを受信する OC4J 内の Web サイトに関連付ける

Application Server Control から OC4J 固有のデプロイメント・ディスクリプタを変更して、アプリケー

ションを設定する

アーカイブを配置する

次のスクリーンショットに示すように、Application Server Control を表示しているブラウザで、ページの一番

下にある Groups セクションに注意してください。

同様の名前(この場合は home)を共有する OC4J インスタンスが、インスタンスの"グループ"を形成します。

アプリケーションの起動、停止、配置のような操作は、グループ内のすべてのインスタンスで同時に実行で

きます。

アプリケーションを配布可能に デフォルトでは、Java EE アプリケーションは、1 つの JVM だけで実行できます。ただし、配布可能マーク

が付いているアプリケーションは、複数の Web コンテナで同時に実行できます。そのため、複数のサーバー

に負荷を分散できるので、スケーラビリティが向上します。また、サーブレット・インスタンス間の透過的

フェイルオーバーを提供して、可用性を改善することもできます。

アプリケーションを配布可能にするには、以下の手順を実行します。

1. Oracle JDeveloper で SRDEMO アプリケーションを開き、「ViewController」プロジェクトに続いて

「Web Content」と「WEB-INF」ノードを開きます。

2. 「web.xml」を右クリックして、コンテキスト・メニューから「Properties」を選択します。

3. Web Application Deployment Descriptor ダイアログ・ボックスで、左側にあるツリーから「General」を選択します。

13-2 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

配置プロジェクトの作成

4. 「Web Application is Distributable」チェック・ボックスを選択し、「OK」をクリックします。

配置プロジェクトの作成 Java EE アプリケーションは、サーブレット、JSP、EJB のような標準的なコンポーネントを含むサーバー側

アプリケーションです。アプリケーションは、Oracle Application Server 10g のような Java EE サーバーに配置

するために、必要なすべてのコードをパッケージ化するモジュールの形で配置されます。モジュールは、Java EE アーキテクチャで規定された標準フォーマットのアーカイブ・ファイルです。そのため、アプリケーショ

ンを配置するには、 初に Java EE アプリケーションまたはモジュールにアセンブルします。

アプリケーションのすべての要素を組織化し、明確に分離するために、アプリケーションの配置コンポーネント

を保持するプロジェクトを作成します。このプロジェクトには、配置プロファイルとファイルが含まれます。

配置プロジェクトを作成するには、以下の手順を実行します。

1. Applications Navigator で、「SRDEMO」アプリケーション・ノードを右クリックして、コンテキス

ト・メニューから「New Project」を選択します。

2. Items リストで「Empty Project」が選択されていることを確認し、「OK」をクリックします。

3. Create Project ダイアログ・ボックスで、Project Name に Deploymentと入力し、「OK」をクリックし

ます。

これで、アプリケーションの配置を管理するために使用するプロジェクトが作成されました。

配置プロファイルの作成 配置プロファイルは、アプリケーションの配置を管理するプロジェクト・コンポーネントです。配置プロ

ファイルとは、配置パッケージに含まれるソース・ファイル、(必要に応じて)デプロイメント・ディスク

リプタ、および他の補助ファイルのリストです。配置プロファイルを作成しても配置パッケージは作成され

ません。単に配置を実行する際に、配置パッケージの作成方法を記述するだけです。

Service Request アプリケーションの配置パッケージには、3 つのプロジェクトがあります。

Model プロジェクト(.jarファイル)

ViewController プロジェクト(.warファイル)

Deployment プロジェクト(.earファイル)

この項では、3 つのプロジェクトの配置プロファイルを作成します。

Oracle Application Server 10g へのアプリケーションの配置 13-3

配置プロファイルの作成

Modelプロジェクトの配置プロファイルの作成 初に、Model プロジェクトの配置プロファイルを作成します。このプロジェクトの内容は、主にアプリ

ケーションのデータ・モデル部分を構成する Java クラスです。このプロジェクトの配置の種類は、EJB JAR(Java Archive)ファイルです。

Model プロジェクトの配置プロファイルを作成するには、以下の手順を実行します。

1. Applications Navigator で「Model」プロジェクトを右クリックし、コンテキスト・メニューから「New」

を選択します。

2. New Gallery で「General」を開き、Categories リストから「Deployment Profiles」を選択します。Itemsリストから「EJB JAR File」を選択し、「OK」をクリックします。

3. Create Deployment Profile ダイアログ・ボックスで、Deployment Profile Name として SRDEMO-EJBと

入力し、「OK」をクリックします。

4. EJB JAR Deployment Profile Properties ダイアログ・ボックスで、「OK」をクリックしてデフォルト値

を受け入れます。

5. 「Save All 」をクリックして、作業を保存します。Applications Navigator は、次のスクリーン

ショットのようになります。

ViewControllerプロジェクトの配置プロファイルの作成 次に、ViewController プロジェクトの配置プロファイルを作成します。このプロジェクトは、アプリケー

ションのユーザー・インタフェース・コンポーネントを作成した場所です。このプロジェクトの配置ファ

イルは、Web コンポーネント用の.warファイル(Web Archive)です。

1. Applications Navigator で「ViewController」プロジェクトを右クリックし、コンテキスト・メニュー

から「New」を選択します。

2. New Gallery で「General」を開き、Categories リストから「Deployment Profiles」を選択します。Itemsリストから「WAR File」を選択し、「OK」をクリックします。

3. Create Deployment Profile ダイアログ・ボックスで、Deployment Profile Name として SRDEMO-WEBと

入力し、「OK」をクリックします。

4. WAR Deployment Profile Properties ダイアログ・ボックスで、Web Application's Context Root として

「Specify J2EE Web Context Root」オプションを選択し、Value として SRDemoと入力します。これ

は、アプリケーションにアクセスするために使用する URL の一部になります。

WAR Deployment Profile Properties ダイアログ・ボックスで「OK」をクリックして、残りのデフォル

ト値を受け入れます。

13-4 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

配置プロファイルの作成

5. 「Save All 」をクリックして、作業内容を保存します。Applications Navigator は、次のスクリーン

ショットのようになります。

Deploymentプロジェクトの配置プロファイルの作成 .jarファイルと.warファイルを作成したので、アプリケーションを配布可能パッケージにアセンブルでき

ます。

配置のアセンブリ部分では、アプリケーションに必要な.jarファイルと.warファイル、および必要になる

場合がある他のサーバー構成ファイルを含んだ配置プロファイルを作成します。次の 2 つの構成ファイルは

必須です。

Oracle Application Server 10g へのアプリケーションの配置 13-5

配置プロファイルの作成

アプリケーション・サーバーのインストール済みデータソースの設定を含む data-sources.xmlファイルデータソースは、データベースなどの物理データ記憶システムを表す実際の Java オブジェ

クトです。Java EE アプリケーションは、この実際の Java オブジェクトからデータベースとの JDBC接続を検索できます。この抽象層は、接続のプール化、構成の柔軟性、アプリケーションの移植性

のような利点を提供します。Oracle JDeveloper は、インストール時に各データベース接続用の OC4Jデータソースを自動的に作成します。Tools → Embedded OC4J Server Preferences を選択すると、こ

れらのデータソースを表示できます。

コンテナが管理するアプリケーション・セキュリティ用の領域(ユーザーとロール)を定義する

jazn-data.xmlファイル(第 6 章ですでに説明しました。)

この配置プロファイルを作成するには、以下の手順を実行します。

1. Applications Navigator で、「Deployment」プロジェクトを右クリックし、「New」を選択します。

2. New Gallery で「General」を開き、Categories リストから「Deployment Profiles」を選択します。Itemsリストから「EAR File」を選択し、「OK」をクリックします。

3. プロファイル名を SRDEMO に変更し、「OK」をクリックします。

4. EAR Deployment Profile Properties ダイアログ・ボックスで、「Application Assembly」カテゴリを選

択し、以下の Java EE モジュールを選択して.earファイルに入れます。

ViewController.jpr → SRDEMO-WEB.deploy Model.jpr → SRDEMO-EJB.deploy

「OK」をクリックして、他のデフォルトを受け入れます。

13-6 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

デプロイメント・ディスクリプタの作成

5. 「Save All 」をクリックして作業内容を保存します。Applications Navigator は、次のスクリーン

ショットのようになります。

デプロイメント・ディスクリプタの作成 これまでは、Oracle JDeveloper の内蔵 OC4J コンテナで、アプリケーションを実行してきました。Oracle Application Server 10g のような Java EE プラットフォームに配置する際は、配置するファイルの名前と位置に

非常に特殊な要件があります。この項では、これらの要件に適合するデプロイメント・ディスクリプタ用の

汎用テンプレートを作成します。次に、これらのテンプレートにアプリケーション固有の情報を追加します。

デプロイメント・ディスクリプタとは、プロジェクトに関連付けられ、Java EE アプリケーションやモジュー

ルと同時に配置される構成ファイルです。デプロイメント・ディスクリプタには、コンポーネントを配置す

るために必要な宣言データと、コンポーネントをアプリケーションに組み立てる方法を記述するアセンブリ

命令が含まれます。

デプロイメント・ディスクリプタ・テンプレートの作成 このアプリケーションに必要なデプロイメント・ディスクリプタのテンプレートを作成するには、以下の手

順を実行します。

1. 「Deployment」プロジェクトを右クリックし、コンテキスト・メニューから「New」を選択します。

2. New Gallery で、Categories リストから「Deployment Descriptors」を選択します。Items リストで「J2EE Deployment Descriptor Wizard」を選択し、「OK」をクリックします。

Oracle Application Server 10g へのアプリケーションの配置 13-7

デプロイメント・ディスクリプタの作成

3. Create Deployment DescriptorウィザードのWelcomeページが表示されたら、「Next」をクリックします。

4. ウィザードの Select Descriptor ページで、application.xml を選択し、「Next」をクリックします。

5. ウィザードの Select Version ページで「5.0」を選択し、「Finish」をクリックします。

6. 「Deployment」プロジェクトを右クリックし、コンテキスト・メニューから「New」を選択します。

7. New Gallery で、Categories リストから「Deployment Descriptors」を選択します。Items リストで「OC4J Deployment Descriptor Wizard」を選択し、「OK」をクリックします。

8. Create Deployment DescriptorウィザードのWelcomeページが表示されたら、「Next」をクリックします。

9. ウィザードの Select Descriptor ページで、jazn-data.xml を選択し、「Next」をクリックします。

10. ウィザードの Select Version ページで「10.0」を選択し、「Finish」をクリックします。

13-8 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

デプロイメント・ディスクリプタの作成

11. 再度、「OC4J Deployment Descriptor Wizard」を起動し、「orion-application.xml」デプロイメント・ディ

スクリプタとバージョン「10.0」を選択します。完了すると、Applications Navigator は次のスクリーン

ショットのようになります。

デプロイメント・ディスクリプタ・テンプレートの変更 デプロイメント・ディスクリプタのテンプレートを作成したので、各テンプレートにアプリケーション固有

の情報を追加できます。デプロイメント・ディスクリプタを変更するには、以下の手順を実行します。

1. エディタで application.xml が開いている場合は、そのタブをクリックして切り替えます。そうでな

い場合は、Applications Navigator で「application.xml」をダブルクリックしてエディタで開きます。

2. Structure ウィンドウで「display-name」ノードを選択し、Property Inspector で display-name を SRDemo Applicationに変更します。

次に、Web モジュールと EJB モジュールをアプリケーションに挿入します。

3. Web モジュールを挿入するには、以下の手順を実行します。

Structure ウィンドウで、「application」ノードを右クリックし、コンテキスト・メニューから

「Insert inside application」→「module」を選択します。

Oracle Application Server 10g へのアプリケーションの配置 13-9

デプロイメント・ディスクリプタの作成

「module」ノードを右クリックし、コンテキスト・メニューから「Insert inside module」→「web」を選択して、id に srdemoと入力します。

「web」ノードを右クリックし、「Insert inside web」→「web-uri」を選択して、Property Inspectorで web-uri を SRDEMO-WEB.warに変更します。

再度「web」ノードを右クリックし、「Insert inside web」→「context-root」を選択して、次の

スクリーンショットに示すように、Property Inspector で context-root の値として SRDemoと入力

します。

4. 次に、以下の手順に従って、EJB モジュールを挿入します。

Structure ウィンドウで、「application」ノードを右クリックし、コンテキスト・メニューから

「Insert inside application」→「module」を選択します。

「module」ノードを右クリックし、コンテキスト・メニューから「Insert inside module」→「ejb」を選択します。

Property Inspector で、ejb プロパティの値として SRDEMO-EJB.jarと入力します。

13-10 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

デプロイメント・ディスクリプタの作成

5. これで、orion-application.xmlファイルは、jazn-data.xmlfile の位置を指し示し、使用す

るデータソースを指定します。エディタで「orion-application.xml」のタブをクリックして切り替え

ます。もしくは、Applications Navigator で「orion-application.xml」をダブルクリックしてエディタ

で開きます。

6. ファイルを読みやすくするため、エディタの中を右クリックし、コンテキスト・メニューから

「Reformat」を選択します。

7. 開始側の orion-applicationタグに、次の属性を追加します。

default-data-source="jdbc/SRDemoDS"

ファイル全体は次のようになります(太字は追加した部分です)。<?xml version = '1.0' encoding = 'windows-1252'?>

<orion-application xmlns:xsi=http://www.w3.org/2001/XMLSchema

instance xsi:noNamespaceSchemaLocation=

"http://xmlns.oracle.com/oracleas/schema/orion-application-

10_0.xsd"

default-data-source="jdbc/SRDemoDS"> <jazn location="./jazn-data.xml" provider="XML"/> </orion-application>

右側の余白に、XML のエラーを示す赤い領域がないことを確認します。

8. エディタで「jazn-data.xml」のタブをクリックして切り替えます。もしくは、Applications Navigatorで「jazn-data.xml」をダブルクリックしてエディタで開きます。

9. Service Request アプリケーションを作成していたときは、SRDemo-jazn-data.xmlという名前

のファイルにユーザーとロールを作成しました。内蔵 OC4J データ用のファイルはすでに定義し

たので、ユーザーとロールの定義を Java EE デプロイメント・ディスクリプタにコピーできます。

エディタの中を右クリックし、コンテキスト・メニューから「Compare With」→「Other File」を選択します。

Oracle Application Server 10g へのアプリケーションの配置 13-11

デプロイメント・ディスクリプタの作成

10. Select File to Compare With ダイアログ・ボックスで、アプリケーションのメイン・ディレクトリで

ある SRDEMO まで移動し、「SRDEMO-jazn-data.xml」を選択して、「Open」をクリックします。

11. Compare ファイルで、SRDEMO-jazn-data.xmlのビューから<jazn-realm>行で始まるすべての

テキストを選択し、[Ctrl]を押しながら[C]キーを押して、テキストをコピーします。必要に応じて、

Compare ファイルを閉じることができます。

12. jazn-data.xml で、終了側の</jazn-data>タグを削除します。終了側の完全な</jazn-data>タグがない場合は、終了側の括弧の前にあるスラッシュ(/)だけを削除します。ファイルは次のよ

うになります。

<?xml version = '1.0' encoding = 'windows-1252' standalone = 'yes'?>

<jazn-data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation=http://xmlns.oracle.com/oracleas/ schema/jazn-data-10_0.xsd

filepath="" OC4J_INSTANCE_ID="">

13-12 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

デプロイメント・ディスクリプタの作成

13. コピーしたテキストを次の行に貼り付けます。

14. エディタの中を右クリックし、コンテキスト・メニューから「Reformat」を選択します。ファイル

は、次のスクリーンショットのようになります。

右側の余白に、XML のエラーを示す赤い領域がないことを確認します。

15. 「Save All 」をクリックして、作業を保存します。

16. 配置に必要なすべてのファイルの準備が整ったので、次の項で Oracle Application Server 10g に配置

する EAR ファイルを作成できます。Applications Navigator で、Deployment プロジェクトの

「SRDEMO.deploy」を右クリックし、コンテキスト・メニューから「Deploy to EAR file」を選択し

ます。

Deployment Log ウィンドウに、配置に関する正常終了が表示されます。

Oracle Application Server 10g へのアプリケーションの配置 13-13

データソースの作成

これで、アプリケーションを Java EE サーバーに正常に配置するために必要な EAR ファイルが作成されまし

た。ログ・ウィンドウに表示される EAR ファイルの位置を書きとめておきます。

データソースの作成 Oracle Application Server 10g に配置するアプリケーションは、データソースと接続プールを使用して、デー

タベース・アクセスを管理します。アプリケーションの開発中に、Oracle JDeveloper は、data-sources.xml

ファイルを作成します。開発と内部テスト中に、Oracle JDeveloper はそのファイルを使用します。

Oracle JDeveloper はデータソースを作成し、配置用にパッケージ化することができますが、アプリケーショ

ン・サーバーでデータソースを直接作成することを推奨します。配置時に物理接続に対応付ける論理名を

データソースに付けることができます。配置時にデータベース接続が使用できない場合、配置は失敗します。

別のデータベースに変更するには、配置したアプリケーションのデータソースを変更するだけで別のデータ

ベースに接続します。これで、データベースを変更しても、アプリケーションを再びパッケージ化し、配置

する必要のないことが保証されます。data-sources.xmlfile を変更した後で、OC4J を再起動する必要

があります。

データソースを作成し、クラスタにアプリケーションを配置するような作業を簡素化するには、OC4J イン

スタンスのグループ(同様のクラスタに属するインスタンス集合)全体でこのような操作を同時に実行しま

す。前の章で注意したように、作成した 2 つの OC4J インスタンスは同様のクラスタのメンバーであるため、

デフォルトでインスタンスの default_groupに追加されます。JDBC ドライバやデータソースのラッパー

として機能する OC4J 固有の実装である管理データソースを作成します。ただし、 初に、接続を効率的に

管理するための管理データソースに使用される接続プールを作成する必要があります。

この演習の一環として、ホーム・インスタンス・グループで、必要な接続プールとデータソースを同時に作

成します。次に、アプリケーションを同様のグループに配置します。

接続プールの作成 接続プールを作成するには、以下の手順を実行します。

1. すでに実行したように、Web ブラウザに次の URL を入力して、Application Server Control を起動し

ます。http://<hostname>:<port>/em.

以下に例を示します。http://myhost.oracle.com:7777/em/

2. アプリケーション・サーバーをインストールしたときに指定したパスワード(例では welcome1)を提供して、Application Server Control にログインします。「Login」をクリックします。

3. Cluster Topology ページで、ページ下部の Groups セクションの下にある「default_group」リンクを

クリックします。これで、OC4J インスタンスのホーム・グループが選択されました。

13-14 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データソースの作成

4. "Group: default_group"ページで、「Administration」タブをクリックします。

5. Group: default_group Administration ページで、JDBC Resources タスクの「Go to Task 」をクリッ

クします。

6. JDBC Resources ページで、Connection Pools の下にある「Create」をクリックします。

7. Create Connection Pool – Application ページで、「New Connection Pool」オプションを選択し、

「Continue」をクリックします。

Oracle Application Server 10g へのアプリケーションの配置 13-15

データソースの作成

8. 次の情報を使用して接続プールを作成します。

フィールド 値 Name SRDemoConnectionPool

Connection Factory oracle.jdbc.pool.OracleDataSource

(デフォルト値)

JDBC URL jdbc:oracle:thin:@//localhost:1521/orcl

(使用するホスト、ポート、およびデータベース)

Credentials: Username

srdemo

Credentials: Cleartext Password

oracle

9. 「Test Connection」をクリックして、接続をテストします。

13-16 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データソースの作成

10. Test Connection ウィンドウで、「Test」をクリックします。正常終了すると、Create Connection Poolページへ戻り、次のメッセージが表示されます。

Connection established successfully for all OC4J instances in the Group.

「Finish」をクリックします。

11. JDBC Resources ページに確認メッセージが表示されます。

Connection pool SRDemoConnectionPool has been created for all

OC4J instances in the Group.

Oracle Application Server 10g へのアプリケーションの配置 13-17

データソースの作成

Connection Pools セクションの下に、新規の接続プールが表示されます。

データソースの作成 接続プールを作成したので、実際に接続をデータベースに提供するデータソースを作成できます。それには、

以下の手順を実行します。

1. Data Sources 表で「Create」をクリックします。

2. "Create Data Source – Application & Type"ページの Application セクションで、Application ドロップダ

ウン・リストから「default」を選択します。デフォルトのアプリケーションとそのすべての子アプ

リケーション(SRDEMO を含む)が、データソースを使用できることが必要です。「Managed Data Source」オプションを選択し、「Continue」をクリックします。

13-18 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

データソースの作成

3. "Create Data Source – Managed Data Source"ページで、Name を SRDemoDSに設定します。データソー

スには、開発中に使用したデータソースと同様の名前を付ける必要があります。JNDI Location を

jdbc/SRDemoDS に 設 定 し ま す 。 Connection Pool ド ロ ッ プ ダ ウ ン ・ リ ス ト か ら

「SRDemoConnectionPool」を選択します。接続プールの定義で設定されているため、認証情報を指定

する必要はありません。「Finish」をクリックします。

4. JDBC Resources ページで、「Test Connection 」をクリックして SRDemoDS データソースをテス

トします。

Oracle Application Server 10g へのアプリケーションの配置 13-19

アプリケーションの配置

5. TestConnection: "SRDemoDS:"ページで、「Test」をクリックします。

6. テストが正常終了すると、JDBC Resources ページに次のメッセージが表示されます。

Connection to "SRDemoDS" established successfully for all OC4J instances in the Group.

アプリケーションを配置する準備が整いました。

アプリケーションの配置 Oracle JDeveloper には、1 回クリックするだけでアプリケーション・サーバーにアプリケーションを配置す

るオプションがあります。配置プロファイルを右クリックして、ターゲットのアプリケーション・サーバー

を選択します。

あるいは、Application Server Control を使用して配置することもできます。この方法は、アプリケーションの

開発者とアプリケーションの配置者の役割を明確に分割することができ、クラスタ内の複数の OC4J インス

タンスにアプリケーションを配置できます。このチュートリアルでは、この方法を使用して、クラスタ内の

OC4J インスタンスの default_groupにアプリケーションを配置します。

基本的なアプリケーションの配置は、以下のとおりです。

アーカイブをアップロードする

アプリケーション内の Web モジュールを、Oracle HTTP Server からリクエストを受信する OC4J 内の Web サイトに関連付ける

Application Server Control から OC4J 固有のデプロイメント・ディスクリプタを変更して、アプリケー

ションを設定する

アーカイブを配置する

配置時に構成作業を実行すると、アプリケーションを再配置するときに適用できる、再利用可能な配置計画

に構成作業を保存できるという重要な利点があります。配置計画とは、OC4J にアーカイブを配置するため

に必要なすべての構成データをクライアント側に凝集させたものです。インストール時に設定するデータは、

EAR にパッケージ化された OC4J デプロイメント・ディスクリプタで指定されるデータとともに配置計画に

永続化されます。

13-20 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

アプリケーションの配置

このチュートリアルで使用する Application Server Control の deployment plan editor コンポーネント、または

Oracle JDeveloper からアプリケーション・サーバーに配置するときに起動される JDeveloper の Configure Application ダイアログを使用すると、配置計画に指定されるすべてのデータを編集できます。すなわち、配

置の前にパッケージ・ディスクリプタを編集でき、アプリケーションを配置する際にこのデータを使用する

新規の OC4J ディスクリプタが生成されます。

Application Server Control の Cluster Topology ページの下にある Groups セクションに注意してください(別の

ページにいる場合は、ページの一番上にあるブレッドクラムで「Cluster Topology」リンクをクリックして、

移動できます)。同様の名前(この場合は home)を共有する OC4J インスタンスが、インスタンスの 1 つの

グループを形成します。アプリケーションの起動、停止、配置のような操作は、グループ内のすべてのイン

スタンスで同時に実行できます。

アプリケーションを配置するには、以下の手順を実行します。

1. Cluster Topology ページで、Groups の下にある「default_group」リンクをクリックします(ページの

一番上にあるブレッドクラムで「Cluster Topology」リンクをクリックして、このページに戻ること

ができます)。

2. "Group: default_group"ページで、「Applications」タブをクリックし、「Deploy」をクリックします。

3. Deployment ウィザードの Select Archive ページで、Archive セクションにある「Browse」をクリック

して、SRDEMO アプリケーションの¥Deployment¥deploy サブディレクトリにある EAR ファイ

ルの位置まで移動します。

以下に例を示します。C:¥JDeveloper¥jdev¥mywork¥SRDEMO¥Deployment¥deploy

「SRDEMO.ear」ファイルを選択し、「Open」をクリックします。ウィザードの Select Archive ペー

ジで、「Next」をクリックします。

Oracle Application Server 10g へのアプリケーションの配置 13-21

アプリケーションの配置

4. Deployment ウィザードの Application Attributesページで、Application Name に SRDEMOと入力します。

この名前は、OC4J Applications ページ上のアプリケーションのリストで、アプリケーションを識別

します。

アプリケーション内の各 Web モジュールについて、コンテキスト・ルートが設定されていることを

確認します(この場合、Web モジュールは 1 つだけです)。この値は、 Java EE の標準

application.xml デプロイメント・ディスクリプタから読取られます。ユーザーは、この値を

URL に追加して、Web モジュールにアクセスします。なお、Web モジュールを、OHS からリクエ

ストを受信する内部のWebリスナーを定義するdefault-web-siteに関連付けることに注意して

ください。

アプリケーションで使用される OC4J インスタンス内で、追加の Web サイトを作成できます。たと

えば、Application Server Control 専用の Web サイトを作成し、一般的なアプリケーションへの Webアクセスを実質的に管理および分割する場合があります。あるいは、HTTPS リクエストを受信する

ために、セキュアな Web サイトを作成しなければならない場合もあります。ただし、このチュート

リアルでは、デフォルトの Web サイトで十分です。

「Next」をクリックします。

5. インストール時の構成を実行する準備が整いました。ウィザードの Deployment Settings ページで、

Configure Clustering 配置タスクの横にある「Go To Task 」をクリックします。

13-22 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

アプリケーションの配置

6. Configure Clustering ページで、「Override parent application clustering settings」オプションを選択し、

Clustering ドロップダウン・リストから「Enable」を選択して、クラスタ化を有効にします。

これで、各種のクラスタ構成オプションを参照できます。

「Peer-to-Peer Replication」オプションを選択して、動的な peer-to-peer のクラスタ化を有効にしま

す。バインド・アドレスを指定する必要はありません。

7. Configure Clustering ページの一番下にある「Replication Properties」を開きます。これらのプロパティ

を使用して、どのデータをレプリケートし、いつレプリケーションを実行するかといったパラメータ

を定義できます。

Oracle Application Server 10g へのアプリケーションの配置 13-23

アプリケーションの配置

同様の物理マシンで動作している OC4J インスタンスへのデータのレプリケートを有効にする、

「Allow Colocation」チェック・ボックスが選択されていることを確認します。

Replication Trigger の設定を空白のままにして、デフォルト値である onRequestEnd を使用します。

デフォルト設定のままで、セッションで変更されるすべての属性がレプリケートされるため、

Replication Scope を設定する必要はありません。

8. ページの一番下または一番上までスクロールして、「OK」をクリックします。Deployment Settingsページに、次のメッセージが表示されます。

Deployment plan has been updated successfully.

「Deploy」をクリックします。Processing ページに、配置の進行状況メッセージが表示されます。

以下に、実行される内容を示します。

OC4J は、管理(admin)Oracle Application Server インスタンスで動作する OC4J インスタンス

上のマスター配置ディレクトリに EAR ファイルをコピーします。デフォルトの位置は、

<OC4J_HOME>/j2ee/home/applications/ディレクトリです。

OC4J は、EAR ファイルにパッケージ化された Java EE の標準 application.xmlディスクリ

プタを開き、解析します。このファイルには、EAR ファイルに入っているすべてのモジュール

のリストが含まれます。OC4J は、これらのモジュールを記憶し、EAR 環境を初期化します。

OC4J は、各モジュール・タイプ - Web モジュール(WAR)、EJB モジュール、コネクタ・モ

ジュール、またはクライアント・モジュール - 用のモジュール・デプロイメント・ディスク

リプタをメモリーに読み込みます。JARファイル環境とWARファイル環境も初期化されます。

アーカイブと配置の計画が、OC4J サーバーへ送信されます。OC4J は、配置計画の内容を使用

して、<OC4J_HOME>/j2ee/home/application-deploymentsディレクトリに、さまざま

な OC4J 固有のディスクリプタを生成します。

OC4J は、Java EE デプロイメント・ディスクリプタと任意の OC4J 固有のデプロイメント・

ディスクリプタの両方に含まれている構成の詳細に反応します。OC4J は、EJB をそのインタ

フェースでラップするように、OC4J が操作を実行する必要があるすべての Java EE コンポーネ

ント構成を記憶します。

OC4J は、配置計画の内容に従って、 <OC4J_HOME>/j2ee/home/application-deployments/<app_name>ディレクトリに新

規の OC4J 固有の構成ファイルを書き込みます。1 つまたは複数の OC4J 固有のデプロイメン

ト・ディスクリプタを提供した場合、OC4J は生成されるファイルに追加要素を追加すること

に注意してください。

13-24 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

アプリケーションの配置

EJB インタフェース・ラッパー・クラスなど、生成されるすべてのクラスがコンパイルされ、

このディレクトリの新規のサブディレクトリに配置されます。たとえば、EJB ラッパー・クラ

スは、<OC4J_HOME>/j2ee/home/application- deployments/<app_name>/<jar_name.jar>/

ディレクトリにある deployment-cache.jar という名前のアーカイブに生成されます。ここで、 <jar_name.jar>は、配置される EJB JAR の名前に対応しています。

次に、2 番目の OC4J インスタンス(例では instance2)で、同様のプロセスが繰り返されます。

Application Server Control コンソールで、この経過を確認できます。なお、配置は、ブラウザを閉じ

ても継続します。

配置が正常に終了すると、Confirmation ページに次のメッセージが表示されます。

Application "SRDEMO" successfully deployed to all applicable OC4J

Instances in Group "default_group".

9. 配置の後で、「Return」をクリックします。

Oracle Application Server 10g へのアプリケーションの配置 13-25

アプリケーションのテスト

10. ブレッドクラムにある「Cluster Topology」リンクをクリックして、Cluster Topology ページへ戻りま

す。これで、各 OC4J インスタンスの詳細を確認し、アプリケーションが各インスタンスに配置さ

れ、起動したことを確認できます。

アプリケーションのテスト これで、Oracle Application Server 10g にアプリケーションが配置されました。アプリケーション用に指定し

たコンテキスト・ルートを使用して、Web ブラウザでアプリケーションをテストできます。

1. Web ブラウザを開き、URL として http://<hostname>:<port>/SRDemoと入力します。

以下に例を示します。http://localhost:80/SRDemo

2. ここで、アプリケーションのログイン・ページへ移動します。ログイン認証情報として以下を使用

します。

フィールド 値 Username sking

Password welcome

3. Welcome ページにあるリンクをクリックして、アプリケーションのページを調査します。アプリケー

ションの調査が完了したら、ブラウザを開いたままにしてください。

13-26 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

Application Server Control によるアプリケーションの調査

Application Server Control によるアプリケーションの調査 Application Server Control を使用して、配置したアプリケーションの監視と管理を実行できます。この項では、

Application Server Control を使用して、アプリケーションとアプリケーション・サーバーを調査します。それ

には、以下の手順を実行します。

1. 2 番目の Web ブラウザを開きます。

2. URL として http://<hostname>:<port>/emと入力します。

以下に例を示します。http://localhost:7777/em

3. アプリケーション・サーバーをインストールしたときに使用したパスワードで、Application Server Control にログインします。例では、パスワードとして welcome1を使用しています。

4. Cluster Topology ページで、View By ドロップダウン・メニューから「Applications」を選択します。

5. SRDEMO アプリケーションを開き、配置した SRDEMO アプリケーションの 1 つへのリンクをクリッ

クします。

6. Enterprise Manager を使用すると、次のようなアプリケーションの多くの側面を調査できます。

「Home」タブをクリックして、配置したアプリケーションに関する詳細を表示します。

Oracle Application Server 10g へのアプリケーションの配置 13-27

Application Server Control によるアプリケーションの調査

7. 「Performance」リンクをクリックして、アプリケーションの性能グラフを確認します。

8. 「Administration」タブをクリックして、JAZN セキュリティ実装の詳細など、アプリケーションの

配置に関するすべての詳細を確認します。

9. Security Provider の隣にある「Go to Task 」をクリックします。

10. Security Provider ページで、General タブは、jazn-data.xmlファイルへのパスとデフォルトの領

域を表示します。「Realms」タブをクリックします。

11. Realms ページで、「Roles」と「Users」の下にあるリンクをクリックして、アプリケーションに定義

されたロールとユーザーを確認します。ここでこれらのロールを変更できますが、このチュートリ

アルでは変更する必要はありません。

13-28 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

クラスタ化とローリング・アップグレード

クラスタ化とローリング・アップグレード この演習はオプションです。目標は、Oracle Application Server に提供されている状態のレプリケーションと

ローリング・アップグレード機能を明確にすることです。

注意:アプリケーション・サーバーをクラスタ化用に設定していない場合は、この演習を実行できません。

作動中のセッション・レプリケーションの確認 OC4J は、開発用と本番用でクラスタ化された環境を作成するために、柔軟なフレームワークを提供していま

す。これに関連して、クラスタは、同様のアプリケーションの集合が常駐する複数の OC4J サーバー・ノード

として定義されます。OC4J のクラスタ化フレームワークは、以下をサポートしています。

HTTP セッションまたはステートフル・セッション Enterprise JavaBean(SFSB)インスタンスに含

まれているオブジェクトと値のレプリケーション

マルチキャストまたは peer-to-peer 通信を使用した、インメモリー・レプリケーションまたは状態

データのデータベースへの永続化

Oracle Application Server 10g へのアプリケーションの配置 13-29

クラスタ化とローリング・アップグレード

OC4J インスタンス間での着信リクエストのロード・バランシング

クラスタ内のアプリケーション間における透過的フェイルオーバー

グローバルなサーバー・レベルまたはアプリケーション・レベルでの OC4J インスタンス内の構成

ログイン・ユーザーの名前を調べると、HTTP セッション・ステートがレプリケートされていることを確認で

きます。User オブジェクトは、セッションに格納され、クラスタ内の両方の OC4J ノードで永続化されます。

それを確認するには、HTTP サーバー・インスタンスとともにインストールされている OC4J インスタンス

でアプリケーションを停止します。次に、アプリケーションを再ロードして、まだログインしていることを

確認します。

1. ページの一番上にあるブレッドクラムの「Cluster Topology」リンクをクリックして、Cluster Topologyページへ戻ります。

2. 管理者インスタンスのホーム・インスタンス(すなわち、Application Server Control がインストール

されているインスタンス。例では admin)を開きます。

3. 「SRDEMO」のチェック・ボックスを選択し、「Stop」をクリックしてアプリケーション・インス

タンスを停止します。

Confirmation ページで、「Yes」をクリックします。

adminインスタンスでSRDEMOアプリケーションが停止したことを示す確認メッセージが表示され

ます。これで、管理者でないインスタンス(Application Server Control がインストールされていない

インスタンス)で動作する 1 つのアプリケーション・インスタンスだけが残ります。

4. アプリケーションが動作している別のブラウザ・ウィンドウで、SRDEMO アプリケーションを再ロー

ドします(Firefox では、「View」→「Reload」)。"You are logged in as:"フィールドに、ログイン・ユー

ザーの名前がそのまま表示されます。ログオフせずに、次の演習のためにこのブラウザを開いておき

ます。

注意:アプリケーションを初めて再ロードする際は、"File Not Found"エラーが発生する場合があり

ます。その場合は、ブラウザで再びURLを入力します。これで、再びログインせずに、ログイン・

ユーザーが表示されます。

13-30 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

クラスタ化とローリング・アップグレード

ローリング・アップグレードの実行 ローリング・アップグレードとは、アプリケーションの状態を維持しながら、クラスタ内の複数の OC4Jノードにアプリケーションを同時に再配置するプロセスです。

Oracle Application Server は、1 つの OC4J インスタンスからアプリケーションの配置を解除してから再配置し

ますが、既存のユーザー・セッションと着信リクエストについては、クラスタ内の別の OC4J インスタンス

で動作するアプリケーション・インスタンスによって処理を継続します。これは、 初に停止したり、既存

のユーザー・セッションを取り消したりせずに、実質的にクラスタ全体にアプリケーションを再配置できる

ので、実際の本番環境では非常に有用な機能です。

ローリング・アップグレードを実行するには、元の EAR ファイルを変更し、admin_client.jarコマンド

ライン・ツールを使用してクラスタに再配置します。ユーティリティは、各インスタンスに順番に EAR を

配置するので、常に 低 1 つのアプリケーション・インスタンスが使用できます。

1. Oracle JDeveloper の Applications Navigator で、「ViewController」プロジェクトを開き、「Web Content」と「css」ノードを開きます。「jdeveloper.css」をダブルクリックして、エディタで開きます。

2. H1タグの色を FF0000(赤の 16 進法表記)に変更します。

3. 「Save All 」をクリックして、作業を保存します。

4. Applications Navigator で、「Deployment」プロジェクトを開き、「Resources」ノードを開きます。

5. 「SRDEMO.deploy」を右クリックし、コンテキスト・メニューから「Deploy to EAR file」を選択

します。

6. 次に、admin_client.jar ユーティリティを使用して、アプリケーションを再配置します。それ

には、コマンド・プロンプトを開き、admin OC4Jインスタンス(Application Server Control が常駐

するインスタンス)上の ORACLE_HOME/j2ee/homeディレクトリまで移動します。

7. 次のコマンドを入力して、admin_client.jarを起動し、変更した EAR を再配置します。

java -jar admin_client.jar deployer:cluster:opmn://

<hostame>:<opmnRequestPort>/<oc4jGroupName>

oc4jadmin <password> -redeploy -file <path/filename.ear> -deploymentName <appName> -sequential -keepsettings

以下のパラメータを提供します。

パラメータ 値 password oc4jadmin アカウント・パスワードを提供します

(welcome1にしてください)。 hostname OC4J ホスト・マシンの名前を指定します。 opmnRequestPort管理 OC4J インスタンスの ORACLE_HOME/opmn/conf ディレクト

リにインストールされている opmn.xml ファイル内の<port>要素

に定義されているノード用の OPMN リクエスト・ポート。ファイル

で次の項目を探します。

Oracle Application Server 10g へのアプリケーションの配置 13-31

まとめ

パラメータ 値 <port local="6100" remote="6200"

request="6003"/>

oc4jGroupName この値を OC4J インスタンス・グループの名前(この場合は、

default_group)に設定します。

Path/filename 変更した EAR のパスとファイル名を提供します。 appName アプリケーションの名前を提供します

(SRDEMOを使用してください)。

以下に例を示します。 C:¥oracle¥product¥10.1.3¥AS10g¥j2ee¥home>java -jar admin_client.jar deployer:cluster:opmn://localhost:6003/default_group oc4jadmin welcome1 -redeploy -file c:¥JDeveloper¥mywork¥SRDEMO¥Deployment¥deploy¥SRDEMO.ear -deploymentName SRDEMO –sequential -keepsettings

注意:コマンドを実行したら、ステップ 8 へ進んでください。

これで、Oracle Application Server の各インスタンスに、SRDEMO アプリケーションが停止し、配置

を解除され、再配置され、再起動します。

なお、アプリケーションを初めて配置したときに作成した配置計画が、再配置で再利用されること

に注意してください。そのため、以前の構成が、再配置されたアプリケーションに自動的に適用さ

れます。

8. redeployコマンドの実行中に、Web ブラウザでアプリケーションの再ロードを継続します。ク

リックするたびに同様のログイン名が表示されますが、変更したバージョンが配置されると、次の

スクリーンショットに示すように、 終的にアプリケーションの外観が変化します。

これは、新規のアプリケーションの変更バージョンの配置中で、実質的に状態が維持されているこ

とを示しています。

まとめ この章では、アプリケーションを配置し、アプリケーションのローリング・アップグレードを実行しました。

この章で実行した主な作業は、次のとおりです。

複数の Web コンテナで同時に動作できるように、アプリケーションを配布可能にしました。

配置の詳細を含む Deployment プロジェクトを作成しました。

Model プロジェクト(.jar ファイル)、ViewController プロジェクト(.war ファイル)、および

Deployment プロジェクト(.earファイル)の配置プロファイルを作成しました。

アプリケーションの詳細を Java EE へ移植するデプロイメント・ディスクリプタを作成しました。

Application Server Controlを使用して、アプリケーションの接続プールとデータソースを作成しました。

13-32 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル

まとめ

アプリケーション・サーバー上の OC4J クラスタにアプリケーションを配置しました。

アプリケーション・サーバーの URL を使用して、ブラウザでアプリケーションをテストしました。

Application Server Control で、アプリケーションのメトリクス、ユーザー、およびロールを確認しま

した。

アプリケーションの状態を維持しながら、クラスタ内のアプリケーションでローリング・アップグ

レードを実行しました。

Oracle Application Server 10g へのアプリケーションの配置 13-33

まとめ

13-34 Oracle Application Server 10g Release 3:Java EE Developers(10.1.3.1.0)チュートリアル