我正在嘗試創建@Stateful,@Stateless和@Singleton EJB bean的簡單示例,以幫助我更好地理解差異。問題是,當我使用@Stateful,@Stateless或@Singleton註解中的任何一個註釋bean時,根本沒有區別。與有狀態,無狀態和單例EJB bean相同的結果
這裏是bean:
import javax.ejb.Singleton;
import javax.ejb.Stateful;
import javax.ejb.Stateless;
@Stateful
public class Bean {
private int counter = 0;
public int getCounter(){
return counter++;
}
}
這裏是Servlet的客戶:
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javaeetutorial.converter.ejb.Bean;
@WebServlet(urlPatterns="/")
public class Client extends HttpServlet{
@EJB
Bean bean;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html lang=\"en\">");
out.println("<head>");
out.println("<title>test</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet ConverterServlet at " +
request.getContextPath() + "</h1>");
try {
out.println("<form method=\"get\">");
out.println("<input type=\"submit\" value=\"Submit\">");
out.println("</form>");
out.println("<p>" + bean.getCounter() + "</p>");
out.println("<p>" + bean + "</p>");
} finally {
out.println("</body>");
out.println("</html>");
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
我預期的結果是:
@Statefull - 當每一個不同的客戶端按按鈕看到從0開始計數
@Singleton - 當任何客戶端按e鈕只看到一個計數
@Stateless - 我不知道會發生
描述你正在運行的測試 – fantarama