最佳答案
我正在学习 JavaEE6教程,并试图理解无状态会话 bean 和有状态会话 bean 之间的区别。如果无状态会话 bean 在方法调用之间没有保留它们的状态,那么为什么我的程序会以这种方式运行呢?
package mybeans;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
@LocalBean
@Stateless
public class MyBean {
private int number = 0;
public int getNumber() {
return number;
}
public void increment() {
this.number++;
}
}
客户
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import mybeans.MyBean;
import java.io.PrintWriter;
@WebServlet(name = "ServletClient", urlPatterns = { "/ServletClient" })
public class ServletClient extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB
MyBean mybean;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
mybean.increment();
out.println(mybean.getNumber());
}
}
我期望 getNumber 每次都返回0,但是它返回1,并且在我的浏览器中重新加载 servlet 会增加更多。当然,问题在于我对无状态会话 bean 如何工作的理解,而不是对库或应用程序服务器的理解。有没有人能给我一个简单的 hello world 类型的例子,说明当您将无状态会话 bean 更改为有状态时,它的行为会有所不同?