NetBeans6.7RC2でServlet3.0を試す

NetBeans6.7RC2とGlassfish v3 previewを使ってServlet3.0を試してみます。

NetBeansのダウンロード

NetBeans6.7RC2は、ここから「Java」対応版をダウンロードします。
http://download.netbeans.org/netbeans/6.7/rc2/
RC2なので、インストーラーを使わず、プラットフォームに「OSに依存しないZIP」を使うことをおすすめします。
以降、NetBeansをインストール・解凍したフォルダをNETBEANS_HOMEとします。

Glassfishのダウンロード

Glassfish v3 previewはここから。たぶんフルサポート版でもWeb Profileでも大丈夫。
https://glassfish.dev.java.net/downloads/v3-preview.html
これもNetBeansから使うだけであればZipのほうがいいと思います。
以降、Glassfish v3をインストール・解凍したフォルダをGLASSFISH_HOMEとします。

NetBeansの設定

初期状態では、Glassfish v3は使えない状態になるので、プラグインで「Glassfish v3 enabler」をインストールするか、NETBEANS_HOME/etc/netbeans.confのnetbeans_default_optionsに次の設定を追加します。

 -J-Dorg.glassfish.v3.enableExperimentalFeatures=true

そうすると、サーバー登録の選択肢にGlassfish v3が現れます。


netbeans.confを変更する場合は、次の設定も加えておくと、Glassfish v3が登録されます。

 -J-Dorg.glassfish.v3ee6.installRoot=

ここに説明があります。
http://blogs.sun.com/vkraemer/entry/7_0_and_glassfish_v3
http://blogs.sun.com/vkraemer/entry/experimental_features_marker

プロジェクト作成

メニューから「ファイル > 新規プロジェクト」を選択して、新規プロジェクトダイアログでJava WebカテゴリからWebアプリケーションを選択して「次へ」ボタンを押します。
「名前と場所」は通常通り入力して、「サーバーと設定」では次のようにGlassfishを選択します。画像では見えてませんが、Java EEバージョンには「Java EE 5」を選択しておきます。

サーブレット作成

プロジェクトができたら、サーブレットを作ってみます。ここで、新規作成するときに「サーブレット」ではなく「Java クラス」にしてみましょう。
適当なパッケージと名前でクラスを作成してみてください。
クラスには、@WebServletアノテーションをつけて、HttpServletクラスを継承します。
それから、doGetメソッドをオーバーライドして次のようなクラスを作成します。import文は[ctrl]+[shift]+[i]で自動的に作成させます。

@WebServlet(urlPatterns="/hoge")
public class NewServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<h1>Servlet</h1>");
        out.println("やあ<br>");
        out.println("</html>");
        out.close();
    }
}


プロジェクトで右クリックしてメニューから「実行」をすると、Glassfishが起動してプロジェクトが配備され、ブラウザが開きます。

ここで、WebServletアノテーションのurlPatternsに指定したURLを指定すると、サーブレットの処理結果が表示されます。

ひとつのサーブレットについて、ひとつのクラスで設定もまとめれるので、作業がやりやすいです。


これで、表示されたら、こんどは表示メッセージの部分を次のように変えてみます。

        out.println("<html>");
        out.println("<h1>Servlet</h1>");
        out.println("やあやあ<br>"); //ここを変更
        out.println("</html>");

変更したら、[Ctrl]+[S]で保存したあと、そのままブラウザでリロードしてみます。すると、変更が反映されたことがわかります。

コンパイルや配備のことを意識する必要が全くありません。ORマッピングなどを使うと、再配備への時間は増えていくのかもしれませんが、この手軽さはいいです。

EJBの作成

ついでに、EJBも作ってみましょう。適当なパッケージと名前でクラスを作って@Statelessアノテーションをつけ、次のようなsayHelloメソッドを作成します。

package server;
import javax.ejb.Stateless;

@Stateless
public class NewBean {
    public String sayHello(String msg){
        return msg + "こんにちは";
    }
}


次に、さきほどのサーブレットでこのEJBを使います。

@WebServlet(urlPatterns="/hoge")
public class NewServlet extends HttpServlet{
    @EJB NewBean bean;//EJBのインスタンスを保持

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<h1>Servlet</h1>");
        out.println(bean.sayHello("きみたち") + "<br>");//EJBのメソッド呼び出し
        out.println("やあやあ<br>");
        out.println("</html>");
        out.close();
    }

}

今度も、保存してブラウザでリロードすれば変更が反映されています。

まとめ

これが「あの」EJBかというくらい、簡単に気軽に使うことができます。ここまで、最初に起動したとき以外は、ファイルを作成して保存しただけです。
実際に開発するときにどうかという話はあるものの、少し試すためならここまで簡単になったというのは、いいことです。