EJB のすごく簡単なサンプル
いよいよ JPA + EJB + JSF によるアプリケーション構築に向けて、まずは EJB の簡単なサンプルを作ってみましょう。
EJB プロジェクトの作成
まずは EJB プロジェクトを作成します。名前は EJBHello にしてください。EJB プロジェクトを作る際に EAR プロジェクト(EAR : Enterprise Archive)も作っておくといいでしょう。名前は自動で EJBHelloEAR になるはずですので、そのまま作成します。
続いて ejbModule 直下にパッケージを作って Session Bean を作成します。Class name には Interface の実装クラスの名前を入れます。ここでは HelloImpl
としましょう。Create business interface の Local にチェックを入れて、名前を Hello
とします。No-interface View のチェックは外してください。
続いて Hello.java を編集します。
package jp.mydns.akanekodou.ejb; import javax.ejb.Local; @Local public interface Hello { String sayHello(String msg); }
アノテーションは自動で付いていますので変更する必要はありません。ここでは sayHello
という抽象メソッドを定義しています。
次に HelloImpl.java を編集して sayHello
の実装を書きます。
package jp.mydns.akanekodou.ejb; import javax.ejb.Stateless; @Stateless public class HelloImpl implements Hello { @Override public String sayHello(String msg) { return "Hello " + msg; } }
Web アプリケーションの作成
EJBHelloApp という動的 Web プロジェクトを作成し、ビルド・パスに EJBHello プロジェクトをそっくり追加してください。後は servlet と JSP を作ります。
package jp.mydns.akanekodou; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.annotation.WebServlet; import javax.ejb.EJB; import jp.mydns.akanekodou.ejb.Hello; @WebServlet("/hello") public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; @EJB private Hello hello; protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { String msg = hello.sayHello("from local"); request.setAttribute("msg", msg); getServletContext() .getRequestDispatcher("/hello.jsp") .forward(request, response); } }
EJB
アノテーションによって対応する Session Bean を依存性注入によって取得することができます。
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> <!doctype html> <html> <head> <title>EJB Test</title> </head> <body> <p><%= (String)request.getAttribute("msg") %></p> </body> </html>
後は EJBHelloApp を EAR プロジェクトに追加して出来上がりです。
JBoss AS に EJBHelloEAR を追加します。JBoss AS に、というのがポイントです。Tomcat には EJB コンテナがないので EJB は使えません。JBoss AS のインストールを先に説明したのはここで使いたかったからです。
JBoss AS を起動して
http://localhost:8080/EJBHelloApp/hello
にアクセスして、ブラウザに "Hello from local" と表示されていたら正常に動作しています。これだけだとすごく単純で EJB のありがたみがわからないかもしれませんが、JPA + EJB の組み合わせによってこれが劇的に面白くなります。お楽しみに。