Estou seguindo o tutorial Java EE 6 e estou tentando entender a diferença entre beans de sessão sem estado e com estado. Se os beans de sessão sem estado não retêm seu estado entre as chamadas de método, por que meu programa está agindo da maneira que está?
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++;
}
}
O cliente
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());
}
}
Eu esperava que getNumber retornasse 0 todas as vezes, mas está retornando 1 e as recargas do servlet em meu navegador o aumentam ainda mais. O problema está no meu entendimento de como funcionam os beans de sessão sem estado e não com as bibliotecas ou o servidor de aplicativos, é claro. Alguém pode me dar um exemplo simples do tipo hello world de um bean de sessão sem estado que se comporta de maneira diferente quando você o altera para com estado?