Interstage Studio プログラマーズガイド
目次 索引 前ページ次ページ

第2部 Java編> 第4章 Enterprise JavaBeans (EJB)を開発する> 4.2 開発の流れ

4.2.2 テストクライアントを作成して動作確認する

作成済みのEnterprise Beanから動作確認を行うためのクライアント(以降では、テストクライアントと呼びます)を生成し、各ビジネスメソッドの動作確認を行います。テストクライアントの生成方法およびテストの方法について説明します。ここでは、EJBテストクライアントをWebアプリケーションとして作成する場合を説明します。

EJBにリモート接続するEJBテストクライアントを作成する場合は、Javaアプリケーションプロジェクトを作成して、EJBテストクライアントウィザードの[クライアント種別]で"Web"以外を指定してください。
LocalHome/Localインタフェースを含まないEJBのEJBテストクライアントでは、[クライアント種別]で"Web"を選択できません。

+プロジェクトの作成

テストクライアント用のWebアプリケーションプロジェクトを作成します。

作成したWebアプリケーションプロジェクトを選択してコンテキストメニューの[プロパティ]の[Javaのビルドパス]で以下を設定します。

+ウィザードの起動

メニューから[ファイル] > [新規] > [その他]を選択します。[新規]ダイアログボックスから[J2EE] > [EJBテストクライアント]を選択すると、EJBテストクライアントウィザードが起動されます。

+ウィザードの概要

ウィザードでは、EJB JARファイルを指定し、そのEJB JARファイルに含まれるEnterprise Beanのうち動作確認の対象となるものを選択して、テストクライアントを生成します。ここでは、EJBテストクライアントとして、Webアプリケーションを作成するため、[クライアント種別]では、"Web"を選択します。詳細は、"Interstage Studioユーザーズガイド"を参照してください。

+生成ファイル

"Interstage Studioチュートリアル"のサンプルリソースで提供されている「HelloEJBアプリケーション(Stateless Session Bean)」で、[クライアント種別]に"Web"を選択した場合、以下のテストクライアントソースが生成されます。

[ラッパークラスソース: HelloEJBClient.java(クラス名を"HelloEJBClient"とした場合)]

/**
 * 
 */
package packagetHelloEJB;

/**
 * @author xxxxx
 *
 */
public class HelloEJBClient {

    /**
     * home.
     */
    private packageHelloEJB.HelloEJBLocalHome home;

    /**
     * eb.
     */
    private packageHelloEJB.HelloEJBLocal eb;

    /**
     * out.
     */
    private TestWebClient out;

    /**
     * constructor.
     * @param out
     */
    public HelloEJBClient(TestWebClient out) {
        this.out = out;
        out.dump("HelloEJB テスト結果");
        try {
            javax.naming.Context ic = new javax.naming.InitialContext();
            home = (packageHelloEJB.HelloEJBLocalHome) ic
                .lookup("java:comp/env/ejb/HelloEJB");
        } catch (javax.naming.NameNotFoundException ex) {
            ex.printStackTrace();
        } catch (javax.naming.NamingException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * create.
     * @return packageHelloEJB.HelloEJBLocal
     */
    public packageHelloEJB.HelloEJBLocal create() {
        try {
            out.dump("  メソッド名: create");
            java.util.Date date_s = new java.util.Date();
            eb = home.create();
            java.util.Date date_e = new java.util.Date();
            long ms = date_e.getTime() - date_s.getTime();
            out.dump("    結果=", eb);
            out.dump("    処理時間(ms): " + ms);
        } catch (Exception ex) {
            eb = null;
            ex.printStackTrace();
        }
        return eb;
    }

    /**
     * remove.
     */
    public void remove() {
        try {
            eb.remove();
            eb = null;
        } catch (javax.ejb.RemoveException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * hello.
     * @return String
     */
    public String hello() {
        String rc = (String) null;
        try {
            out.dump("  メソッド名: hello");
            java.util.Date date_s = new java.util.Date();
            rc = eb.hello();
            java.util.Date date_e = new java.util.Date();
            long ms = date_e.getTime() - date_s.getTime();
            out.dump("    結果=" + rc);
            out.dump("    処理時間(ms): " + ms);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return rc;
    }
}

[メインクラスソース: TestWebClient.java(クラス名を"TestWebClient"とした場合)]

/**
 * 
 */
package packagetHelloEJB;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author xxxxx
 *
 */
public class TestWebClient extends javax.servlet.http.HttpServlet implements
        javax.servlet.Servlet, javax.servlet.SingleThreadModel {

    /**
     * out.
     */
    protected PrintWriter out;

    /**
     * constructor.
     */
    public TestWebClient() {
        super();
    }

    /**
     * doGet.
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        // ContentTypeを設定
        response.setContentType("text/html; charset=windows-31j");
        // 出力用PrintWriterを取得
        out = response.getWriter();
        // 出力
        out.println("<html>");
        out.println("<head>");
        out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-31j\">");
        out.println("<title>TestWebClient</title>");
        out.println("</head>");
        out.println("<body>");

        HelloEJBClient eb1 = new HelloEJBClient(this);
        eb1.create();
        eb1.hello();
        eb1.remove();

        out.println("</body>");
        out.println("</html>");
    }

    /**
     * dump.
     * @param s
     */
    public void dump(String s) {
        if (out != null) {
            out.println(s);
            out.print("<br>");
        }
    }

    /**
     * dump.
     * @param s
     * @param obj
     */
    public void dump(String s, Object obj) {
        if (obj instanceof packageHelloEJB.HelloEJBLocal) {
            packageHelloEJB.HelloEJBLocal data = (packageHelloEJB.HelloEJBLocal) obj;
            dump(s + "{");
            dump("    }");
        }
    }
}

+生成ファイルの編集

必要に応じて、生成されたファイルの編集を行ってください。

+実行

テストするEJBアプリケーションと作成したWebアプリケーションをInterstage Application Serverの同一のIJServerに配備および起動します。WebブラウザよりWebアプリケーションの動作確認をしてください。生成ファイルの例「HelloEJBアプリケーション(Stateless Session Bean)」の場合、以下のような結果がWebブラウザに表示されます。

HelloEJB テスト結果 
メソッド名: create 
結果={ 
} 
処理時間(ms): 7 
メソッド名: hello 
結果=こんにちは、EJB 
処理時間(ms): 13

Webアプリケーションの配備、実行およびデバッグする場合はIJServer起動構成を使用できます。詳細は、"Interstage Studioユーザーズガイド"を参照してください。

ワークベンチの初期状態では、ファイルの保存時に自動的にビルドが行われるようにオプションが設定されており、手動でビルドする必要はありません。自動的にビルドを行わないようにしたい場合には、メニューより、[プロジェクト] > [自動的にビルド]を選択し、オプションを解除してください。

+留意事項

テストクライアントを開発するためには、テストするEnterprise Beanに含まれる以下のクラスが必要です。


目次 索引 前ページ次ページ

Copyright 2007-2008 FUJITSU LIMITED