パート3:UIへの新規メソッドの追加と公開
ここでは、EJBのアノテーション・テクニックを使用して、Entity Beanに新しいメソッドを追加します。その後で、この新規メソッドをファサードに公開し、バウンド・タスク・フロー内でページに対するデータ・コントロールとして使用します。

また、このタスク・フローをmainHRページ内のリージョンとして使用することもできます。

ステップ1:エンティティへの新規メソッドの追加と公開

EJBでは、@NamedQueriesアノテーション構文を使用して、名前付き問合せを追加します。
  1. すべてのタブを閉じ、「Model」プロジェクトを展開します。

    アプリケーション・ナビゲータのModelプロジェクト
  2. Employees.java」クラスをダブルクリックして、ソース・エディタで開きます。

    開かれたEmployees.java
  3. これらのオブジェクトが他のJavaファイルと異なる点は、EJBエンティティとしてオブジェクトを識別するアノテーションがあることです。 EJB 3.0およびJPAのおもな特長は、古いバージョンのデプロイメント・ディスクリプタの代わりにメタデータ・アノテーションを使用して、オブジェクト・リレーショナル・マッピングを含むエンティティを作成できることです。

  4. ソース・エディタで「Entity」ノードを展開し、@NamedQueriesアノテーション内の@NamedQuery文を表示します。

    ")Javaコード
  5. 名前付き問合せを使用すると、設計時に問合せを定義し、実行時に使用できます。 ファサードBeanを作成すると、NamedQueryメタデータ文がEmployeeエンティティ内に1つ作成されます。この問合せは、Employees表からすべての行を取得します。
    @NamedQueries({ @NamedQuery(name = "Employees.findAll", query = "select o from Employees o") })

  6. NamedQuery文の閉じ括弧の後にカンマを追加し、[Enter]キーを押して新しい行を追加します。

  7. パラメータ値よりも高い給与の従業員のデータを取得する問合せをクラスに追加します。以下のコードを追加します。

    コードは次のようになります。

    @NamedQueries( {
    @NamedQuery(name = "Employees.findAll", query = "select o from Employees o") ,
    @NamedQuery(name = "Employees.findBySal", query = "select o from Employees o where o.salary > :p_sal")
    })


    Javaコード

    必要に応じて、[Alt]キーを押しながら[Enter]キーを押して、javax.persistence.NamedQueriesライブラリをインポートします。

  8. @で始まるJavaコードの記号は、アノテーションと呼ばれます。 アノテーションを使用すると、メタデータをオブジェクトに追加できます。アノテーションの例は、以下のとおりです。
    アノテーション 説明
    @Entity ファイルをEJB 3.0エンティティとして識別します
    @NamedQuery 実行時にデータを取り出すために使用できる問合せです
    @Table エンティティ用のプライマリ表を指定します
    @Id どのプロパティがエンティティ用の識別子であるかを定義できます
    @Column 永続プロパティまたはフィールド用のマップされた列を指定します
    @ManyToOne 表間の外部キー・リレーションシップの種類を指定します
    @JoinColumn 外部キー・リレーションシップ用の結合列と参照先列を指定します
  9. Makeアイコンをクリックしてプロジェクトをコンパイルし、エラーが返されていないことを確認します。

    Makeアイコン
  10. アプリケーション・ナビゲータで「HRFacadeBean.java」を右クリックし、コンテキスト・メニューから「Edit Session Facade」を選択します。

    コンテキスト・メニュー
  11. Specify Session Facade Optionsで、先ほど作成した新規問合せ「getEmployeesFindBySal()」を選択し、「OK」をクリックします。
    この操作により、先ほど追加した名前付き問合せが公開され、データ・コントロールとして使用できるようになります。

    Specify Session Facade Optionsダイアログ
  12. Save AllボタンSave Allアイコンをクリックして作業内容を保存します。

  13. DataControl.dcxをダブルクリックし、Data Control Registryで、「HRFacadeBean」ノードを展開します。「employeesFindBySal」ノードをクリックし、EJB JPA定義に該当する既存の属性があることを確認します。

    Data Control Registry
  14. これで、新規メソッドをページ内のデータ・コントロールとして使用する準備が整いました。

  15. Save AllボタンSave Allアイコンをクリックして作業内容を保存します。

ステップ2:2つのJSFページを使用したバウンド・タスク・フローの構築

ADFタスク・フローは、Fusion Webアプリケーションにコントロール・フローを定義するためのモジュール・アプローチを提供します。

  1. アプリケーション・ナビゲータで、「Model」プロジェクトを閉じます。「ViewController」プロジェクトを右クリックして、「New」→「From Gallery」を選択します。

    コンテキスト・メニュー
  2. New Galleryで、「Web Tier」→「JSF/Facelets」カテゴリを選択し、「ADF Task Flow」項目を選択します。「OK」をクリックします。

    New Gallery
  3. Create Task FlowダイアログにfindBySalFlow.xmlと入力します。ページ断片を使用してバウンド・タスク・フローを作成します。「OK」をクリックします。

    Create Task Flowダイアログ
  4. ADFタスク・フローには次の2種類があります。

    アンバウンド・タスク・フロー
    :ユーザーがタスクを完了するために相互作用する、アクティビティ、コントロール・フロー・ルール、マネージドBeanの集合。アンバウンド・タスク・フローは、バウンド・タスク・フロー内には含まれない、アプリケーション内のすべてのアクティビティおよびコントロール・フローから構成されます。

    バウンド・タスク・フロー:特殊な形式のタスク・フローであり、アンバウンド・タスク・フローとは対照的に1つのエントリ・ポイント(エントリ・ポイントは、ブラウザから直接リクエストできるビュー・アクティビティです)とゼロまたは1つ以上のエグジット・ポイント(出口点)を含みます。バウンド・タスク・フローには、それぞれ固有のプライベート・コントロール・フロー・ルール、アクティビティ、マネージドBeanが含まれます。バウンド・タスク・フローは再利用、パラメータ、トランザクション管理、再入力に対応しており、JSFページ内のADFリージョンにレンダリングすることができます。

    Create with Page Fragments:タスク・フローに追加するビュー・アクティビティからJSFページを参照しており、このJSFページがメインのブラウザ・ウィンドウ内にルート・ページとしてレンダリングされる場合、このチェック・ボックスの選択を解除します。タスク・フローに追加するビュー・アクティビティからページ断片ファイル(.jsff)を参照しており、タスク・フローによって実行時にこのファイルがADFリージョン内に表示される場合は、Create with Page Fragmentsチェック・ボックスを選択したままにします。

  5. コンポーネント・パレットからタスク・フローに「View」コンポーネントをドラッグ・アンド・ドロップします。

    タスク・フロー・ダイアグラム
  6. 2つ目の「View」コンポーネントをタスク・フローにドラッグ・アンド・ドロップします。

    ビューを追加したタスク・フロー・ダイアグラム
  7. view1の周りに表示される円は、タスク・フロー内のエントリ・ポイントを表しています。

    バウンド・タスク・フローには単一エントリ・ポイントであるデフォルト・アクティビティが含まれます。このアクティビティは、タスク・フロー内のその他すべてのアクティビティより先に実行されます。

  8. Control Flow Case」コンポーネントを選択し、「view1」を1回クリックしてコントロール・フロー・ケースの開始アクティビティを選択して、さらに「view2」をクリックします。このフローの名前をfindに変更します。

    コントロール・フロー・ケースを追加したタスク・フロー・ダイアグラム
  9. この操作を繰り返し、view2からview1へ、2番目のControl Flow Caseを作成し、backという名前に変更します。

    コントロール・フロー・ケースを追加したタスク・フロー・ダイアグラム
  10. view1」をダブルクリックして、このビュー・アクティビティに関連付けるページを作成します。Create ADF Page Fragmentダイアログで、Document TypeがFacelets、Page LayoutがCreate Blank Pageになっていることを確認します。「OK」をクリックして、ページを作成します。

    Create ADF Page Fragmentダイアログ

    ページ断片は、別のJSFページ内にコンテンツとしてレンダリングされるJSFドキュメントです。通常、ページ断片は、JSFページにリージョンとして追加されるバウンド・タスク・フローで使用されます。

  11. Data Controlsペインを開き、「employeesFindBySal」を展開します。「Operations」ノードを展開し、ページに「ExecuteWithParameters」をドラッグし、ADF Parameter Formとして追加します。

    データ・コントロールをページにドロップ
  12. Create Formダイアログで、Display LabelフィールドにSalaryと入力し、「OK」をクリックしてその他のデフォルト値を受け入れます。

    Create FormダイアログのFields
  13. ExecuteWithParameters」ボタンを選択し、プロパティ・インスペクタでActionプロパティのリストから「find」を選択し、TextにFindと入力します。

    プロパティ・インスペクタ
  14. 作業内容を保存します。

  15. findBySalFlow.xml」タブをクリックして、タスク・フロー・ダイアグラムを再表示します。タスク・フロー・ダイアグラムで、「view2」をダブルクリックして、view2ビュー・アクティビティに関連付けるページを作成します。

    ページ・フロー・ダイアグラム
  16. Create ADF Page Fragmentで、デフォルト値のまま「OK」をクリックします。

    Create ADF Page Fragmentダイアログ
  17. Data Controlsパレットで、ページに「employeesFindBySal」をドラッグし、「Table/List View」→「ADF Table」を選択します。

    データ・コントロールをページにドロップ
  18. Edit Tableダイアログで、「Single Row」、「Enable Sorting」、「Enable Filtering」、「Read-Only Table」の各オプションを選択します。salaryの後にある列をすべて削除し、hiredate削除します。「OK」をクリックして、表を作成します。

    Edit Tableダイアログ
  19. コンポーネント・パレットの「ADF Faces」→「General Controls」ライブラリで「Button」コンポーネントを選択し、Structureペインのaf:tableノード上にドロップします。

    コンポーネント・パレット
  20. プロパティ・インスペクタで、TextにBackと入力し、Actionとして「back」を選択します。

    プロパティ・インスペクタ
  21. Save AllボタンSave Allアイコンをクリックして作業内容を保存します。

ステップ3:mainHRページ内リージョンとしてのタスク・フローの使用

JSFページまたはページ・フラグメント(.jsff)にバインド・タスク・フローをレンダリングするには、Oracle ADFリージョンを使用します。

  1. アプリケーション・ナビゲータで「mainHR.jsf」ノードをダブルクリックし、mainHR.jsf ページを再表示します。

  2. Graph」タブを右クリックし、「Insert After Show Detail Item」→「Show Detail Item」を選択します。

    コンテキスト・メニュー
  3. プロパティ・インスペクタで、TextフィールドをSearchに変更します。

    プロパティ・インスペクタ
  4. アプリケーション・ナビゲータで、「Web Content」→「Page Flows」を展開し、「findBySalFlow.xml」ノードをSearchペインにドラッグ・アンド・ドロップします。

    ページへのページ・フローのドロップ
  5. コンテキスト・メニューから「Create」→「Region」を選択します。

    タスク・フローのコンテキスト・メニュー
  6. ページ・リージョンは次のように表示されます。

    ページ・デザイン
  7. バウンド・タスク・フローをADFリージョンとして実行する最大の理由は、再利用性です。詳細を表示/非表示詳細表示
  8. Save AllボタンSave Allアイコンをクリックして作業内容を保存します。

ステップ4:mainHRページの実行
  1. ページ内で右クリックし、コンテキスト・メニューから「Run」を選択します。

    コンテキスト・メニュー
  2. ブラウザ・ウィンドウで、「Search」タブをクリックします。

    実行中のページ
  3. getEmployeesFindBySal_p_salフィールドに値(例:8000)を入力し、「Find」ボタンをクリックします。

    検索の起動
  4. 該当する従業員のリストが表示されます。右方向にスクロールして、給与が8,000以下のレコードが返されていないことを確認します。

    alt text
  5. Back」ボタンをクリックします。

    前のページへ戻る
  6. getEmployeesFindBySal_p_salフィールドに新しい値(例:10000)を入力し、「Find」ボタンをクリックします。

    新しい検索の起動
  7. 今回は、さらに限定されたリストが表示されます。

    検索結果
  8. ブラウザ・ウィンドウを閉じます。

ブックマーク 印刷 すべて表示 | すべて非表示
トップへ戻る
Copyright c 2013, Oracle and/or its affiliates.All rights reserved.