GlassFishは再デプロイ後もセッションの状態を保持する機能をサポートします。この機能は Active Redeploy と呼ばれ、HTTPセッション, ステートフルEJB, EJBタイマーで有効です。
ノート
このセクションではHTTPセッションに対するActive Redeployが NetBeansと連携して、どうのように JavaEE6アプリケーション開発者の生産性を向上させるかを示します。
int count;
if (request.getSession().getAttribute("count") == null) {
count = 0;
} else {
count = (Integer) request.getSession().getAttribute("count");
}
request.getSession().setAttribute("count", ++count);
out.println("<h2>Timestamp: " + new Date() + "<br>");
out.println("Times: " + request.getSession().getAttribute("count") +
"</h2>");
インポートをFIXしてください。このコードではこのページへのアクセス回数をセッションに保持しています。“http://localhost:8080/JavaEE6SampleApp/TestServlet” を再読み込みすると次のように表示されます。
“Timestamp” と “Access count” が表示されています。
サーブレットの出力結果がコピーアンドペースとしたコードのものと少し違って見えるかもしれません。
return name + " (" + customerId + ")";
“[ “ が “ (“ に置換されていることに着目してください。 ファイルを保存してください。NetBeansは各ファイルが保存される度に自動的にJava EE 6プロジェクトをデプロイします。この機能は次のように “Project Properties”, “Run” の “Deploy on Save” をチェックする・しないで設定可能です。
更新後の出力結果は次のようになります。
toStringの結果が正しく更新され、正常に再デプロイされているにも関わらず、セッション上のアクセス回数がインクリメントされていることに着目してください。すなわちセッションが再デプロイ後も保存されています。これにHTTPセッション(典型的にログイン情報が保存されている領域)が再デプロイしても破棄されないため、開発者の生産性を高めます。これはオプションの機能であり、NetBeansのGlassFishサーバーのプロパティを見て、“Services” タブの“Preserve Sessions Across Redeployment” を選択を外すことで無効化できます。