【发布时间】:2016-09-08 11:58:06
【问题描述】:
我创建了有状态、无状态和单例 bean 类,并尝试访问它们两个不同的 servlet。并在 JBoss 服务器上运行项目。
当我从每个 servlet 访问有状态 bean 时,将创建两个不同的 bean 对象,并为它们保留不同的状态(数据)。但是无状态 bean 对象在两个 servlet 之间共享。单例 bean 的行为方式也与无状态 bean 相同。
我的问题是为什么有状态和无状态 bean 的行为方式相反? session bean的生命周期和servlet的生命周期一样吗?
FirstServlet.java
@WebServlet("/FirstServlet")
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB
StatelessBean statelessBean;
@EJB
StateFullBean statefulBean;
@EJB
SingletonBean singletonBean;
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String message = "Beans not injected.";
String beanType = request.getParameter("beanType");
if ("Stateless".equals(beanType)) {
if (statelessBean != null) {
message = statelessBean.getHits();
} else {
message = "Stateless bean not injected.";
}
}
if ("Stateful".equals(beanType)) {
if (statefulBean != null) {
message = statefulBean.getHits();
} else {
message = "Stateful bean not injected.";
}
}
if ("Singleton".equals(beanType)) {
if (singletonBean != null) {
message = singletonBean.getHits();
} else {
message = "Singleton bean not injected.";
}
}
response.setContentType("text/html");
response.getWriter().print("<h1>" + message + "</h1>");
}
}
同样,我又创建了一个 servlet DemoServlet.java。
StateFullBean.java
@Stateful
public class StateFullBean{
int hits=0;
public String getHits() {
hits++;
return "StateFullBean number of hits " + hits;
}
public StateFullBean() {
System.out.println("StateFullBean created.");
}
}
StatelessBean.java
@Stateless
public class StatelessBean{
int hits=0;
public String getHits() {
hits++;
return "StatelessBean number of hits " + hits;
}
public StatelessBean() {
System.out.println("StatelessBean created.");
}
}
SingletonBean.java
@Startup
@Singleton(name="SingletonBean")
public class SingletonBean {
int hits=0;
public SingletonBean() {
System.out.println("SingletonBean created.");
}
public String getHits() {
hits++;
return "Singleton bean number of hits " + hits;
}
}
我是否遗漏了代码中的某些内容?
【问题讨论】:
标签: ejb