Java関連/JavaEE5/EJB3.0(1)の続きです。
プロジェクトエクスプローラーの何もないところで右クリックし、コンテキストメニューを開き、
[EJBプロジェクト]を新規作成します。
新規EJBプロジェクトの作成ウィザードが開かれます。
プロジェクト名として、ここでは[Hello]にします。EJBモジュールバージョンは[3.0]を選択します。
構成は、[GlassFish v2.1 JavaEE5 デフォルト構成]にします。
EARメンバーシップは、EARにプロジェクトを追加のチェックボックスにチェックを入れ、
EARプロジェクト名として、前回作成したEJB3を指定し、[次へ]のボタンをクリックします。
これにより、EARプロジェクトのコンパイルエラーが消えてなくなるはずです。
EJBモジュール設定の構成についてのウィザードが開きます。
[ライアントのインタフェースとクラスを持つEJBクライアントJARモジュールを作成する]のチェックをはずし、
デプロイメント記述子の作成にチェックを入れ、[完了]ボタンをクリックします。
チェックを外したのは、EJBクライアントアプリをWebプロジェクトにしたかったためです。
デプロイメント記述子を展開し、セッションBeanを選択し、右クリックをして、[新規]-[セッションBean]を選択します。
EJB 3.0セッションBean作成のウィザードが起動します。
ここでは、Javaパッケージとして、[com.techch.ejb3.local]を指定し、クラス名は、[HelloBean]にします。
状態タイプは、[ステートレス]、ローカルビジネスインタフェースは、Eclipseの指定のままとしておきます。
[次へ]のボタンをクリックします。
次にセッションBean固有情報の設定を行います。
Bean名としてHelloBean、マップされた名前は空欄のまま、トランザクションタイプは、コンテナーであることを確認し、
[完了]のボタンをクリックします。
ここまででステートレスセッションビーンのひな形作成ができました。
ひな形作成されたStateless SessionBeanを編集します。
元ネタは、Java関連/JavaEE5/書籍の紹介の書籍です。
package com.techch.ejb3.local;
import javax.ejb.Local;
@Local
public interface HelloBeanLocal {
public String sayHello(String message);
}
package com.techch.ejb3.local;
import javax.ejb.Stateless;
/**
* Session Bean implementation class HelloBean
*/
@Stateless
public class HelloBean implements HelloBeanLocal {
/**
* Default constructor.
*/
public HelloBean() {
// TODO Auto-generated constructor stub
}
@Override
public String sayHello(String message) {
return "Hello," + message + "!";
}
}
続いて、HelloBeanクラスのEJBクライアントとなるサーブレットを作成します。
サーブレットということで、ウェブアプリケーションコンテナが必要になります。
プロジェクトエクスプローラーの何もないところで、右クリックをしてコンテキストメニューを開きます。
開いたら、[新規]-[動的Webプロジェクト]を選択します。
動的Webプロジェクトのウィザードが開始されます。
プロジェクト名として、[HelloWeb]、EARメンバシップとして、[EARにプロジェクトを追加]にチェックを入れ、[次へ]のボタンをクリックします。
ウェブモジュールの設定画面に遷移します。デフォルトのままでよいでしょう。[完了]のボタンをクリックしてください。
ソースフォルダに[com.techch.ejb3.local.web]パッケージを作った後、サーブレットを作成します。
パッケージの作り方の説明については、割愛させていただきます。
作成したパッケージを選択し、右クリックから、[新規]-[サーブレット]を選択します。
クラス名として、[HelloServlet]を指定し、[次へ]のボタンをクリックします。
初期化パラメータやURLマッピングの指定です。
ここでは、説明の欄に、「EJB3.0ステートレスなセッションビーンの呼び出し」と指定しています。
このフィールドは必須ではありません。
サーブレットのURLマッピングなどは、デフォルトのままでよいでしょう。
[次へ]のボタンをクリックしてください。
修飾子などを指定します。スタブとして、doGetメソッドのみ作成するようにします。
doPostに入っているチェックは外してください。
動的Webプロジェクトである[HelloWeb]プロジェクトから、EJBのHelloBeanを参照できなければ、
コンパイルエラーになってしまいます。
HelloWebのプロジェクトプロパティを開き、左ペインのJavaEEモジュール依存関係を選択してください。
J2EEモジュールタブから、Hello.jarにチェックをいれてください。
続いて、サーブレットのソースコードを入力します。
package conm.techch.ejb3.local.web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.techch.ejb3.local.HelloBeanLocal;
/**
* Servlet implementation class HelloServlet
*/
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// イニシャルコンテキストを取得する。
Context init_context = new InitialContext();
// セッションBeanオブジェクトをJNDIルックアップより取得する。
HelloBeanLocal hello = (HelloBeanLocal) init_context.lookup("java:comp/env/ejb/HelloRefName");
// ビジネスメソッドを呼び出す。
String result = hello.sayHello("Stateless Local SessionBean");
// プレーンテキストを出力する。
response.setContentType("text/plain;charset=Windows-31J");
PrintWriter out = response.getWriter();
out.println(result);
} catch (NamingException e) {
throw new RuntimeException(e);
}
}
}
続いて、web.xmlの編集を行います。
ウェブコンテナは、ローカルのセッションBeanを参照しているため、コンテナにEJBの参照を伝えなければなりません。
以下のコードを、[HelloWeb]のweb.xmlに追加してください。
<ejb-local-ref> <description></description> <ejb-ref-name>ejb/HelloRefName</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <local-home></local-home> <local>com.techch.ejb3.local.HelloBeanLocal</local> </ejb-local-ref>
添付は、自分の環境に配置されていたweb.xmlです。
サーバービューから、EJB3のエンタープライズアプリケーションをJ2EEコンテナにデプロイします。
サーバービュー上のローカルホストのGlassFish v2.1 JavaEE5を選択のうえ、右クリックでコンテキストメニューを開き、
[プロジェクトの追加および除去]を選択します。
ここまで長かったですが、ようやくサンプルアプリを試す時間になりました。
サーバービューから、GlassFishサーバーを選択し、コンテキストメニューから[開始]を選択してください。
起動できたでしょうか?>できない?、設定の見直しが必要ですね。
サーバーの起動ができたら、URLにアクセスしてみます。
ありゃ、失敗してしまいました。どうやら、タイプミスのようです。ejbとなっていなければならないところ、ejvになっています。
WTPを使用すると、自動的にひな形を作成してくれるので、とても便利です。
Tomcatプラグインは、過去の遺物です。開発効率が5倍は、アップすること間違いなしです。
以上です。