4

Web アプリケーションでステートフル EJB とステートレス EJB を使用することについて、多くの議論があることは知っています。

ショッピング カートは最も一般的なユース ケースです。Oracle の Java EE の例では、公式ドキュメントでもショッピング カートが頻繁に使用されています。

ここで、stackoverflow で、JavaEE のショッピング カートのジレンマのような多くの興味深い回答を見つけました。

わかりました... SFSB は、企業の複雑なシナリオに適しています。たとえば、それらを他のアプリケーションと共有し、JSF/Web クライアントだけでなく利用できるようにする場合などです。

しかし... おじいちゃんの電子商取引 Web サイトを開発しているだけの場合は、HttpSession / SessionScoped cdi-managed Bean に固執し、SLSB でビジネス メソッドを記述します。SLSB の方が効率的であるなどの理由で...

ただし、私はまだ学習と発見の段階にあるので、単純なショッピング カートを作成するために、自分で SFSB を試してみたいと思います。

@Stateful ショッピング カート ejb インターフェースの JNDI 取得インスタンスを HttpSession に保存することを提案する興味深いチュートリアルを見ました。これは、Web クライアントが最初にそれを必要としたときに、Web セッション中に通常どおり使用することです。私の JSF プレゼンテーション レイヤーでは、@SessionScoped @Named Bean (これをShopControllerと呼びましょう) があり、その初期化でステートフル ejb の 1 つのインスタンスをインスタンス変数に格納するとします。

@SessionScoped CDI アノテーションを付けることで、@Stateful Bean を http セッションに直接バインドすることは可能でしょうか。

上記のように機能しますか?CDI は Web セッションごとに 1 つの SFSB を作成しますか?

4

2 に答える 2

6

@SessionScoped@Named@Stateful用、@EJB豆用です。私が間違っていなければ、1 つの Bean に両方のアノテーションを付けることはできません。を使用する場合は、 Bean に で注釈@Statefulを付けてから、. このようなもの:ShoppingCart@EJB@LocalShopController

@Named
@SessionScoped
public class ShopController {
    ...
    @EJB
    private ShoppingCart cart;
    ...

    // Getters and Setters
}

@Local
@Stateful
public class ShoppingCart {
    ...
}
于 2014-04-01T10:12:56.073 に答える