我最近在ejb中了解了有状态和无状态会话bean。我可以毫无问题地与无状态会话bean一起工作(创建了几个应用程序),但我发现很难用有状态会话bean实现一个应用程序。
这是我的情景: 客户可以使用ID登录并在他/她的帐户中进行交易。我想将id保存到登录servlet本身的会话bean中,这样我就可以从会话中检索id来执行事务。
我知道如何使用httpSessions而不是使用这些ejb会话(有状态bean)。请指导,我想将帐户ID保存到会话(ejb有状态会话)并将其检索回另一个servlet。
我使用过httpSessions,下面是我的代码:
HttpSession session=request.getSession();
session.setAttribute("accountID", accountid);
但以上是正常会话,我如何使用帐户会话bean来保存id并检索它。
谢谢
答案 0 :(得分:4)
请参阅本教程here,它创建一个简单的有状态会话Bean(EJB)并在Web应用程序上下文中使用它
感谢@Gimby:
关键是“客户”(Web应用程序本身) 这种情况)通过粘贴它来保持对有状态bean的引用 会话,它使有状态bean在服务器端保持活动状态。
您需要做的第一件事就是尝试从HttpSession获取EJB,如下所示:
MyBean bean = (MyBean) request.getSession().getAttribute("myBean");
然后检查bean是否为null,如果它的null创建一个EJB并将其添加到会话中,如下所示:
if(bean == null){
// EJB is not present in the HTTP session
// so let's fetch a new one from the container
try {
InitialContext ic = new InitialContext();
bean = (MyBean)
ic.lookup("java:global/MyBean");
// put EJB in HTTP session for future servlet calls
request.getSession().setAttribute(
"myBean",
bean);
} catch (NamingException e) {
throw new ServletException(e);
}
}
这样第一次你需要bean时你会创建它并将它添加到会话中,第二个,第三个......等等,你将把它存储在会话中。
希望有帮助。