私はEJBを初めて使用しています。 EARアプリケーションにステートフルBeanが必要です。私は、EJBモジュールに簡単なステートフルセッションBeanを作成しました:ステートフルEJBの問題 - すべてのユーザーに対して1つのセッションを維持します
@Stateful
public class Test {
public Test() {
}
private int i;
@PostConstruct
public void initialize() {
i = 0;
}
public int getI() {
return i++;
}
}
そして私は、戦争のモジュールでサーブレットからそれを呼び出す:私はそれを実行すると
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の新しいインスタンスを作成できますか?
ありがとうございました。 SessionScopedを試しましたが、うまくいきませんでした。私の間違いは、EJBを使用してインスタンスをフェッチしたことですが、それはInjectで行う必要があります。だから、私は幸せにSessionScopedステートフルを使用していて、注射で注入しています。 – ziri
ああ、はい、私は@インジェクションについて言及するのを忘れていました。感謝の答えを更新しました。 –