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

約1秒。すばらしい。
中身はEJB3とさほどかわっていないのだが、EJBアレルギーの人も触ってくれるだろうか。