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

第2部 アプリケーション開発編> 第3章 Enterprise JavaBeans (EJB)を開発する> 3.2 開発の流れ

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

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

+プロジェクトの作成

テストクライアント用のPure Javaプロジェクトを作成します。
プロジェクト新規作成ウィザードの[Java設定]において、以下を設定します。

  1. [プロジェクト]タブを選択し、テスト対象となるEnterprise Beanのプロジェクトを追加します。
  2. [ライブラリ]タブ > [ライブラリの追加]をクリックし、[ライブラリの追加]で[Interstage J2EEライブラリ]を指定後、テスト時に必要な機能を選択します。
  3. プロジェクト新規作成後に起動するコード生成ウィザードとして[EJBテストクライアント]を選択します。

+ウィザードの起動

EJBテストクライアント生成ウィザードはメニューバーからも起動できます。

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

+ウィザードの概要

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

+生成ファイル

Apworksの"チュートリアル"のサンプルリソースで提供されている「HelloEJBアプリケーション(Stateless Session Bean)」の場合、以下のテストクライアントソースが生成されます。

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

/**
 * 
 */
package packageHelloEJB;


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

      /**
       * home.
       */
      private packageHelleEJB.HelloEJBHome home;

      /**
       * eb.
       */
      private packageHelleEJB.HelloEJBRemote eb;

      /**
       * constructor.
       */
      public HelloEJBClient() {
               TestClient.dump("HelloEJB テスト結果");
               try {
                         javax.naming.Context ic = new javax.naming.InitialContext();
                         java.lang.Object obj = (Object) ic
                                            .lookup("java:comp/env/ejb/HelloEJB");
                         home = (packageHelleEJB.HelloEJBHome) javax.rmi.PortableRemoteObject
                                            .narrow(obj, packageHelleEJB.HelloEJBHome.class);
               } catch (javax.naming.NameNotFoundException ex) {
                        ex.printStackTrace();
               } catch (javax.naming.NamingException ex) {
                        ex.printStackTrace();
               }
      }

      /**
       * create.
       * @return packageHelleEJB.HelloEJBRemote
       */
      public packageHelleEJB.HelloEJBRemote create() {
               try {
                         TestClient.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();
                         TestClient.dump("    結果=", eb);
                         TestClient.dump("    処理時間(ms): " + ms);
               } catch (Exception ex) {
                         eb = null;
                         ex.printStackTrace();
               }
               return eb;
      }

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

      /**
       * hello.
       * @return String
       */
      public String hello() {
               String rc = (String) null;
               try {
                        TestClient.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();
                        TestClient.dump("    結果=" + rc);
                        TestClient.dump("    処理時間(ms): " + ms);
               } catch (Exception ex) {
                        ex.printStackTrace();
               }
               return rc;
      }

}

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

/**
 * 
 */
package packageHelloEJB;

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

      /**
       * bDump.
       */
      public static boolean bDump;

      /**
       * run.
       * @param args
       */
      public void run(java.lang.String[] args) {
               // 動作結果をファイルに保存する場合は、コメントを解除してください
               //                 try {
               //                         System.setOut(new java.io.PrintStream(new java.io.FileOutputStream("log.txt")));
               //                 }
               //                 catch (java.io.FileNotFoundException ex) {
               //                          ex.printStackTrace();
               //                          System.exit(1);
               //                 }
               // 動作結果を出力しない場合は、falseを設定してください。
               bDump = true;
               HelloEJBClient eb1 = new HelloEJBClient();
               eb1.create();
               eb1.hello();
               eb1.remove();
      }

      /**
       * main.
       * @param args
       */
      public static void main(java.lang.String[] args) {
               System
                                  .setProperty(
                                                  "com.fujitsu.interstage.j2ee.DeploymentDescriptorClient",
                                                  "C:\\Interstage\\APW\\eclipse\\workspace\\TestClient\\src\\META-INF\\application-client.xml");
               //               System.setProperty("java.naming.factory.initial", "com.fujitsu.interstage.ejb.jndi.FJCNCtxFactoryForClient");
               System
                                  .setProperty("java.naming.factory.initial",
                                                  "com.fujitsu.interstage.j2ee.jndi.InitialContextFactoryForClient");
               TestClient object = new TestClient();
               object.run(args);
      }

      /**
       * dump.
       * @param s
       */
      public static void dump(String s) {
               if (bDump) {
                         System.out.println(s);
               }
      }

      /**
       * dump.
       * @param s
       * @param obj
       */
      public static void dump(String s, Object obj) {
               if (bDump) {
                         if (obj instanceof packageHelleEJB.HelloEJBRemote) {
                                  packageHelleEJB.HelloEJBRemote data = (packageHelleEJB.HelloEJBRemote) obj;
                                  TestClient.dump(s + "{"};
                                  TestClient.dump("    )");
                         }
               }
      }
}

+生成ファイルの編集

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

+実行

テストクライアントを実行し、動作確認をしてください。生成ファイルの例「HelloEJBアプリケーション(Stateless Session Bean)」の場合、以下のような結果が標準出力に出力されます。

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

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

+留意事項

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

テストクライアントが動作するためには、上記に加え、配備(Deployment)時に生成されるクライアント配布物(クラス)が必要です。
これらのクラスを、クラスパスに設定しておく必要があります。


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

All Rights Reserved, Copyright (C) 富士通株式会社 1998-2006