0

我最近了解了 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并检索它。

谢谢

4

1 回答 1

4

请在此处参考本教程,它创建一个简单的有状态会话 Bean (EJB) 并在 Web 应用程序上下文中使用它

感谢@Gimby 更新:

关键是“客户端”(在这种情况下是 Web 应用程序本身)通过将有状态 bean 粘贴在会话中来保持对有状态 bean 的引用,从而使有状态 bean 在服务器端保持活动状态。

您需要做的第一件事是尝试从 HttpSession 获取 EJB,如下所示:

MyBean bean = (MyBean) request.getSession().getAttribute("myBean");

然后检查 bean 是否为空,如果它为空,则创建一个 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 时,您将创建它并将其添加到会话中,第二次、第三次……等等,您将把它存储在会话中。

希望有帮助。

于 2015-01-14T08:30:03.977 回答