「JBoss」EJB をさわってみる ( サーブレットから利用 )

前回のエントリーでスタンドアロンのアプリから EJB の呼び出しをやりました。

・「JBossEJB をさわってみる ( スタンドアロンアプリから利用 ) - プログラム日記
http://a4dosanddos.hatenablog.com/entry/2014/03/09/185931

ちょっと今回 EJB 呼び出すサーブレットも作ってみたので、その時のメモです。
( EJB は上記のエントリーのものを使いまわしで )

[ 環境情報 ]
Windows 7 SP1
JBoss Application Server 7.1.1.Final
Java SE 7 Update 45

■ TestServlet.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import test.RemoteTest;

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static final String JNDI_NAME = "ejb:/EJBTest//TestBean!test.RemoteTest";

	public TestServlet() {
		super();
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		RemoteTest test = null;
		try {
			final Hashtable jndiProperties = new Hashtable();
			jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
			final Context context = new InitialContext(jndiProperties);
			test = (RemoteTest) context.lookup(JNDI_NAME);
		} catch (NamingException e) {
			e.printStackTrace();
		}

		PrintWriter out = response.getWriter();
		out.println("<html><body>");
		out.println("hello:" + test.hello("hoge"));
		out.println("<br>");
		out.println("add:" + test.add(1, 2));
		out.println("</body></html>");
	}
}

EJB 呼び出しってことであれば、スタンドアロンのアプリケーションとやること全く変わらないですね・・・

あとは、.war ファイルの作成 -> JBoss にデプロイ ( %JBOSS_HOME%\standalone\deployments ) -> JBoss 起動 ->「http://localhost:8080/EJBServlet/TestServlet」にアクセス、という感じでやると、ブラウザに「hello:Hello hoge」、「add:3」と表示されるはずです。

以上です。