Ich gehe das Java EE 6-Tutorial durch und versuche, den Unterschied zwischen zustandslosen und zustandsbehafteten Session-Beans zu verstehen. Wenn zustandslose Session-Beans ihren Status zwischen Methodenaufrufen nicht beibehalten, warum verhält sich mein Programm dann so, wie es ist?
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++;
}
}
Der Kunde
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());
}
}
Ich hatte erwartet, dass getNumber jedes Mal 0 zurückgibt, aber es gibt 1 zurück, und das Neuladen des Servlets in meinem Browser erhöht es weiter. Das Problem liegt in meinem Verständnis der Funktionsweise zustandsloser Session Beans und natürlich nicht in den Bibliotheken oder dem Anwendungsserver. Kann mir jemand ein einfaches Beispiel für eine zustandslose Session-Bean geben, die sich anders verhält, wenn Sie sie in stateful ändern?