我正在尝试创建@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