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 プロジェクトをそっくり追加してください。後は servletJSP を作ります。

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 の組み合わせによってこれが劇的に面白くなります。お楽しみに。