私はEJBを初めて使用します。EARアプリケーションにステートフルBeanが必要です。ejbモジュールで単純なステートフルセッションBeanを作成しました。
@Stateful
public class Test {
public Test() {
}
private int i;
@PostConstruct
public void initialize() {
i = 0;
}
public int getI() {
return i++;
}
}
そして、warモジュールのサーブレットから呼び出します。
public class TestServlet extends HttpServlet {
@EJB
Test test;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(true);
out.println("<html>");
out.println("<head>");
out.println("<title></title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>" + test.getI() + "</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}
...
}
実行すると、ブラウザを更新するたびに数値が大きくなります。
0、1、2、..。
しかし、別のブラウザで実行すると、番号は0から始まりませんが、前のブラウザからのセッションを継続します。シングルトンのように動作します。
3、4、5、..。
Beanの新しいインスタンスが作成されなかったのはなぜですか?セッションBeanをwarモジュールに入れるか、SessionScopedで注釈を付けようとしましたが、結果は同じです。
httpセッションごとにステートフルBeanの新しいインスタンスを作成するのを手伝ってもらえますか?