構築するアプリケーションにはModel-View-Controller(MVC)アーキテクチャが反映されています。モデルはEJBコンポーネントによって、また、ビューとコントローラはJavaServer Facesによって、それぞれ提供されます。ここでは、JSFと互換性のあるコンポーネントのADF Facesセットを使用して、使いやすいWebインタフェースを構築します。
このチュートリアルを実行するには、JDeveloper 12.1.3がインストールされており、HRスキーマを利用してOracle Database 10g以降へアクセスできる必要があります。
-
「スタート」→「すべてのプログラム」→「<JDEVELOPER_HOME>」→「OracleHome」→「Oracle JDeveloper Studio」→「Oracle JDeveloper Studio」を選択して、JDeveloperを起動します。
以前のJDeveloperインストレーションからプリファレンスのインポートを確認するダイアログ・ボックスがオープンした場合、NOをクリックします。
-
ロールを選択するよう指示されたら、「Studio Developer (All Features)」を選択して、「OK」をクリックします。
Tip of the Dayウィンドウを閉じます。
ロードが終了すると、JDeveloper IDEが表示されます。JDeveloperを初めて開いた場合、Start Pageが表示されます。後でStart Pageを再表示する場合は、「Help」→「Start Page」を選択します。
JDeveloperについて学習するためのさまざまなオプションが用意されています。これらのオプションについて確認したら、「X」をクリックしてStart Pageタブを閉じます(Xは、タブにマウスを合わせると表示されます)。
-
「Application」タブをクリックして、アプリケーション・ナビゲータに戻ります。「New Application」アイコンをクリックします。
-
New Galleryで、「ADF Fusion Web Application」オプションを選択します。
「OK」をクリックします。
-
Name your applicationダイアログ・ボックスで、アプリケーション名にHR_EJB_JPAと入力します。アプリケーション名を入力すると、ディレクトリ名が自動的に変更される点に注意してください。アプリケーション・パッケージの接頭辞としてoracleと入力します。
Fusion Web Applicationオプションを選択すると、2つのプロジェクトが作成されます。
ウィザードの各ページでデフォルト値を受け入れて「Next」をクリックしていくと、これから使用するプロジェクト名とパッケージ名が表示されます。また、ModelプロジェクトとViewControllerプロジェクトに対して特定の機能を選択できます。
1つ目のプロジェクトのデフォルト・プロジェクト名はModelであり、デフォルト・パッケージ名はoracle.modelです。
2つ目のプロジェクトのデフォルト・プロジェクト名はViewControllerであり、デフォルト・パッケージ名はoracle.viewです。 -
「Finish」をクリックします。JDeveloperによってアプリケーション環境が作成されるまで待機します。
-
作成された2つのプロジェクトがアプリケーション・ナビゲータに表示されます。右側のペインに表示されるアプリケーション概要を確認すると、手順の完了状況を把握できます。
アプリケーションには2つのプロジェクトが含まれています。この時点でModelプロジェクトは空ですが、データベース接続を作成するとEJB JPAコンポーネントが設定されます。
ViewControllerプロジェクトには、UI構築に必要な基本コンポーネントが含まれています。
Overviewペインでは、アプリケーション開発の手順についてのガイドが提供されています。この段階的な説明に従っていくと、アプリケーションを構築できます。
-
アプリケーション・ナビゲータで「Model」ノードを右クリックし、コンテキスト・メニューから「New」→「From Gallery」を選択します。
-
New Galleryで、「All Features」タブを選択し、カテゴリとして「Business Tier」→「EJB」を選択し、「Entities from Tables」項目をダブルクリックします。
「OK」をクリックします。
-
Create Entities from Tablesウィザードで、「JPA 2.0 Entities (Java EE6)」を選択し、「Next」をクリックします。
-
「Next」をクリックして、永続性ユニットの定義をスキップします。
-
Type of Connectionページで「Online Database Connection」オプションを選択します。「Next」をクリックします。
-
Database Connection Detailsページで、「」Createボタンをクリックして、新しい接続を作成します。
-
次の値を入力して、HRスキーマに対するデータベース接続を作成します。ここに例として示した値は、使用環境に合わせて変更する必要があります。
オプション 値 Connection Name HR Username/Password hr/<使用しているhrパスワード> Save Password チェック・ボックスを選択 Driver Thin Host Name スキーマがインストールされているマシン(例:localhost) SID HRスキーマがインストールされているデータベース(XE、orclなど)
「Test Connection」をクリックして、接続可能であることを確認します。
接続に成功したら、「OK」をクリックします。
接続に失敗した場合、正しいパラメータを入力しており、Oracleデータベースとリスナー・サービスが実行中であることを確認します。
接続は、Initialize Business Components Projectページにも表示されます。-
Database Connection Detailsページに戻り、「Next」をクリックします。
-
Select Tablesページで「Query」をクリックし、HRスキーマに使用可能なオブジェクトを取得します。次に、「DEPARTMENTS」と「EMPLOYEES」を選択し、右矢印ボタンを使用してそれらをSelectedペインに移動します。
「Next」をクリックします。
-
このステップでは、パッケージ名がoracle.modelであることを確認します。
-
「Next」に続き、「Finish」をクリックします。
-
「」Save Allアイコンをクリックして作業内容を保存します。
アプリケーション・ナビゲータには、DepartmentsとEmployeesに1つずつjavaクラス・ファイルが作成されています。
EJBダイアグラムは、エンティティやJava Bean、およびこれらのコンポーネント間の関係を作成し、表示します。EJBダイアグラムを作成するには、以下の手順を実行します。
-
アプリケーション・ナビゲータで「Model」ノードを右クリックし、「New」→「From Gallery」を選択します。
-
New Galleryで、カテゴリとして「Business Tier」→「EJB」を選択し、「EJB Diagram (JPA/EPA 3.x)」項目をダブルクリックします。
-
「OK」をクリックします。
-
Create EJB Diagramダイアログで、ダイアグラム(EJB Diagram1)用のデフォルト名をHR EJB Diagramに変更し、デフォルト・パッケージ名がoracle.modelであることを確認します。
-
「OK」をクリックします。
-
Associate Diagram With Persistence Unitダイアログで「OK」をクリックし、提示されたPersistence Unit(Model.jpr)を受け入れます。
-
ダイアグラム・エディタで新しい空のダイアグラムが開きます。
bダイアグラム上でのEJB/JPAコンポーネントのモデル化は、開発者にとって便利な機能です。詳細表示 -
アプリケーション・ナビゲータから「Departments」エンティティと「Employees」エンティティを選択し、ダイアグラムにドラッグします。
-
「」Save Allアイコンをクリックして作業内容を保存します。
先ほど部門表と従業員表から作成したEJBコンポーネントがダイアグラムに表示されます。必要に応じてズームインし、両方のエンティティが水平に整列するようにダイアグラムのレイアウトを変更します。エンティティ間の関係を選択し、コンテキスト・メニューからStraighten linesオプションを使用すると、ダイアグラムを整理して表示することができます。
セッション・ファサードは、基礎となるEJB(Enterprise JavaBeans)との統一されたインタフェースをクライアント・オブジェクトに提供します。クライアントがやり取りするのは、サーバーに存在し、適切なEJBメソッドを呼び出すファサードのみです。 その結果、クライアントとEJBの間での依存関係と通信が減少します。セッション・ファサードなしでリモート・アクセスを実行している場合、クライアントがネットワーク経由でEJB 3.xエンティティに直接アクセスするには、多数のリモート呼出しが必要になります。そのため、大量のネットワーク通信が発生して、パフォーマンスが低下します。さらに、ファサードがない場合、クライアントはビジネス・オブジェクトの実装に直接依存するので、EJBのインタフェースが変更されると、クライアント・オブジェクトも変更する必要が発生します。
このステップでは、従業員レコードおよび部門レコードを検索するメソッドを実装したSession Beanを作成します。
-
コンポーネントウィンドウで、「EJB Components」ライブラリを選択し、「EJB Nodes」を開きます。
-
「」Session Beanコンポーネントを選択し、ダイアグラムにドラッグ・アンド・ドロップします。
Create Session Beanウィザードが開きます(必要に応じて、Welcomeステップで「Next」をクリックします)。
-
EJB Name and Optionsステップで、EJB NameをHRFacadeに設定し、次の値が適切に設定されていることを確認します。
プロパティ 値 EJB Name HRFacade Session Type Stateless Transaction Type Container Generate Session Facade Method (チェック) Entity Implementation JPA Entities Persistence Unit Model
-
「Next」をクリックします。
Session Beanには、ステートフルとステートレスの2種類があります。 詳細表示
ステートフルSession Beanは、クライアントの代わりに対話状態を維持します。対話状態は、Session Beanのフィールド値に加えて、Session Beanのフィールドからアクセスできるすべてのオブジェクトで定義されます。ステートフルSession Beanは永続データ・ストア内のデータを直接表すものではありませんが、クライアントに代わってこのデータにアクセスし、更新します。 ステートフルSession Beanの存続時間は通常、そのクライアントの存続時間と同じになります。
ステートレスSession Beanは、あくまでサーバー側の動作を提供するために設計されたものです。これらにはユーザー固有のデータが含まれないため、匿名のBeanになります。EJBアーキテクチャでは、単一のステートレスSession Beanを使用して多数のクライアントのニーズを満たすための手段が提供されています。ステートレスSession Beanインスタンスは、クライアント起動メソッドで使用されている場合を除いて、すべて同等です。ステートレスという用語は、特定のクライアントに対する状態情報を保持していないことを意味します。ただし、ステートレスSession Beanは、オープン・データベース接続などのクライアントに依存しない状態を保持できます。
セッション・ファサードとBeanによって処理されるトランザクションでは、コンテナを使用することで、プログラムによるプロセスを介して明示的にユーザー・トランザクションを管理できます。 -
Session Facade - Select JPA Entity Methodステップで、このプロジェクトのエンティティがすべてツリー・コントロールのノードとして表示されます。すべてのエンティティ・メソッドを含むチェック・ボックスを選択することも、各ノードを開いてメソッドのサブセットを選択することもできます。
「Employees」ノードと「Departments」ノードを開き、それぞれのエンティティに対してすべてのメソッドを選択します。 -
「Next」をクリックします。
-
Class Definitionステップで、Beanクラスのフルネームがoracle.model.HRFacadeBeanであることを確認してから、「Next」をクリックします。
ダイアグラムは次のように表示されます。
-
アプリケーションウィンドウは、次のように表示されます。
Session Beanは、3つのファイルで構成されています。Session Beanコードを含むHRFacadeBean、リモート・クライアントのBean機能を表すHRFacade、およびローカル・クライアントの機能を表すHRFacadeLocalです。
「」Save Allアイコンをクリックして作業内容を保存します。
次のステップでは、リモート・インタフェースとローカル・インタフェースの実装が選択されていることを確認します。リモート・インタフェースは、Javaクライアントなどの個別の仮想マシンで実行されるクライアント・アプリケーションで使用されます。一方、ローカル・インタフェースは、Webクライアントなどの同じ仮想マシンで実行されるクライアント・アプリケーションで使用されます。
「Next」をクリックして、作成したクラスの内容を確認します。次に、「Finish」をクリックします。
Oracle ADFフレームワークのデータ・コントロールとしてEJBを公開します。これによって、ユーザー・インタフェースをEJBにバインドする方法が簡素化されます。ADFフレームワークの詳細は、次のWebサイトを参照してください。http://oracle.com/technology/products/adf
EJB Session BeanからADFデータ・コントロールを作成するには、次の手順を実行します。
-
アプリケーション・ナビゲータで「HRFacadeBean.java」ノードを右クリックし、コンテキスト・メニューから「Create Data Control」を選択します。
-
ウィザードのステップ1で、デフォルトの名前(HRFacadeBean)を受け入れて「Next」をクリックします。
-
Session EJB Business Interfaceページで、「Local」を選択し、「Finish」をクリックします。
「」Save Allアイコンをクリックして作業内容を保存します。
-
アプリケーション・ナビゲータは、ModelプロジェクトのDataControl.dcxファイル部分とともに次のように表示されます。
データ・コントロールを作成すると、プロジェクトにさまざまな変更が追加されます。EJB Session Beanに基づくデータ・コントロールを作成すると、JDeveloperによってデータ・コントロール定義ファイル(DataControls.dcx)が作成され、概要エディタ内でこのファイルが開かれ、Data Controlsパネルにファイル階層が表示されます。このファイルを使用することで、データ・コントロールはサービスやバインディングと直接連携することができます。
-
「Data Controls」アコーディオンを開き、UIから使用できるようになった作成済みのコンポーネントを確認します。
-
利用可能なデータ・コントロールがData Control Registryに表示されることに注意してください。
-
「HRFacadeLocal」ノードを展開します。「departmentsFindAll」ノードを選択すると、右側にデータ・コントロールの詳細が表示されます。
DataControls.dcxファイルの概要エディタに、データ・モデルのマスター・ディテール階層ビューと、セッション・ファサードのメソッドが表示されます。
ノードを選択すると、該当するエンティティ・クラスのBeanプロパティがAttributesタブに表示されます。Accessorsタブには、該当するエンティティ・クラスに含まれ、コレクションを返す、すべてのBeanプロパティが表示されます。またOperationsタブでは、このエンティティ上で実行されるセッション・ファサードのその他のメソッドを確認できます。 -
「Model」プロジェクト・ノードを閉じ、いずれかのタブを右クリックして、開いているタブをすべて閉じます。
ADFモデルでは、検証や一貫性のあるUIコントロールをアプリケーションに対して宣言的に追加できます。データ・コントロールを作成した後は、そのデータ・コントロールの表示特性や検証特性について詳細なレベルで制御できます。
次の手順では、Employeesデータ・コントロールの複数の属性のラベルと1つの検証規則を設定します。
-
Data Controlパレットで、「departmentsFindAll」を右クリックし、「Edit Definition」を選択します。
-
「Attributes」ノードを選択します。
-
属性リストの「departmentId」を選択し、「UI Hints」タブをクリックします。
-
departmentId属性のLabelプロパティにDepartment Idと入力します。
-
departmentNameとlocationIdに対して前の手順を繰り返します。departmentNameラベルはDepartment Nameに、locationIdラベルはLocation IDに設定します。
-
Data Controlパネルで、「employeesFindAll」を右クリックし、「Edit Definition」を選択します。
-
属性リストの「salary」を選択し、「Validation Rules」タブをクリックします。
-
Validation Rulesペインの右側にある緑のプラス記号「」をクリックします。
-
Add Validation Rule for: salaryダイアログで、次の値を入力します。
オプション 値 Description Salary between 100 and 15000 Type Range Operator Between Minimum Value 100 Maximum Value 15000 -
「Failure Handling」タブをクリックし、Message Text として"Salary amount must be between 100 and 15000."と入力します。「OK」をクリックして、検証規則を作成します。
-
変更を保存します。
次に、Employeesデータ・コントロールに検証を追加します。
Employeesデータ・コントロールの定義は、この時点で次のように表示されます。
これで、UIヒントと検証規則を追加したモデルの作成が完了しました。UIヒントは、部門データ・コントロールを使用するあらゆる新規ページで使用されます。また、salary検証規則は、給料を使用するあらゆるページに適用されます。