J2EE RI でとりあえずはじめての Session Bean の開発/デプロイ/実行

J2EE Tutorial の最初に載っていた簡単な Session Bean をちょっとやってみました。(ちなみにの J2EE Tutorial には日本語版の PDF もダウンロード可能になっています。書籍として購入も可能です)

エンタープライズ・アプリケーションの作成

開発とデプロイを同時にやっていきますので、最初にいれものとしての EAR ファイルを作成しておきます。

deploytool を起動し、新規アプリケーションを作成します。

ファイル名はまあなんでもいいのですが、Converter.ear としました。

EJB (Session Bean) の開発

Remote インターフェイス、Home インターフェイス、実装クラスを作成します。

以下のように J2EE_Tutorial というディレクトリを作成し、それぞれ Notepad で入力し、J2 SDK 1.4.0 の javac でコンパイルしました。

まず最初に Remote インターフェイスである Converter.java です。
要は公開されているビジネスメソッドですね。

import javax.ejb.EJBObject;
import java.rmi.RemoteException;
import java.math.*;

public interface Converter extends EJBObject {

public BigDecimal dollarToYen(BigDecimal dollars) throws RemoteException;
public BigDecimal yenToEuro(BigDecimal yen) throws RemoteException;

}

次に Home インターフェイスである ConverterHome.java です。
Converter という Session Bean のライフサイクルをつかさどるインターフェイスになります。この Home インターフェイスを通じて、EJB の作成をお願いし、返された上記のインターフェイスに対してコーディングを行う、というファクトリ・パターン的な構造になっています。

import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;

public interface ConverterHome extends EJBHome {

Converter create() throws RemoteException, CreateException;

}

実装を行う ConverterBean.java です。
上の 2つがインターフェイスであるのに対しての、実装クラスです。
ビジネスメソッドに対する実装もありますし、ライフサイクルに関する実装もあります。上記 2つのインターフェイスに定義されているものは必ずここで実装されている、という関係になります。(Home インターフェイスの create メソッドは ejbCreate メソッドになっています)

import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import java.math.*;

public class ConverterBean implements SessionBean {

BigDecimal yenRate = new BigDecimal("121.6000");
BigDecimal euroRate = new BigDecimal("0.0077");

public BigDecimal dollarToYen(BigDecimal dollars) {
BigDecimal result = dollars.multiply(yenRate);
return result.setScale(2,BigDecimal.ROUND_UP);
}

public BigDecimal yenToEuro(BigDecimal yen) {
BigDecimal result = yen.multiply(euroRate);
return result.setScale(2,BigDecimal.ROUND_UP);
}

public ConverterBean() { }
public void ejbCreate() { }
public void ejbRemove() { }
public void ejbActivate() { }
public void ejbPassivate() { }
public void setSessionContext(SessionContext sc) { }

}

EJB のパッケージ

それぞれコンパイルを行ったら、ejb-jar ファイルにまとめます。
新規エンタープライズ Bean の作成を行います。

以下のように JAR ファイルの名前を指定し、中に含めるクラスとしてコンパイル済みの上記 3つのクラスを追加します。

続く画面で、Bean タイプを指定し、それぞれのクラスを対応する機能に指定します。
次の画面は省略していますが、この次の画面に行ったところで「完了」ボタンが使えるようになります。この後に続く画面で特に指定するところは今のところはないので、「完了」ボタンを押して ejb-jar を作成してください。

アプリケーションクライアントの開発

EJB にアクセスするアプリケーションクライアントを作成します。

今回もまた Notepad で入力し、J2 SDK 1.4.0 でコンパイルしました。

こちらがアプリケーションクライアントである ConverterClient.java です。

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import java.math.BigDecimal;

public class ConverterClient {

public static void main(String[] args) {

try {
Context initial = new InitialContext();
Object objref = initial.lookup("java:comp/env/ejb/SimpleConverter");

ConverterHome home =
(ConverterHome)PortableRemoteObject.narrow(objref, ConverterHome.class);

Converter currencyConverter = home.create();

BigDecimal param = new BigDecimal ("100.00");
BigDecimal amount =currencyConverter.dollarToYen(param);
System.out.println(amount);
amount = currencyConverter.yenToEuro(param);
System.out.println(amount);

System.exit(0);

} catch (Exception ex) {
System.err.println("Caught an unexpected exception!");
ex.printStackTrace();
}
}
}

最初に初期コンテキストを作成し、JNDI 名でルックアップして Home オブジェクトへの参照を取得します。

Context initial = new InitialContext();
Object objref = initial.lookup("java:comp/env/ejb/SimpleConverter");

参照は Object として取得されますので、Home インターフェイスに変換を行います。

ConverterHome home =
(ConverterHome)PortableRemoteObject.narrow(objref, ConverterHome.class);

Home インターフェイスを通じ、Remote インターフェイスを戻り値に指定して EJB を作成してもらいます。

Converter currencyConverter = home.create();

作成されたインスタンスに Remote インターフェイスを通して、定義されているメソッドを使用してアプリケーションロジックを実行します。

BigDecimal amount =currencyConverter.dollarToYen(param);

アプリケーションクライアントのパッケージ

新規アプリケーションクライアントのデプロイを行います。

上記のアプリケーションクライアントのクラスを追加します。

クラスを「メインクラス」に指定し、表示名の入力、「コンテナ管理クラスによる認証を使用」の選択を行って「次へ」行った画面で「完了」です。

「EJB 参照」タブ画面から「追加」ボタンを押して、このアプリケーションクライアントのルックアップに使用している ejb/SimpleConverter を「コード化名」に、使用する EJB のタイプや Home インターフェイス、Remote インターフェイスの名前などを指定します。

この画面は後から取った画面なので一番下の「JNDI名」に値が入っていますが、これはなくても今のところは OK です。

Web コンポーネントの開発

notepad で EJB にアクセスする JSP ファイルを作成します。

index.jsp です。

jspInit のところで、上のアプリケーションクライアントと同じように JNDI ルックアップを行って Home インターフェイスの取得、インスタンスの作成と Remote インターフェイスを通してのその取得が行われています。
その後、ビジネスメソッドが実行されています。

<%--

Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.

This software is the proprietary information of Sun Microsystems, Inc.
Use is subject to license terms.

--%>

<%@ page import="Converter,ConverterHome,javax.ejb.*, java.math.*, javax.naming.*, javax.rmi.PortableRemoteObject, java.rmi.RemoteException" %>
<%!
private Converter converter = null;

public void jspInit() {
try {
InitialContext ic = new InitialContext();
Object objRef = ic.lookup("java:comp/env/ejb/TheConverter");
ConverterHome home = (ConverterHome)PortableRemoteObject.narrow(objRef, ConverterHome.class);
converter = home.create();
} catch (RemoteException ex) {
System.out.println("Couldn't create converter bean."+ ex.getMessage());
} catch (CreateException ex) {
System.out.println("Couldn't create converter bean."+ ex.getMessage());
} catch (NamingException ex) {
System.out.println("Unable to lookup home: "+ "TheConverter "+ ex.getMessage());
}
}

public void jspDestroy() {
converter = null;
}
%>
<html>
<head>
<title>Converter</title>
</head>

<body bgcolor="white">
<h1><b><center>Converter</center></b></h1>
<hr>
<p>Enter an amount to convert:</p>
<form method="get">
<input type="text" name="amount" size="25">
<br>
<p>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</form>

<%
String amount = request.getParameter("amount");
if ( amount != null && amount.length() > 0 ) {
BigDecimal d = new BigDecimal (amount);
%>
<p>
<%= amount %> dollars are <%= converter.dollarToYen(d) %> Yen.
<p>
<%= amount %> Yen are <%= converter.yenToEuro(d) %> Euro.
<%
}
%>

</body>
</html>

Web コンポーネントのパッケージ

新規 Web コンポーネントの作成です。

WAR 表示名を指定し、上記の JSP ファイルを追加します。

タイプとして JSP を選択します。

JSP ファイル名を選択し、Web コンポーネント名を指定して「完了」です。

WAR ファイルの EJB タブの「追加」で、JSP の中で使用している JNDI 参照名を「コード化名」に、使用している EJB のタイプや Home インターフェイス、Remote インターフェイスの名前などを指定します。

この画面は後から取った画面なので一番下の「JNDI名」に値が入っていますが、これはなくても今のところは OK です。

JNDI 名の指定

最後にアプリケーション (.ear) ファイルの「JNDI 名」で EJB コンポーネントの JNDI 名を指定し、アプリケーションクライアントで指定した参照名/Web コンポーネントで指定した参照名と JNDI 名を結び付けます。

エンタープライズ・アプリケーションのデプロイ

「ツール」-「配備」でデプロイを行います。

エンタープライズ・アプリケーションのファイルとターゲットサーバを指定します。

「クライアント Jar を返します」にチェックをいれ、新規アプリケーションクライアントの追加時に生成されたクライアント JAR ファイルを指定します。

JNDI 名の確認です。

JSP ファイルをアクセスする時の URL パスです。

ここで「完了」です。

こんな状況表示用のダイアログボックスが出ています。

進捗情報を表示します。

全部終わった状態です。「了解」でこのダイアログボックスを閉じてください。

deploytool を起動した元の画面でもメッセージが出て状況を知らせています。

EJB にアクセスするアプリケーションの実行

アプリケーションクライアントを動かしてみましょう。
以下のように実行が確認できます。

Web コンポーネントの方を動かしてみましょう。

ポートはデフォルトの場合 8000 です。デプロイ時に指定した URL パスを指定してアクセスしてみましょう。
最初はこんな画面です。

200 と入力すると

答えが返ってきます。

[Top Pageに戻る]

[PR] | ハウスクリーニング葬儀 東京韓国食材SEOアクセス解析ハウスメーカーレンタルオフィスSEO対策消費者金融不動産担保ローン時計車 買取ハワイハワイ挙式アスクル転職生命保険テンプレート沖縄旅行動画FX免許合宿二輪引越し消費者金融税理士ゴルフ会員権留学レーシックマッサージ貸し店舗FX投資信託くりっく365アフィリエイト育毛剤FXホームページ制作デイトレードFXホノルルマラソンベスト ハワイ ホテル レーツバリ島ハワイウエディングHawaii hotelsHawaii Activitiesbhhr
【運営会社「パラダイムシフト」サービス】 ハワイ現地オプショナルツアーリラックマ.ビジネスクラス ハワイ) - ビジネスクラス航空券 - 格安航空券(1) - 格安航空券(2) - 海外ホテル - 韓国旅行
無料ホームページ作成 - レンタルサーバー - 携帯ホームページ - ブログ - ホテル 予約 - 格安航空券 - 長期滞在 - タイムシェア - ヴィラ - ハワイ コンドミニアム - バリ島 ホテル
[PR] 消費者金融を徹底比較!新金利でお得になった消費者金融を比較