0

私は最近、ejb のステートフルおよびステートレス セッション Bean について学びました。問題なくステートレス セッション Bean を使用できます (いくつかのアプリケーションを作成しました) が、ステートフル セッション Bean を使用してアプリケーションを実装するのは難しいと感じています。

これが私のシナリオです: 顧客は ID を使用してログインし、自分のアカウントで取引を行うことができます。ID をログイン サーブレット自体のセッション Bean に保存して、セッションから ID を取得してトランザクションを実行できるようにしたいと考えています。

httpSessions の操作方法は知っていますが、これらの ejb セッション (ステートフル Bean) の操作方法は知っていません。ガイドしてください。アカウント ID をセッション (ejb ステートフル セッション) に保存し、別のサーブレットで取得したいと考えています。

私は httpSessions を使用しました。以下は私のコードです:

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

しかし、上記は通常のセッションです。アカウント セッション Bean を使用して ID を保存し、取得するにはどうすればよいですか。

ありがとうございました

4

1 に答える 1

4

こちらのチュートリアルを参照してください。単純なステートフル セッション 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 が必要になったときに作成してセッションに追加し、2 回目、3 回目、... などとセッションに保存します。

役立つことを願っています。

于 2015-01-14T08:30:03.977 に答える