テストの準備はほとんど整いました。この手順では、セッション EJB を呼び出すページ フローのソース コードを記述します。呼び出されたセッション Bean は、エンティティ Bean を呼び出します。ここでは、一般的な EJB 呼び出しコードを記述するのではなく、その処理を行ってくれる EJB コントロールを使用します。
この節では、以下を実行します。
次の手順では、エンティティ Bean を表す EJB コントロールを作成してテスト コードに追加します。
作成された EJB コントロールのソース コード (VisitTrackerBeanCtrl.java) は次のようになります。
コードの単純さの中に、その能力が隠されています。たとえば、SessionEJBControl
インタフェースを拡張することによって、このコントロールは対象 EJB のホーム インタフェースとビジネス インタフェースのインスタンスを暗黙的に検索し、メソッド呼び出しで対象インスタンスが使用可能かどうかをチェックします。つまり、EJB コントロールが EJB を使用するために必要な作業を引き受けるため、ユーザが EJB 用のコードを記述する必要がありません。
@ControlExtension
アノテーションは、このインタフェースがコントロールであることをコンパイラに対して指定します。@EJBHome
アノテーションは、このコントロールによってアクセス可能になる対象 EJB のホーム インタフェースの JNDI 名を指定します。
次の手順では、作成したコントロールを使用するためのページ フロー コードを追加します。ページ フローでは、コントローラはクライアント ロジックの中核であり、本来なら別のファイル (JSP など) に格納する必要のあるステート変数およびデータを格納します。
VisitWebTest の EJB コントローラは、作成した EJB コントロールを介してセッション Bean を呼び出すだけではなく、セッション Bean 応答を、アプリケーションのプレゼンテーション コンポーネントを構成する JSP ファイルに渡します。
import java.rmi.RemoteException; import javax.ejb.CreateException;
begin
メソッドを次のように編集します。このコードは、VisitTrackerBean
エンティティ Bean のホーム インタフェースをルックアップおよび格納し、処理を index.jsp に転送します。@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"); }
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; } }
ここでは、アプリケーションのユーザ インタフェースのファイルを更新して、ページ フロー コントローラがそれらを使用して EJB との対話の結果を提供できるようにします。
<netui:html>
タグを次のように編集します。このコードは、前の手順で記述した invokeEJB
アクションを呼び出します。<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/> <netui:button value="invoke EJB" type="submit"/> </netui:form> </body> </netui:html>
<%@ 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>
VisitTrackerBean
セッション Bean に含まれています。
以上で完了です。これまでの手順では、Workshop で 2 つのエンタープライズ JavaBean を構築してテストしました。このチュートリアルの次の手順は、チュートリアルで行ったことのまとめと、役に立つ情報へのリンクです。