我是 EJB 的新手,所以请不要介意这个问题有什么愚蠢的。
我怀疑有人可能有希望解决。
我有以下有状态的 Bean:
@Stateful
public class SessionBean implements SessionBeanRemote {
private int count = 0;
@Override
public int getCount(){
count++;
return count;
}
}
这是调用 Bean (Servlet) 的客户端
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
InitialContext ctx;
HttpSession session = null;
SessionBeanRemote obj;
try {
if (session.getAttribute("myBean") == null) {
ctx = new InitialContext();
obj = (SessionBeanRemote) ctx.lookup("SessionBean/remote");
session.setAttribute("myBean", obj);
} else {
obj = (SessionBeanRemote) session.getAttribute("myBean");
}
System.out.println(obj.getCount());
} catch (NamingException ex) {
Logger.getLogger(TestServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
现在我想知道是否最终是 HttpSession 必须持有会话 bean,那么为什么要使用 EJB,为什么不直接在会话中存储我们想要的任何内容,而不是先将它存储在会话 bean 中,然后将该 bean 存储在会议。
而且我想知道是否可以说我将@Stateful注释更改为@Stateless,然后在客户端执行相同的代码并将bean存储在会话中,然后我也可以从会话中提取相同的bean,那么有什么区别在无状态和有状态之间,我知道当新的查找完成时,有可能将相同的无状态 bean 返回给我,而与有状态 bean 一样,当我们进行查找时它总是新的。但就是这样吗?
PS 正如我之前提到的,我是 EJB 的新手,所有的疑问都是基于我从一些在线教程和一些关于 SO 的问题中了解到的。我也尝试在本地运行它,但不幸的是我无法在 GlassFish 上部署应用程序,因为出现以下错误“加载应用程序时出现异常:EJB 容器初始化错误”。我正在尝试调查它。