Sto esaminando il tutorial Java EE 6 e sto cercando di capire la differenza tra i bean di sessione senza stato e con stato. Se i bean di sessione senza stato non mantengono il loro stato tra le chiamate di metodo, perché il mio programma si comporta in questo modo?
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++;
}
}
Il 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());
}
}
Mi aspettavo che getNumber restituisse 0 ogni volta, ma restituisce 1 e i ricaricamenti del servlet nel mio browser lo aumentano di più. Il problema è con la mia comprensione di come funzionano i bean di sessione senza stato e non con le librerie o il server delle applicazioni, ovviamente. Qualcuno può darmi un semplice esempio di tipo Hello World di un bean di sessione senza stato che si comporta in modo diverso quando lo si cambia in stateful?