JDeveloper 11g によるリッチクライアント開発

第5章 ADF Modelを使用したアプリケーションの作成

日本オラクル株式会社 セールスコンサルティング統括本部
Fusion Middleware SC本部 Fusion Middleware レディネス部
智野 潤子 (ちの じゅんこ)

この章では、ADF Modelが提供するデータ・バインドの仕組みを使用した、Oracle Databaseにアクセスするアプリケーションの開発をチュートリアル形式で説明します。Part1では、ADF Business Components(以下ADF BC)を使用して、Oracle Databaseにアクセスするコンポーネントを作成します。
このチュートリアルで作成するアプリケーションは、次のような機能を持っています。

図1 この章で作成するアプリケーション
図1 この章で作成するアプリケーション

なお、このチュートリアルでは 第4章「テーブルを使用したアプリケーションの作成」で作成したJSFページ(index.jspx)にコンポーネントを追加しています。

目次

Part1

Part2

  • パネルの追加
  • テーブルのバインド
  • グラフのバインド

ADF Modelとは

チュートリアルを始める前に、この章で使用するADF Modelの特長とアーキテクチャについて説明します。
ADF Modelは、Java EE標準やオープンソース・テクノロジをベースとしたアプリケーションの実装を簡素化するための、データ・バインドの仕組みを提供するフレームワークです。Webまたはデスクトップ・アプリケーションなどのユーザー・インタフェースから参照または編集されるデータ項目と、Enterprise JavaBeans(EJB)やWebサービスなどで実装されたビジネス・サービスとをバインドするための仕組みを提供します。ADF Modelは特定のテクノロジに依存していないため、ビューおよびコントローラ層を担当する開発者はビジネス・サービスがどのテクノロジで実装されているかを意識する必要がなくなります。
ADF Modelは、次の2つのコンポーネントによってデータ・バインドを実現しています。

  • ADF Data Control
    ADF Data Controlは、ビジネス・サービスで実装した処理を抽象化してメタデータに格納し、呼び出すための固有の処理を隠蔽します。このチュートリアルで作成するアプリケーションのビジネス・サービスはADF BCを使用して実装しますが、ADF BCのコンポーネントへのアクセスに必要な初期化処理や問合せ結果を取得するためのコーディングは必要ありません。そのような処理はすべてADF Data Controlによって自動化されるためです。ADF Data Controlはこの章で使用するADF BCだけでなく、EJBやWebサービスなどの標準技術にも対応しています。
  • ADF Binding
    ADF Bindingは、ADF Data Controlによって抽象化されたビジネス・サービスとユーザー・インタフェースのバインディング(画面上のコンポーネントと実行するサービスの対応付け)の定義をページ定義ファイルと呼ばれるメタデータに格納します。例えば、この章で作成したアプリケーションでは、次のようなバインディングが定義されます。
    • テーブルとDEPARTMENTS表の問合せ結果
    • グラフとEMPLOYEES表の問合せ結果

ページ定義ファイルは、ドラッグ&ドロップなどの直感的な操作により生成・編集することができるので、開発者が直接編集する必要はありません。
図2は、この章で作成するアプリケーションの実行イメージを表しています。

図2 ADF Modelを使用したアプリケーションの実行イメージ
図2 ADF Modelを使用したアプリケーションの実行イメージ

NOTE
ADF Modelによるユーザー・インタフェースとビジネス・サービスのバインディングの仕組みは、JSR 227として標準化が進められており、オラクルはその仕様策定をリードしています。

データベースの準備

この章で作成するアプリケーションは、Oracle Databaseのサンプル・ユーザーHRが所有する2つの表を使用することを前提としています。

表1 この章で使用する表
表名 説明
DEPARTMENTS 部門の情報を格納
EMPLOYEES 従業員の情報を格納

図3 この章で使用する表
図3 この章で使用する表

なお、Oracle JDeveloper 11gテクノロジ・プレビューで動作確認されているデータベースは次のとおりです。

  • Oracle Database 10g Enterprise Edition
  • Oracle Database 11g Enterprise Edition

データベース接続の作成

JDeveloperでは、データベースやアプリケーション・サーバーに接続するために必要な情報を登録することができます。
リソース・パレットの左上にあるフォルダ・アイコンをクリックし、表示されたメニューから[新規接続]→[データベース]を選択します。

図4 リソース・パレットのメニューから[データベース]を選択
図4 リソース・パレットのメニューから[データベース]を選択

これにより、[データベース接続の作成]ダイアログが起動されるので、使用するデータベースにアクセスするための情報を入力します。

表2 [データベース接続の作成]ダイアログ
入力項目 入力する値
接続の作成場所 「IDE接続」をチェック
接続名 hr
  「Oracle(JDBC)」を選択
ユーザー名 hr
パスワード (HRユーザーのパスワード)
パスワードの保存 チェックする
ドライバ 「thin」を選択
ホスト名 Oracle Databaseを実行中のホスト名またはIPアドレス(JDeveloperとOracle Databaseが同一マシンで実行中の場合は「localhost」)
JDBCポート TNSリスナーがリスニングしているポート番号(デフォルトは1521)
SID/サービス名 Oracle DatabaseのSIDまたはサービス名

図5 [データベース接続の作成]ダイアログ
図5 [データベース接続の作成]ダイアログ

[データベース接続の作成]ダイアログの[OK]ボタンをクリックすると、リソース・パレットの[IDE接続]パネルにHRユーザーのスキーマ・オブジェクトが種類ごとにフォルダに分類され、参照できるようになります。

図6 データベース接続作成後のリソース・パレット
図6 データベース接続作成後のリソース・パレット

データベース・アクセス・コンポーネントの作成

このチュートリアルでは、データベースにアクセスするコンポーネントをADF BCを使用して作成します。

図7 この節で作業する部分
図7 この節で作業する部分

ADF BCは、JDBCによるコーディングなしにデータベースにアクセスするJavaコンポーネントを開発するためのフレームワークです。Java EEアプリケーションで実績のあるさまざまなデザイン・パターンが実装されているため、最適化されたデータベース・アクセス・コンポーネントを、簡単な設定だけで作成することができます。
ADF BCによる開発の流れは次のとおりです。

  1. データベース表の定義情報の取得
  2. 問合せの定義
  3. 作成したコンポーネントのテスト

データベース表の定義情報の取得

ADF BCでは、使用するデータベース表(またはビュー、シノニム、スナップショット)の定義情報をエンティティ・オブジェクトと呼ばれるコンポーネントに格納します。このチュートリアルでは、ビジネス・コンポーネント・ダイアグラムを使用してエンティティ・オブジェクトを作成する手順を紹介します。ビジネス・コンポーネント・ダイアグラムを作成するには、アプリケーション・ナビゲータで[Model]を右クリックし、コンテキスト・メニューから[新規]を選択します。

図8 Modelプロジェクトのコンテキスト・メニューから[New]を選択
図8 Modelプロジェクトのコンテキスト・メニューから[New]を選択

[新規ギャラリ]ウィンドウが起動されたら、画面左側の[カテゴリ]ツリーから[Business Tier]→[ADF Business Components]をクリックし、画面右の[アイテム]リストから[ビジネス・コンポーネント・ダイアグラム]を選択します。

図9 [新規ギャラリ]ウィンドウ
図9 [新規ギャラリ]ウィンドウ

[新規ギャラリ]ウィンドウで[OK]ボタンをクリックすると、[ビジネス・コンポーネント・ダイアグラムの作成]ダイアログが表示されるので、デフォルトの設定を使用することにして[OK]ボタンをクリックします。

図10 [ビジネス・コンポーネント・ダイアグラムの作成]ダイアログ
図10 [ビジネス・コンポーネント・ダイアグラムの作成]ダイアログ

[ビジネス・コンポーネント・ダイアグラムの作成]ダイアログで[OK]ボタンをクリックすると、エディタ・ウィンドウに空のダイアグラムが表示されます。リソース・エディタの[hr]接続の[表]フォルダ内にある[DEPARTMENTS]と[EMPLOYEES]を[Ctrl]キーを押しながら選択してから、ダイアグラムにドラッグ&ドロップします。

図11 リソース・パレットから表をドラッグ&ドロップ
図11 リソース・パレットから表をドラッグ&ドロップ

これにより、[別名で作成]ダイアログが表示されます。[ビジネス・コンポーネントのエンティティ・オブジェクト]が選択されていることを確認して、[OK]ボタンをクリックします。

図12 [別名で作成]ダイアログ
図12 [別名で作成]ダイアログ

[別名で作成]ダイアログで[OK]ボタンをクリックすると、ADF BCのエンティティ・オブジェクトがダイアグラムに表示されます。

図13 表をドラッグ&ドロップした後のダイアグラム
図13 表をドラッグ&ドロップした後のダイアグラム

図14 表をドラッグ&ドロップした直後のアプリケーション・ナビゲータ
図14 表をドラッグ&ドロップした直後のアプリケーション・ナビゲータ

生成されたコンポーネント

ここまでの操作によって、次の2種類のコンポーネントが生成されます。

  • エンティティ・オブジェクト(Departments、Employees)
    指定したデータベース表の構造情報を格納するオブジェクトです。エンティティ・オブジェクトにはデータベース表の各列に対応した「属性」が定義されており、データの型や最大文字列長、数値の最大桁数や精度、設定されている制約などの情報を保持しています。また実行時には、問合せ結果をキャッシュする機能も提供します。
  • アソシエーション(DeptMgrFkAssoc、EmpDeptFkAssoc、EmpManagerFKAssoc)
    2つのエンティティ・オブジェクト間の関連付けを定義するオブジェクトです。このチュートリアルのように既存のデータベース表に基づいてエンティティ・オブジェクトを生成した場合は、データベース表の外部キーの定義情報に基づいて自動的に生成されます。

問合せの定義

次に、データベース表に対して問合せを実行するコンポーネントを作成します。ダイアグラムの何も表示されていない部分を右クリックし、コンテキスト・メニューから[生成]→[ダイアグラムのデフォルト・データ・モデル・コンポーネント]を選択します。

図15 コンテキスト・メニューから[ダイアグラムのデフォルト・データ・モデル・コンポーネント]を選択
図15 コンテキスト・メニューから[ダイアグラムのデフォルト・データ・モデル・コンポーネント]を選択

これにより、[デフォルト・データ・モデル・コンポーネント]ウィザードが起動されます。[デフォルト・データ・モデル・コンポーネント]ウィザードのステップ1では、ビュー・オブジェクトおよびビュー・リンクのベースとなるエンティティ・オブジェクトとアソシエーションを指定します。このチュートリアルでは、次の2つを使用しないので、選択を解除([選択済]リストから次の2つを選択した状態で[<]ボタンをクリック)します。

  • DeptMgrFkLink(DeptMgrFkAssoc)
  • EmpManagerFkLink(EmpManagerFkAssoc)

[選択済]リストに次の3つが表示されていることを確認してから、[次へ]ボタンをクリックします。

  • DepartmentsView(Departments)
  • EmpDeptFkLink(EmpDeptFkAssoc)
  • EmployeesView(Employees)

図16 [デフォルト・データ・モデル・コンポーネントの作成]ウィザード - ステップ1
図16 [デフォルト・データ・モデル・コンポーネントの作成]ウィザード - ステップ1

[デフォルト・データ・モデル・コンポーネントの作成]ウィザードのステップ2では、アプリケーション・モジュールのパッケージ名と名前を指定します。このチュートリアルではデフォルトの設定を使用することにして、[次へ]ボタンをクリックします。

図17 [デフォルト・データ・モデル・コンポーネントの作成]ウィザード - ステップ2
図17 [デフォルト・データ・モデル・コンポーネントの作成]ウィザード - ステップ2

[デフォルト・データ・モデル・コンポーネントの作成]ウィザードの終了ページには、入力した情報に基づいて生成されるコンポーネントの一覧が表示されます。

図18 [デフォルト・データ・モデル・コンポーネントの作成]ウィザード - 終了
図18 [デフォルト・データ・モデル・コンポーネントの作成]ウィザード - 終了

[デフォルト・データ・モデル・コンポーネントの作成]ウィザードの終了ページで[終了]ボタンをクリックすると、アプリケーション・ナビゲータは図19のように表示されます。

図19 アプリケーション・ナビゲータ
図19 アプリケーション・ナビゲータ

生成されたコンポーネント

この節で説明した操作によって次の3種類のコンポーネントとADF Data Controlが生成されます。

  • ビュー・オブジェクト(DepartmentsView、EmployeesView)
    ユーザー・インタフェースでのデータの見せ方を定義するオブジェクトで、SQLに基づいて生成されます。ビュー・オブジェクトをアプリケーション・ナビゲータでダブルクリックしてエディタ・ウィンドウで開き、[問合せ]タブをクリックすると、実行するSQLを確認できます。
    図20 ビュー・オブジェクトが実行するSQLの確認
    図20 ビュー・オブジェクトが実行するSQLの確認
  • ビュー・リンク(EmpDeptFkLink)
    2つのビュー・オブジェクト間の関連付けを定義するオブジェクトで、通常はアソシエーションに基づいて生成されます。マスター/ディテール間のデータの同期を自動化する役割を担います。例えば、DEPARTMENTS表(マスター)から取得した部門データの現在行を変更すると、EMPLOYEES表(ディテール)から取得した問合せ結果は、自動的にDEPARTMENTS表の現在行に対応したデータになります。
  • アプリケーション・モジュール(AppModule)
    ビュー・オブジェクトとビュー・リンクのコンテナの役割を持ったオブジェクトです。クライアントは実行時、アプリケーション・モジュールを介してビュー・オブジェクトやビュー・リンクにアクセスし、問合せや更新などの処理を実行します。また実行時には、データベース・セッションやトランザクションを制御します。

図21は、ADF BCの実行イメージを表しています。

図21 ADF BCの実行イメージ6
図21 ADF BCの実行イメージ6

またアプリケーション・モジュールが生成されたことにより、アプリケーション・モジュール用のADF Data Control(AppModuleDataControl)も自動的に生成されています。アプリケーション・ナビゲータの[データ・コントロール]バーをクリックすると、AppModuleDataから使用することができるデータ項目がツリー形式で表示されています。

図22 [データ・コントロール]パネル
図22 [データ・コントロール]パネル

作成したコンポーネントのテスト

ADF BCは作成したコンポーネントの動作を確認するためのテスト用のユーザー・インタフェースを提供しています。アプリケーション・ナビゲータで[AppModule]を右クリックし、コンテキスト・メニューから[実行]を選択します。

図23 コンポーネントのテスト
図23 コンポーネントのテスト

これにより、[ビジネス・コンポーネント・コンフィギュレーションの選択]ダイアログが表示されるので、画面下部の[接続]ボタンをクリックします。

図24 [ビジネス・コンポーネント・コンフィギュレーションの選択]ダイアログ
図24 [ビジネス・コンポーネント・コンフィギュレーションの選択]ダイアログ

[ビジネス・コンポーネント・コンフィギュレーションの選択]ダイアログの[接続]ボタンをクリックすると、[Oracle Business Component Browser]ウィンドウが起動されます。画面左側のツリーに表示されているビュー・オブジェクト(EmployeesView1、DeparmtentsView1)をダブルクリックすると、そのビュー・オブジェクトによって取得したデータが1件ずつ表示され、データのスクロールや編集、追加、削除を実行できます。また、ツリーに表示されているビュー・リンク(EmpDeptFkLink1)をダブルクリックすると、マスター・データが上部に、ディテール・データが下部に表示されます。ビュー・オブジェクトと同様にデータの編集、追加、削除も可能です。

図25 [Oracle Business Component Browser]ウィンドウ
図25 [Oracle Business Component Browser]ウィンドウ

今回は、ADF Business Components(以下ADF BC)を使用して、Oracle Database にアクセスするコンポーネントを作成しました。Part2では、データベースの問合せ結果をテーブルやグラフで表示します。

Copyright © 2009, Oracle Corporation Japan. All rights reserved.
無断転載を禁ず

この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されることがあります。日本オラクル社は本書の内容に関していかなる保証もいたしません。また、本書の内容に関連したいかなる損害についても責任を負いかねます。

Oracleは米国Oracle Corporationの登録商標です。文中に参照されている各製品名及びサービス名は米国Oracle Corporationの商標または登録商標です。その他の製品名及びサービス名はそれぞれの所有者の商標または登録商標の可能性があります。

智野 潤子 智野 潤子 (ちの じゅんこ)
日本オラクルで主に開発ツール/フレームワーク製品を担当しています。