[トライアル版連動企画]
Webアプリケーションの作成が一通り理解できる基礎講座


藤井 等
ボーランド株式会社
2001/1/31

第4回 エンティティBeanでDBのデータをマッピングする

 クライアントの開発

■JSP Beanを作成する

 作成したEJBにアクセスし、製品情報をカテゴリ別に表示するJSPページを作ってみよう。まず、EJBにアクセスするクライアントBeanを作成する。

 [ファイル|新規]メニューを選択し、[新規]ページの[JavaBean]を実行する。ウィザードでは、次のように項目を設定する。

項目
パッケージ pricelist
クラス名 CategoryClient
親クラス java.lang.Object
オプション
Public (チェックする)
デフォルトコンストラクタを生成 (チェックする)
main関数の生成 (チェックしない)
サンプルプロパティの設定 (チェックしない)
ヘッダーコメントの生成 (チェックしない)
 
画面5 JavaBeanウィザード (クリックすると拡大します)

 生成されたクラスに、コードを追加する。前回は、EJBテストクライアントウィザードで、Beanアクセスコードを生成したが、今回は、直接記述してみよう。

 まず、import文を記述する。

import javax.naming.*;
import javax.rmi.*;
import java.util.*;
import java.text.*;

 コンストラクタでは、ネーミングサービスにアクセスして、CategoryBeanのホームインターフェイスへの参照を取得する。

private CategoryHome home = null;

public CategoryClient() {
  try {
    Context ctx = new InitialContext();
    Object ref = ctx.lookup("Category");
    home = (CategoryHome)
    PortableRemoteObject.narrow(ref, CategoryHome.class);
  }
  catch (Exception ex) {
    ex.printStackTrace();
  }
}

 次に、カテゴリの一覧を表示するためのHTMLタグセットを出力するためのメソッドgetCategoryTags()を定義する。このメソッドは、ページを表示するたびに呼び出されるので、最初の呼び出しのときにタグを作成し、保持しておくことにしよう。

String[] categoryTags = null;

public String[] getCategoryTags(String url) {
  if (categoryTags == null) {
    try {
      Collection collection = home.findAll();
      categoryTags = new String[collection.size()];
      Iterator iterator = collection.iterator();
      for (int i = 0; iterator.hasNext(); i++) {
        Object obj = iterator.next();
        Category category = (Category)
        PortableRemoteObject.narrow(obj, Category.class);
        categoryTags[i] = "<A HREF=" + url + "?category="
        + category.getCategoryNo() + ">"
        + category.getName() + "</A>";
      }
    }catch (Exception ex) {}
  }
  return categoryTags;
}

 このメソッドで注目すべきところは、home.findAll()を呼び出している個所である。findAll()は、すべてのカテゴリを検索するメソッドだ。結果はEJBへの参照ではなく、java.util.Collectionに格納されて返される。これを取り出しているのが、それ以下のコードだ。実際のオブジェクトへの参照は、narrow()メソッドで取得している。

 最後に、指定したカテゴリの製品情報を表示するためのタグセットを返すメソッドgetProductTags()を定義する。カテゴリ番号から、CategoryBeanを取得し、このBeanが持つgetProducts()メソッドを呼び出す。このメソッドは、Beanが表すカテゴリに属するProductBeanを取得する。

public String[] getProductTags(int cat_no) {
  try {
    Category category = home.findByPrimaryKey(new Integer(cat_no));
    if (category != null) {
      NumberFormat format = NumberFormat.getCurrencyInstance();
      Collection collection = category.getProducts();
      String[] productTags = new String[collection.size()];
      Iterator iterator = collection.iterator();
      for (int i = 0; iterator.hasNext(); i++) {
        Object obj = iterator.next();
        Product product = (Product)
        PortableRemoteObject.narrow(obj, Product.class);
        productTags[i] =
        "<TD><CENTER>" + product.getCode() + "</CENTER></TD>" +
        "<TD>" + product.getName() + "</TD>" +
        "<TD><DIV ALIGN=RIGHT>" +
        format.format(product.getPrice()) + "</DIV></TD>";
      }
      return productTags;
  }
  else
    return null;
  }
  catch (Exception ex) {
    return null;
  }
}

 [プロジェクト|プロジェクトのメイク]を選択し、コンパイルを実行する。

■JSPを作成する

 [ファイル|新規]メニューを実行し、[JavaServer Page]を選択する。

項目
パッケージ pricelist
名前 products
送信フォームの生成 (チェックしない)
オプション
エラーページの生成 (チェックしない)
サンプルBeanの生成 (チェックしない)

画面6 JSPウィザード (クリックすると拡大します)

 次のステップへ進み、[Beanの追加]ボタンを押して、作成したBean[productlist.CategoryClient]を追加する。Beanに対する項目は、次のように設定する。

項目
クラス productlist.CategoryClient
ID bean0
スコープ session

 生成されたJSPコードを次のように修正する。

<%@ page contentType="text/html; charset=Shift_JIS" %>
<HTML>
<HEAD>
<jsp:useBean id="bean0" scope="session" class="pricelist.CategoryClient" />
<TITLE>
products
</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffc0">
<H1>
製品情報
</H1>
<% String[] categories = bean0.getCategoryTags("products.jsp"); %>

<H3>製品カテゴリー</H3>
<UL>
<% for (int i = 0; i < categories.length; i++) { %>
<LI><%= categories[i] %>
<% } %>
</UL>
<% int cat_no = 1;
try {
  cat_no = Integer.parseInt(request.getParameter("category"));
}
catch (Exception ex){}

String[] products = bean0.getProductTags(cat_no);
if (products != null) {
  %>
  <TABLE BORDER=3 CELLSPACING=0
  CELLPADDING=2 COLS=4 WIDTH="100%" BGCOLOR="#CCCCCC" >
  <TR BGCOLOR="#999999">
  <TD WIDTH="20%"><CENTER>製品番号</CENTER></TD>
  <TD WIDTH="60%">製品名</TD>
  <TD WIDTH="20%"><CENTER>価格</CENTER></TD>
  </TR>
  <% for (int i = 0; i < products.length; i++) { %>
  <TR><%= products[i] %></TR>
  <% }
}
%>
</TABLE>
</BODY>
</HTML>


アプリケーションの実行

JBuilderで学ぶWebアプリケーション構築(第4回)
  ■データベースの準備
■エンティティBeanモデラ
  
■クライアントの開発
 JSP Beanを作成する
 JSPを作成する
  ■アプリケーションの実行
 開発環境内での実行
 Interbase Application Serverへの配布


連載記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間