Glassfish V3 TP2でJavaEE 6 の EJB3.1を触ってみる。
デフォルトのままだとEJBの昨日は入っていない。プラグインで追加してあげる必要がある。
一番簡単なのはGlassfishV3をNetBeansへインストール、その後右クリックメニューを出すこと。
そこでglassfishv3-ejb3を選択、インストールする。
glassfishを再起動後、デプロイ、実行する。
コード等はJavaEE5のままでいいみたい。
おかげでシングルトンとかはできないのだけれども、2種類のセッションビーンが使えればそれでいいだろう。
計算をするクラスを作る。
先頭にアノテーションをつけるだけのインターフェースすらない足し算と引き算をするクラスだ。
package javaee6test; import javax.ejb.Stateless; @Stateless public class Compute { public int add(int num1,int num2){ return num1 + num2; } public int sub(int num1 , int num2){ return num1 - num2; } }
続いてサーブレットを新規作成する。これはデフォルトのNetServletという名前。
out.printlnという部分とかはNetBeansでデフォルトで生成されているのでそこを有効にして呼び出すコードを書いた。
以下抜粋
public class NewServlet extends HttpServlet { @EJB private Compute compute; /** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head>"); out.println("<title>Servlet NewServlet</title>"); out.println("</head>"); out.println("<body>"); int a = 100; int b = 70; int result = compute.add(a, b); out.println(a + "+" + b + "=" + result); out.println("<br>"); int result2 = compute.sub(a, b); out.println(a + "-" + b + "=" + result2); out.println("</body>"); out.println("</html>"); } finally { out.close(); } } }
実行結果。
すばらしい。
必要なライブラリは一切なく、Guiceのように手軽に扱うことが可能だ。SpringやSeasar2のようにインジェクトするクラスのパッケージ指定すら必要なく、まるでGuiceのよう。
さらにServletのバージョンも大幅に上がりマッピングすべきURLもアノテーションで指定できるようになるんだっけか。
もはやJavaEE6時代にはコンテナはEJBをつかいつつ、Viewとロジックのマッピングに専念するようなフレームワークが成功するような気がしてきた。
ちなみにGlassfishV3TP2の再デプロイ時間は・・・
May 19, 2008 11:47:15 PM com.sun.enterprise.web.WebApplication stop
情報: Undeployed web module StandardEngine[com.sun.appserv].StandardHost[server].StandardContext[/JavaEE6] from virtual server server
May 19, 2008 11:47:15 PM com.sun.enterprise.deployment.util.EjbBundleValidator accept
警告: enterprise.deployment.backend.ejbRefTypeMismatch
May 19, 2008 11:47:15 PM com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl bindToComponentNamespace
警告: naming.alreadyexistsReference name [java:comp/env/NewServlet/compute] already exists in web module [JavaEE6:/JavaEE6]
May 19, 2008 11:47:15 PM com.sun.enterprise.web.WebApplication start
情報: Loading application JavaEE6 at /JavaEE6
May 19, 2008 11:47:15 PM
情報: Loader: WebappClassLoader
delegate: true
repositories:
WEB-INF/classes/
/WEB-INF/classes/
- > Parent Classloader:
,URls[]=)
May 19, 2008 11:47:16 PM
情報: ==> Restore Timers? == false
May 19, 2008 11:47:16 PM com.sun.enterprise.v3.deployment.DeployCommand execute
情報: Deployment of JavaEE6 done is 1016 ms