手順 5 : テスト用のソース コードを記述して EJB をテストする

テストの準備はほとんど整いました。この手順では、セッション EJB を呼び出すページ フローのソース コードを記述します。呼び出されたセッション Bean は、エンティティ Bean を呼び出します。ここでは、一般的な EJB 呼び出しコードを記述するのではなく、その処理を行ってくれる EJB コントロールを使用します。

この節では、以下を実行します。

EJB コントロールをテスト プロジェクトに追加する

次の手順では、エンティティ Bean を表す EJB コントロールを作成してテスト コードに追加します。

  1. [プロジェクト・エクスプローラ] で、[VisitWebTest|Java リソース] を展開し、[src] を右クリックしてから [新規|パッケージ] をクリックします。
  2. [新規 Java パッケージ] ダイアログの [名前] フィールドに controls と入力して [完了] をクリックします。
  3. [ウィンドウ|パースペクティブを開く|ページ フロー] を選択して、ページ フロー パースペクティブに切り替えます。
  4. [ページ フロー エクスプローラ] タブで [参照先のコントロール] ノードを右クリックして [コントロールの追加] を選択します。
  5. [コントロールの選択] ダイアログで、[新しいシステム コントロール|EJB コントロール] を選択し、[OK] をクリックします。
  6. [新しいコントロール] ダイアログの [親フォルダを入力または選択] ボックスで、[VisitWebTest|src|controls] ツリーを展開して [controls] ノードを選択します。
  7. [コントロール名] ボックスに VisitTrackerBeanCtrl と入力し、[次へ] をクリックします。

    alt

  8. [EJB コントロール] をクリックし、[アプリケーション EJB の参照] を選択します。

    [リソースの参照] ダイアログに、追加した 2 つの EJB が表示されます。
  9. [VisitTrackerBean (remote jndi)] を選択して [終了] をクリックします。

    alt

  10. 表示される設定値が次のとおりであることを確認し、[終了] をクリックします。

    alt

作成された EJB コントロールのソース コード (VisitTrackerBeanCtrl.java) は次のようになります。

VisitTrackerBeanCtrl.java コード

コードの単純さの中に、その能力が隠されています。たとえば、SessionEJBControl インタフェースを拡張することによって、このコントロールは対象 EJB のホーム インタフェースとビジネス インタフェースのインスタンスを暗黙的に検索し、メソッド呼び出しで対象インスタンスが使用可能かどうかをチェックします。つまり、EJB コントロールが EJB を使用するために必要な作業を引き受けるため、ユーザが EJB 用のコードを記述する必要がありません。

@ControlExtension アノテーションは、このインタフェースがコントロールであることをコンパイラに対して指定します。@EJBHome アノテーションは、このコントロールによってアクセス可能になる対象 EJB のホーム インタフェースの JNDI 名を指定します。

EJB コントロール参照およびメソッド呼び出しをページ フローに追加する

次の手順では、作成したコントロールを使用するためのページ フロー コードを追加します。ページ フローでは、コントローラはクライアント ロジックの中核であり、本来なら別のファイル (JSP など) に格納する必要のあるステート変数およびデータを格納します。

VisitWebTest の EJB コントローラは、作成した EJB コントロールを介してセッション Bean を呼び出すだけではなく、セッション Bean 応答を、アプリケーションのプレゼンテーション コンポーネントを構成する JSP ファイルに渡します。

  1. [ページ フロー エクスプローラ] タブで、Controller.java を検索してダブルクリックします。
  2. 次に示すように、Controller.java ソース コードには、コントロールが追加されたことを表す変数が追加されています。

    ページ フロー コントローラ内の EJB コントロール変数

  3. [ページ フロー エディタ] タブで [begin] アイコンを右クリックして [メソッドに変換] を選択します。

    alt

  4. Controller.java のソース コードに、追加するコードをサポートするために次の import 文を追加します。
  5. import java.rmi.RemoteException;
    import javax.ejb.CreateException;
    
  6. begin メソッドを次のように編集します。このコードは、VisitTrackerBean エンティティ Bean のホーム インタフェースをルックアップおよび格納し、処理を index.jsp に転送します。
  7. @Jpf.Action(forwards = 
        { 
            @Jpf.Forward(name = "success", path = "index.jsp")
        }
    )
    protected Forward begin()
    {
        try 
        {
            visitTrackerBeanCtrl.create();
        } catch(CreateException ce) {}
        catch(RemoteException re) {}
        return new Forward("success");
    }
  8. begin メソッド コードの下に、次のコードを追加します。このコードは、index.jsp から呼び出すことができるアクションを提供します。このアクションがセッション Bean を呼び出します。このアクションが正常に呼び出された場合、その結果がこれから作成する showForm.jsp に転送されます。
    @Jpf.Action(forwards = 
        { 
            @Jpf.Forward(name = "success", path = "showForm.jsp")
        }
    )
    protected Forward invokeEJB(InvokeEJBForm form)
    {
        String response;
    
        try
        {
            response = visitTrackerBeanCtrl.greetVisitor(form.getName());
        } catch(RemoteException re) 
        {
            response = "An error has occurred";
        }
        getRequest().setAttribute("returnvalue", response);
        return new Forward("success");
    }
    
    /**
     * ゲットおよびセット メソッドはフォーム Bean エディタで上書きできる。
     */
    public static class InvokeEJBForm implements java.io.Serializable
    {
        private static final long serialVersionUID = 1L;
    
        private String name;
    
        public void setName(String name)
        {
            this.name = name;
        }
    
        public String getName()
        {
            return this.name;
        }
    }
  9. 〔Ctrl〕+〔Shift〕+〔S〕を押して作業を保存します。

ユーザ インタフェースを作成し、EJB をテストする

ここでは、アプリケーションのユーザ インタフェースのファイルを更新して、ページ フロー コントローラがそれらを使用して EJB との対話の結果を提供できるようにします。

  1. [ページ フロー エクスプローラ] タブで、[ページ|index.jsp] ノードを開きます。[index.jsp] ノードをダブルクリックしてファイルを開きます。
  2. <netui:html> タグを次のように編集します。このコードは、前の手順で記述した invokeEJB アクションを呼び出します。
  3. <netui:html>
        <head>
            <title>
                EJB Tester
            </title>
        </head>
        <body>
            <h2> EJB Tester </h2>
            <netui:form action="invokeEJB">
                <table>
                    <tr valign="top">
                        <td>Your Name:</td>
                        <td>
                            <netui:textBox dataSource="actionForm.name"/>
                        </td>
                    </tr>
                </table>
                <br/>&nbsp;
                <netui:button value="invoke EJB" type="submit"/>
            </netui:form>
        </body>
    </netui:html>
  4. [ページ フロー エクスプローラ] タブで [ページ|showForm.jsp] ノードを右クリックして [作成] を選択します。
  5. [ページ|showForm.jsp] ノードをダブルクリックして、ソース コードを開きます。
  6. このソース コードを次のコードに置き換えます。このコードは、正常に呼び出されたセッション Bean から結果を受け取り、応答を表示します。
  7. <%@ page language="java" contentType="text/html;charset=UTF-8"%>
    <%@taglib uri="http://beehive.apache.org/netui/tags-html-1.0" prefix="netui"%>
    <%@taglib uri="http://beehive.apache.org/netui/tags-databinding-1.0" prefix="netui-data"%>
    <%@taglib uri="http://beehive.apache.org/netui/tags-template-1.0" prefix="netui-template"%>
    
    <netui:html>
        <head>
            <title>
                EJB Response
            </title>
        </head>
        <body>
            <blockquote>
            <h2>EJB Response</h2>
            <p>
            Here is the result returned from EJB: <netui:label value="${requestScope.returnvalue}"></netui:label>
            </blockquote>
            <hr>
            <netui:anchor href="index.jsp">Let's do this again</netui:anchor>
        </body>
     </netui:html>
  8. 〔Ctrl〕+〔Shift〕+〔S〕を押して作業を保存します。
  9. [ページ フロー エクスプローラ] タブで、[Controller.java] を右クリックして [サーバで実行] をクリックします。
  10. [タスクの選択] ダイアログで、[終了] をクリックします。
  11. Workshop がアプリケーションのコンポーネントの構築を完了すると、index.jsp が表示されます。
  12. 表示されているボックスに名前を入力し、[invoke EJB] をクリックします。

    alt

  13. 応答ページには、入力した名前が返されて表示されます。このメッセージを生成するロジックは、手順 3 で作成した VisitTrackerBean セッション Bean に含まれています。

    alt

  14. テストを続けるために、[Let's do this again] をクリックし、同じ名前を入力して、もう一度 [invoke EJB] をクリックします。テストごとに、更新された応答が表示されます。

以上で完了です。これまでの手順では、Workshop で 2 つのエンタープライズ JavaBean を構築してテストしました。このチュートリアルの次の手順は、チュートリアルで行ったことのまとめと、役に立つ情報へのリンクです。

チュートリアルを移動するには、矢印をクリックしてください。

alt

alt


さらにヘルプが必要ですか。質問は Workshop ニュース グループまでお寄せください。