繁体   English   中英

使用有状态会话bean(EJB)

[英]Working with stateful session beans (EJB)

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

谢谢

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

更新感谢@Gimby:

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

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

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

然后检查Bean是否为null或不为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时,您将创建它并将其添加到会话中,然后将其添加到会话中,然后将其添加到会话中,等等。

希望有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM