使用有状态会话 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 时将创建它并将其添加到会话中,第二次、第三次……等等,您将把它存储在会话中。
希望对您有所帮助。
我最近了解了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 时将创建它并将其添加到会话中,第二次、第三次……等等,您将把它存储在会话中。
希望对您有所帮助。