パート4:Java EEコンテナの内部と外部でのファサードのテスト
ここでは、EJB 3.0のアノテーション・テクニックを使用して、Entity Beanに新しいメソッドを追加します。その後で、ファサード・クライアントを作成し、Java EEコンテナの内部と外部で実行してテストを行います。

EJBをテストするには、EJBインスタンスを作成または検索し、そのリモート・インタフェース・メソッドを呼び出すことができるクライアント・プログラムを実行する必要があります。JDeveloperで提供されているサンプル・クライアント・ユーティリティを使用すると、簡単にクライアントを作成できます。EJBの実行とテストには、組込みサーバーまたはリモート・サーバーを使用できます。

ステップ1:エンティティへの新規メソッドの追加と公開
  1. のボタンをクリックし、「IntegratedWebLogicServer」を選択してWebLogic Serverを停止します。

    WebLogic Serverの停止
  2. ログ・ウィンドウに次のメッセージが表示された場合に、サーバーは停止されています。

    WebLogic Serverの停止
  3. ViewController」プロジェクトを閉じて、「Model」プロジェクトを展開します。

    アプリケーション・ナビゲータ
  4. Employees.javaをダブルクリックしてクラスのソース・コードを開き、「@Entity」ノードを展開して非表示になっていたコードを表示します。

    Entity BeanのJavaコード
  5. 最後の@NamedQuery文の最後にカンマを追加します。次に、名前から従業員を取得する問合せをクラスに追加します。以下のコードを追加します。


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

    @Entity
    @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"),
    @NamedQuery(name = "Employees.findByName", query = "select o from Employees o where o.firstName like :p_name")
    })

    Entity BeanのJavaコード

    これらのオブジェクトがその他のJavaファイルと異なる点は、EJBエンティティとしてオブジェクトを識別するアノテーションがあることです。詳細を表示/非表示詳細表示
  6. Makeアイコンをクリックして、Employees.javaクラスをコンパイルします。

    Makeアイコン

    Message - Logウィンドウにエラーが表示されていないか確認します。

    ログ・ウィンドウのメッセージ

  7. 以下の手順を実行して、新しいメソッドをSession Beanに追加します。

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

    コンテキスト・メニュー

  8. ダイアログの「Employees」ノードを展開します。新しい名前付き問合せのgetEmployeesFindByNameが公開可能なメソッドとして表示されていることを確認します。「getEmployeesFindByName」を選択し、「getEmployeesFindBySal」の選択を解除して、「OK」をクリックします。

    Specify Session Facade Optionsダイアログ
  9. JDeveloperは、サンプル・クライアントを作成することでEJBをテストする手段を提供します。テストを実行するには、通常は「HRFacadeBean」を右クリックし、コンテキスト・メニューから「New Sample Java Client」を選択します。ただし、JDeveloperの現在のバージョンにはバグがあり、コンテキスト・メニューからサンプル・クライアントを生成するオプションは正常に動作しません。以下の手順は、この問題の解決に役立ちます。この問題の詳細は、リリース・ノートを参照してください。

  10. アプリケーション・ナビゲータで「HRFacadeBean.java」を右クリックし、「New Sample Java Client...」を選択します。

  11. Create Sample Java Clientペインで、デフォルト値を受け入れて「OK」をクリックします。

  12. 2点修正する必要があります。

    1つ目に、メソッドではパラメータを使用するため、パラメータの値を追加する必要があります。
    コード内で、"/* FIXME: Pass parameters here */"までスクロールします。getEmployeesFindByNameメソッドで、"p%"をパラメータとして追加します。作業の完了後、コードは次のように表示されます。

    (List<Employees>) hRFacade.getEmployeesFindByName("p%") /* FIXME:Pass parameters here */)


    HRFacadeClientのJavaコード

  13. 2つ目に、次のコードをコピーし、クラスの最後に貼り付けます。
    一部のimport文をコードに追加する必要もあります。


      private static Context getInitialContext() throws NamingException {
        Hashtable env = new Hashtable();
        // WebLogic Server 10.x connection details
        env.put( Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory" );
        env.put(Context.PROVIDER_URL, "t3://127.0.0.1:7101");
        return new InitialContext( env );
      }

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

  15. アプリケーション・ナビゲータで「HRFacadeBean」を右クリックします。次に、コンテキスト・メニューから「Run」を選択して、WebLogic Server内のファサードBeanを起動します。

    コンテキスト・メニュー

    WebLogic Serverが開始するまで待機します。

    実行中のログ・ウィンドウ

    組込みのOracle WebLogic Serverは、JDeveloper内で実行されます。このサーバーを使用すると、素早く簡単にEJBの実行とテストを行い、EJBを変更せずにデプロイできます。
  16. HRFacadeClient」を右クリックし、コンテキスト・メニューから「Run」を選択します。

    コンテキスト・メニュー

  17. ログ・ウィンドウは、クライアントに含まれる3つのメソッド(getDepartmentsFindAll()、getEmployeesFindAll()、getEmployeesFindByName())に基づいて、データベースのデータを返します。

    実行中のログ・ウィンドウに返された情報

  18. findByName()メソッドの結果の表示を改善するには、HRFacadeClient.javaクラスで、getEmployeesFindAll()メソッドに対応したforループとgetDepartmentsFindAll()メソッドに対応したforループをコメント・アウトします。コードは次のようになります。

    HRFacadeClientのJavaコード

  19. MakeボタンMakeボタンをクリックしてクラスを再コンパイルし、エラーが返されないことを確認します。

  20. HRFacadeClient」クラスを右クリックし、コンテキスト・メニューから「Run」を選択します。

    コンテキスト・メニュー

  21. ログ・ウィンドウには、'P%'句によって返される行が表示されます。

    実行中のログ・ウィンドウに返された情報

ステップ2:Java EEコンテナ外部でのJavaサービスの実行
永続性ユニットは、コンテナの内部または外部で実行するように構成できます。EJB 3.0では、アプリケーション・サーバーを使用することなく、Pure Java SE環境のエンティティを実行できます。これを実行する理由は、単純なJava SEテストベッドを作成して(JUnitを使用)、アプリケーション・サーバーでの展開/実行のオーバーヘッドがない状態でエンティティの動作をテストするためです。他には、Swingアプリケーションをローカルで実行する場合があるためです。
ここでは、従業員レコードおよび部門レコードを検索するメソッドを実装したSession Beanを作成します。
  1. 新しい永続性ユニットを作成して、Java EEコンテナの外部でJavaサービスを実行します。

    META-INFの「persistence.xml」を右クリックし、コンテキスト・メニューから「New Java Service Facade」を選択します。

    コンテキスト・メニュー

  2. Java Service Classパネルでは、新しい永続性ユニットを作成するか(次のパネル)、既存のユニットを使用するかを選択できます。「Choose a Persistence Unit or Create one in the next Panel」を選択し、「Generate a Sample Java Client」チェック・ボックスにチェックを入れて、「Next」をクリックします。

    Java Service Facadeメソッドのステップ1

  3. 永続性ユニットにoutsideという名前をつけます。「JDBC Connection」を選択し、JDBC接続がHRに設定されていることを確認します。「Next」をクリックします。

    Java Service Facadeメソッドのステップ2

  4. すべてのメソッドがデフォルトで選択されています。次に示すメソッドのみを選択し、「OK」をクリックします。

  5. Java Service Facadeメソッドのステップ3

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

  6. ソース・エディタ・ウィンドウのJavaServiceFacadeClientクラスに対して、getEmployeesFindByNameメソッドのパラメータとして"P%"を追加します。この文は次のようになります。

    (List<Employees>)javaServiceFacade.getEmployeesFindByName("P%")

    JavaServiceFacadeClientクラス
  7. MakeアイコンMakeボタンをクリックして、クラスをコンパイルし作業内容を保存します。

  8. アプリケーション・ナビゲータで「JavaServiceFacadeClient」ノードを右クリックし、コンテキスト・メニューから「Run」を選択します。

    コンテキスト・メニュー

  9. ログ・ウィンドウは、Java EEコンテナの外部で実行されるクラスの実行結果を表示し、取得した最初のレコード(Pat Fay)のlastNameを返します。

    実行中のログ・ウィンドウ

  10. META-INFの「persistence.xml」ノードをダブルクリックして、ファイルの内容を表示します。

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

  11. 永続性エディタが開き、デフォルトではModel - Persistence Unitが表示されます。ブレッドクラム・ナビゲーションをクリックして、両方の永続性ユニットを表示します。

    永続性ユニット

    永続性ユニット
  12. Source」タブをクリックして、作成された両方の永続性ユニット(Modeloutside)のコードを表示します。

    永続性ユニットのソース・コード
まとめ
このチュートリアルでは、WebアプリケーションでEJB/JPAを使用する方法について学習しました。このチュートリアルで学習した内容は、以下のとおりです。 Java EEアプリケーションの詳細は、下記のWebサイトを参照してください。

ブックマーク 印刷 すべて表示 | すべて非表示
トップへ戻る

このページはお役に立ちましたか。



Copyright c 2013, Oracle and/or its affiliates.All rights reserved.