1) EJBプロジェクトの作成
メニューバーから[ファイル] > [新規] > [プロジェクト]を選択すると、[新規プロジェクト]が表示されます。
新規プロジェクトウィザードから[EJB] > [EJBプロジェクト]を選択して、[次へ]をクリックします。
以下の設定項目を確認、入力してください。
設定項目 | 設定内容 |
---|---|
プロジェクト名 | EJBSample |
ターゲットランタイム | Interstage Application Server V9.2 IJServer Cluster (Java EE) |
EJB モジュール バージョン | 3.0 |
構成 | Interstage Application Server V9.2 IJServer Cluster (Java EE) デフォルト構成 |
EARにプロジェクトを追加 | チェックしない |
情報を設定後、[次へ]をクリックしてください。EJBモジュールページが表示されます。
以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
ソースフォルダ | ejbModule |
Deployment Descriptorの生成 | チェックしない |
ポイント
EJB3.0では、deployment descriptorは必須ではなく、アノテーションのみでEnterprise Beanを作成することができます。
2-1) データクラスの作成
国名と総人口の情報を保持し、そこから情報を取得するデータクラスを作成します。データクラスの作成は、作成したプロジェクトを選択して、右クリックでコンテキストメニューから[新規] > [クラス]を選択します。新規Javaクラスウィザードが表示されます。
以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
ソースフォルダ | EJBSample/ejbModule |
パッケージ | sample |
名前 | CountryData |
以下のソースファイルが生成されます。
ソースファイル | 説明 |
---|---|
CountryData.java | データクラス |
国名と総人口を保持する処理を実装します。以下の太字の箇所をソースに追加してください。
データクラスの実装(CountryData.java)
package sample; public class CountryData { private String countryName; private int totalPopulation; public CountryData(String name, int total) { setCountryName(name); setTotalPopulation(total); } public String getCountryName() { return countryName; } public void setCountryName(String countryName) { this.countryName = countryName; } public int getTotalPopulation() { return totalPopulation; } |
ポイント
フィールドを追加した後にクラスを選択している状態で、メニューから[ソース] > [Getter および Setter の生成]を選択することで、getter/setterの追加を行うことができます。
2-2) Session Beanのひな型の作成
Session Beanのひな型の作成は、作成したプロジェクトを選択して、右クリックでコンテキストメニューから[新規] > [Session Bean]を選択すると新規 EJB 3.0 Session Beanウィザードが表示されます。
以下の設定項目を確認、入力してください。
設定項目 | 設定内容 |
---|---|
EJB プロジェクト | EJBSample |
ソースフォルダ | ¥EJBSample¥ejbModule |
Java パッケージ | sample |
クラス名 | PopulationRanking |
状態タイプ | Stateless |
Remote | チェックしない |
Local | チェックする sample.PopulationRankingLocal |
情報を設定後、[次へ]をクリックしてください。Session Beanの情報設定ページが表示されます。
以下の設定項目を確認してください。情報を設定確認後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
Bean名 | PopulationRanking |
トランザクションタイプ | コンテナ |
インタフェース | sample.PopulationRankingLocal |
継承された抽象メソッド | チェックする |
スーパークラスからのコンストラクタ | チェックする |
[完了]をクリックすると、以下のソースファイルが生成されます。
ソースファイル | 説明 |
---|---|
PopulationRanking.java | Session Beanクラス |
PopulationRankingLocal.java | ビジネスインタフェース |
2-3) Session Beanの実装
順位を入力して国名と総人口を返す処理をSession Beanのメソッドとして実装します。以下の太字の箇所をソースに追加してください。
ビジネスインタフェースの実装(PopulationRankingLocal.java)
package sample; import javax.ejb.Local; @Local public interface PopulationRankingLocal { public CountryData getCountryData(int rank); } |
Session Beanクラスの実装(PopulationRanking.java)
package sample; import javax.ejb.Stateless; /** * Session Bean implementation class PopulationRanking */ @Stateless public class PopulationRanking implements PopulationRankingLocal { /** * Default constructor. */ public PopulationRanking() { } private CountryData countries[] = new CountryData[] { new CountryData("中国",1330000000), new CountryData("インド",1140000000), new CountryData("アメリカ",300000000), new CountryData("インドネシア",230000000), new CountryData("ブラジル",190000000), new CountryData("パキスタン",160000000), new CountryData("バングラデシュ",150000000), new CountryData("ロシア",140000000), new CountryData("ナイジェリア",140000000), new CountryData("日本",130000000) }; public CountryData getCountryData(int rank) { --rank; if (rank < 0 || rank >= countries.length) { return null; } return countries[rank]; } } |
メニューバーから[ファイル] > [新規] > [プロジェクト]を選択すると、[新規プロジェクト]が表示されます。
新規プロジェクトウィザードから[Java EE] > [エンタープライズアプリケーションプロジェクト]を選択して、[次へ]をクリックします。
以下の設定項目を確認、入力してください。
設定項目 | 設定内容 |
---|---|
プロジェクト名 | EJBEARSample |
ターゲットランタイム | Interstage Application Server V9.2 IJServer Cluster (Java EE) |
EAR バージョン | 5.0 |
構成 | Interstage Application Server V9.2 IJServer Cluster (Java EE) デフォルト構成 |
情報を設定後、[次へ]をクリックしてください。EARに追加するモジュールページが表示されます。
以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
Java EE モジュール依存関係 | EJBSampleをチェックする |
コンテンツフォルダ | EarContent |
Deployment Descriptorの生成 | チェックしない |
本来であればWebアプリケーションをクライアントとして作成するための手順が必要ですが、ここではサンプルをインポートしてEJBクライアントとして重要なポイントを確認していきます。Webアプリケーションの作成についての詳細な手順を知りたい場合は、Webアプリケーションの"2.2 入門"を参照してください。
サンプルのインポートは次の手順で行います。
メニューから[ファイル] > [インポート]を選択します。表示されたインポートウィザードで[一般] > [既存プロジェクトをワークスペースへ]を選択します。[アーカイブファイルの選択]をチェックし、[参照]ボタンを押して、以下のファイルを選択します。
<Java EEワークベンチのインストールフォルダ>¥sample¥EJBSample.zip
[プロジェクト]から[EJBClientSample]を選択し、[完了]をクリックしてください。
EJBClientSampleプロジェクトのインポート後に、EJBEARSampleプロジェクトを選択して、右クリックでコンテキストメニューから[プロパティ]を選択します。プロパティダイアログボックスの[Java EEモジュール依存関係]を選択し、EJBClientSampleをチェックしてEARにEJBクライアントを追加します。
4-1) クライアントプロジェクトの作成
EJBクライアントとして動的Webプロジェクトを作成します。サンプルのインポートで代替済みのため、詳細は省略します。設定項目は以下を参考にしてください。
設定項目 | 設定内容 |
---|---|
プロジェクト名 | EJBClientSample |
ターゲットランタイム | Interstage Application Server V9.2 IJServer Cluster (Java EE) |
構成 | Interstage Application Server V9.2 IJServer Cluster (Java EE) デフォルト構成 |
動的 Web モジュールバージョン | 2.5 |
EARにプロジェクトを追加 | チェックする |
EARプロジェクト名 | EJBEARSample |
4-2) ビルドパスの設定
ビジネスインタフェース(PopulationRanking)を参照するためのビルドパス(クラスパス)を設定します。インポートしたサンプルプロジェクトでは設定済みです。
設定内容を確認するには、プロジェクト(EJBClientSample)を選択して、右クリックでコンテキストメニューから[プロパティ]を選択します。プロパティダイアログボックスの[Java EEモジュール依存関係]を選択して、[Java EEモジュール]タブを表示します。
以下がチェックされていることを確認します。
設定項目 | 設定内容 |
---|---|
JAR/モジュール | EJBSample.jar |
4-3) サーブレットクラスの作成
サーブレットクラスを作成します。インポートしたサンプルプロジェクトでは以下のような設定項目で作成済みです。
設定項目 | 設定内容 |
---|---|
Java パッケージ | sample |
クラス名 | ServletController |
スーパークラス | javax.servlet.http.HttpServlet |
作成するメソッドスタブの選択 | スーパークラスからのコンストラクタ |
4-4) 入出力画面の作成
入出力画面のJSPを作成します。インポートしたサンプルプロジェクトでは以下のようなファイルを作成済みです。
入力画面(default.jsp)
<%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>世界総人口ランキング</title> </head> <body> <h1>入力画面</h1> <p>1~10の間で順位を入力してください。</p> <p></p> <form action="ServletController" method="post"> 順位:<br> <input name="rank" type="text" size="10">位<br> <p></p> <input type="submit" value="OK"> <input type="reset" value="クリア"> </form> </body> </html> |
出力画面(result.jsp)
<%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>世界総人口ランキング</title> </head> <body> <h1>出力画面</h1> 総人口ランキング${param.rank}位は「${applicationScope.ranking.countryName}」です。<br> 総人口は${applicationScope.ranking.totalPopulation}人です。 <br> <hr> <form action="ServletController" method="post"> <input type="submit" value="入り口に戻る"> <input type="hidden" name="mode" value="top"> </form> </body> </html> |
エラー画面(error.jsp)
<%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>世界総人口ランキング</title> </head> <body> <h1>エラー画面</h1> 指定された範囲内の順位が入力されていないか、またはサーバエラーです。<br> <br> <hr> <form action="ServletController" method="post"> <input type="submit" value="入り口に戻る"> <input type="hidden" name="mode" value="top"> </form> </body> </html> |
4-5) Dependency Injectionの指定
Session Beanを呼び出すための実装をサーブレットクラスに行います。インポートしたサンプルプロジェクトのサーブレットソースには実装済みです。
ビジネスインタフェースのフィールドを作成して、以下のようにEJBアノテーションを設定し、Dependency Injectionの指定を行います。
EJBアノテーションの定義
@EJB private PopulationRankingLocal business; |
ポイント
J2EE1.4までのlookupメソッドの代わりに、Java EEではDependency Injectionを利用することで、オブジェクトを取得して使用することができます。(オブジェクトは実行時に自動的にJava EEコンテナによってフィールドに設定されます。)
4-6) Session Beanの呼出し処理の実装
Session Beanのメソッドを呼び出すには、EJBアノテーションを定義したビジネスインタフェース型のフィールドを利用してそのままメソッド呼出しを行うだけです。
インポートしたサンプルプロジェクトのサーブレットソースには実装済みです。
Session Beanの呼出しメソッドの定義
CountryData country = business.getCountryData(rank); |
Session Bean呼出しの実装を行ったサーブレットクラスは以下のようになります。(インポートしたプロジェクトのサーブレットソースは、この形式になっています。)
太字の部分が実際には追加、変更する箇所になります。
サーブレットクラス(ServletController.java)
package sample; import java.io.IOException; import javax.ejb.EJB; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ServletController */ public class ServletController extends HttpServlet { private static final long serialVersionUID = 1L; @EJB private PopulationRankingLocal business; /** * @see HttpServlet#HttpServlet() */ public ServletController() { super(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("Windows-31J"); ServletContext sc = getServletContext(); // 呼び出すファイル種別取得 String mode = request.getParameter("mode"); if (mode != null && mode.equals("top")) { // 入力画面のHTMLファイル呼出し RequestDispatcher inRd = getServletContext().getRequestDispatcher("/default.jsp"); inRd.forward(request, response); return; } int rank; // 入力チェック try { rank = Integer.parseInt(request.getParameter("rank")); } catch (NumberFormatException e) { RequestDispatcher errRd = sc.getRequestDispatcher("/error.jsp"); errRd.forward(request, response); return; } CountryData country = business.getCountryData(rank); //取得した値の確認 if (country == null) { RequestDispatcher errRd = sc.getRequestDispatcher("/error.jsp"); errRd.forward(request, response); return; } sc.setAttribute("ranking", country); RequestDispatcher outRd = sc.getRequestDispatcher("/result.jsp"); outRd.forward(request, response); } } |
ポイント
必要な実装をコーディングした後にJavaエディタ上で右クリックし、コンテキストメニューから[ソース] > [インポートの編成]を行うと、プロジェクトに設定されたクラスパスに従った適切なimport文が挿入できます。
5) アプリケーションの動作確認
5-1) プロジェクトとサーバの関連付け
サーバビューでサーバを選択し、コンテキストメニューから[プロジェクトの追加および除去]を選択してください。
使用可能なプロジェクトから作成したEARプロジェクトを選択し、[追加]をクリックしてください。構成プロジェクトにEARプロジェクトが追加されていることを確認してください。
下の情報を確認後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
構成プロジェクト | EJBEARSample |
ポイント
サーバビューに配備先となるサーバが登録されていない場合は、サーバを追加する必要があります。サーバを追加する方法については、"7.2.6 アプリケーションの動作確認"を参照してください。
5-2) ブレークポイントの設定
Session BeanクラスのgetCountryData()メソッドの先頭行にブレークポイントを設定します。ブレークポイントは、エディタの左側のルーラー部分をダブルクリックして、設定もしくは解除します。
5-3) サーバの起動
サーバビューでサーバを選択し、コンテキストメニューから[デバッグ]を選択してください。
ポイント
デバッガを使用せず単純にアプリケーションを起動したい場合には、コンテキストメニューから[開始]を選択します。
サーバが起動する前に自動的にEARファイルが配備されます。
サーバビューで以下の情報を確認してください。
確認項目 | 確認内容 |
---|---|
サーバの状態 | 始動済み |
サーバの状況 | 同期済み |
EARファイル(EJBEARSample)の状況 | 同期済み |
EARファイル配下のEJB-JAR(EJBSample)ファイルの状況 | 同期済み |
EARファイル配下のWARファイル(EJBClientSample)の状況 | 同期済み |
5-4) アプリケーションの実行
サーバビューで、配備されているWebプロジェクト(EJBClientSample)を選択して、コンテキストメニューから[Webブラウザ]を選択します。Webブラウザが起動されて、入力画面が開きます。
設定項目 | 設定内容 |
---|---|
入力画面のURL | http://localhost/EJBClientSample/ |
[順位:]の入力フィールドに人口ランキングの順位を入力して、[OK]をクリックします。
ポイント
プロジェクトを選択し、コンテキストメニューから[実行] > [サーバで実行]または[デバッグ] > [サーバでデバッグ]を選択することで、サーバの追加、プロジェクトの追加、サーバの起動、クライアントの起動をまとめて行うことができます。
また、クライアントとして使用するWebブラウザは、メニュー [ウィンドウ] > [Web ブラウザ] から変更することができます。
5-5) アプリケーションのデバッグ
アプリケーションが動作し、ブレークポイントで中断されます。変数ビューの表示を確認します。メニューから[実行] > [ステップオーバ]を選択し、変数ビューでプログラムの状況を確認します。デバッグについては、"7.2.6.1 デバッグする"を参照してください。
ポイント
変数ビューでは値の確認だけでなく、変更も行うことができます。
デバッガで中断している処理は、メニューから[実行] > [再開]を選択することで再開され、サーバ側での処理が終了し、Webブラウザに出力画面が表示されます。入力した順位の国名と総人口が表示されることを確認してください。
6) 運用環境へのアプリケーションの配布
6-1) アプリケーションのエクスポート
EARファイルの作成は、エクスポートウィザードから行います。エクスポートウィザードを起動するには、[ファイル] > [エクスポート]を選択してください。[エクスポート]から[Java EE] > [EARファイル]を選択してください。
EARエクスポートウィザードが表示されます。
以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックしてください。
設定項目 | 設定内容 |
---|---|
EARアプリケーション | EJBEARSampleを指定します。 |
宛先 | EARファイルの作成先を指定します。 |
6-2) 運用環境への配布
運用環境の管理コンソールにログインし、ローカルにあるEARファイルを指定することにより、リモート環境から運用環境に配備を行うことができます。