前 次 前/次ボタンと目次ボタンとの区切り線

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

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

この節では、以下の操作について学習します。

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

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

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

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

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

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

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

@ControlExtension
@EJBHome(jndiName="ejb.VisitTrackerBeanRemoteHome")
public interface VisitTrackerBeanCtrl extends
        hello.VisitTrackerBeanRemoteHome, // ホーム インタフェース
        hello.VisitTrackerBeanRemote, // ビジネス インタフェース
        SessionEJBControl // コントロール インタフェース
{
    static final long serialVersionUID = 1L;
}

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

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

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

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

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

  1. [ページ フロー エクスプローラ] タブで、Controller.java を検索してダブルクリックします。
  2. [ページ フロー エディタ] タブで [begin] アイコンを右クリックして [メソッドに変換] を選択します。

  3. Controller.java のソース コードに、追加するコードをサポートするために次の import 文を追加します。
  4. import java.rmi.RemoteException;
    import javax.ejb.CreateException;
    import org.apache.beehive.netui.pageflow.Forward;
  5. begin メソッドを次のように編集します。このコードは、VisitTrackerBean エンティティ Bean のホーム インタフェースをルックアップおよび格納し、処理を index.jsp に転送します。
  6. @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");
    }
  7. 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;
        }
    }
  8. 〔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 for WebLogic がアプリケーションのコンポーネントの構築を完了すると、index.jsp が表示されます。
  12. 表示されているボックスに名前を入力し、[invoke EJB] をクリックします。

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

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

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

関連トピック

なし

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

 

ナビゲーション バーのスキップ   ページの先頭