【问题标题】:Working with stateful session beans (EJB)使用有状态会话 bean (EJB)
【发布时间】:2015-03-12 06:44:29
【问题描述】:

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

谢谢

【问题讨论】:

标签: java servlets ejb stateful-session-bean session-bean


【解决方案1】:

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

感谢@Gimby 更新:

关键是“客户端”(Web 应用程序本身在 这种情况下)通过粘贴来保持对有状态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 时,你将创建它并将其添加到会话中,第二次,第三次,...等等,你将把它存储在会话中。

希望有所帮助。

【讨论】:

  • 关键点是“客户端”(在这种情况下是 Web 应用程序本身)通过将有状态 bean 粘贴在会话中来保持对有状态 bean 的引用,从而使有状态 bean 在服务器端保持活动状态.
  • @Gimby 这正是我试图在我的回答中展示的内容。
  • 我知道而且我没有抱怨(但我忘了投票,对此感到抱歉);我只是添加了一些背景故事,以便在您的 HOW 中添加一个 WHY。 IMO 非常重要,尤其是因为 JEE 教程对它的解释很差。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 2013-04-30
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
相关资源
最近更新 更多