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

ツイッタの「名前の占拠」規約について翻訳

http://twitter.zendesk.com/forums/26257/entries/18370

ユーザー名の無断占拠はTwitterのルールに反しています

名前の無断占拠とユーザー名を販売する目的のアカウントは、ずっと凍結されます。
ユーザー名の取引で、販売したり他の形態での支払いを強要したりを試みることは、アカウントの凍結につながります。6ヶ月以上アクセスのないアカウントは通知なく削除されます。Twitterは現在、侵害の場合のほかは、アクセスがなかったり無断占拠のアカウントを開放していません。
ヒント:アカウントのプロファイル画像を更新しないことや、通常迷わせる意図のないものは、侵害にはなりません

なにがユーザー名の無断占拠を構成しますか?

アカウントについてどの行為が名前の無断占拠か決定するときのいくつかの要素は

  • アカウントが作成されている総数
  • 他の人がアカウント名を使うことを妨げるためのアカウントの作成
  • 販売目的のアカウントの作成
  • 三者のコンテンツのフィードを更新に使い、その名前で扱われるアカウント
多数のアカウント作成と更新のないアカウント

多数のアカウント作成はSPAM違反でありTwitterの規約に反します。
連番で作成されたアカウントは凍結され、ユーザー名は無効になります。

販売目的のユーザー名

ユーザー名の販売はTwitterの規約に反します。もしだれかがTwitterユーザー名を販売してきたら、報告してください。

ニュースフィードのアカウント

三者のコンテンツのためのニュースフィードアカウントを歓迎しますが、そのユーザー名を保持するニュースフィードアカウントを使うことは、無断占拠と考えられます。もし誰かがあなたの社名を無断占拠するためにニュースフィードを使っていたら、あなたはそのユーザー名を使う権利があるでしょう。もしユーザー名の無断占拠がなりすましを伴ったり商標である場合は、どうぞこれらの方針について相談してください。

どうやったら無断占拠は報告できますか?

ユーザー名の無断占拠を報告するには、占拠者のユーザー名をつけたリプライを@spamに送ってください。

@spam the @xstalashoe profile is a squatter

報告に「squatter」という単語を含めるようにしてもらえると、早く気づくことができます。