使用有状态会话 bean (EJB)

Working with stateful session beans (EJB)

我最近了解了ejb 中的有状态和无状态会话bean。我可以毫无问题地使用无状态会话 bean(创建多个应用程序),但我发现很难用有状态会话 bean 实现应用程序。

这是我的场景: 客户可以使用 ID 登录并在 his/her 帐户中进行交易。我想将 id 保存到登录 servlet 本身的会话 bean 中,以便我可以从会话中检索 id 以执行事务。

我知道如何使用 httpSessions 但不知道如何使用这些 ejb 会话(有状态 bean)。请指导,我想将帐户 ID 保存到会话(ejb 有状态会话)并在另一个 servlet 中检索它。

我用过 httpSessions ,下面是我的代码:

HttpSession session=request.getSession();
session.setAttribute("accountID", accountid);

但是上面是正常的session,如何使用account session bean来保存id并取回。

谢谢

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

更新感谢@Gimby:

The key point being that the 'client' (the web application itself in this case) keeps a reference to the stateful bean by sticking it in the session, which keeps the stateful bean active on the server side.

您需要做的第一件事是尝试从 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 时将创建它并将其添加到会话中,第二次、第三次……等等,您将把它存储在会话中。

希望对您有所帮助。