使用有状态会话bean(EJB)

时间:2015-01-14 06:20:52

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

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

谢谢

1 个答案:

答案 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时你会创建它并将它添加到会话中,第二个,第三个......等等,你将把它存储在会话中。

希望有帮助。