ステートフルEJBを使用したことはありません。ステートフルEJBがJavaクライアントで役立つ可能性があることを理解しています。
しかし、私は疑問に思います:どの場合にそれらをWebアプリケーションで使用するのですか?そしてどうやって?これらのステートフルBeanをセッションに入れる必要がありますか(ステートレスhttpのため)?
それは良い習慣ですか?(ステートフルとステートレスについてあまり議論せずに)
ステートフルEJBを使用したことはありません。ステートフルEJBがJavaクライアントで役立つ可能性があることを理解しています。
しかし、私は疑問に思います:どの場合にそれらをWebアプリケーションで使用するのですか?そしてどうやって?これらのステートフルBeanをセッションに入れる必要がありますか(ステートレスhttpのため)?
それは良い習慣ですか?(ステートフルとステートレスについてあまり議論せずに)
おかしなことに、これはその日のSFSBとWebアプリに関する2番目の質問ですが、このトピックは通常それほど一般的ではありません。
どちらの場合、それらをWebアプリケーションで使用しますか?
SFSBとWebアプリの従来の例は、ショッピングカートです。しかし同時に、あなたは。で同じことをすることができますHttpSession
。
理想的には、状態がプレゼンテーションロジックではなくビジネスロジックに関連している場合は、SFSBに入れる必要があります。しかし実際には、SFSBで簡単にできないことを提供しない限り、人々は通常SFSBに反対します(SFSBがもたらす複雑さのため)HttpSession
。ほとんどの場合、HttpSession
SFSBがなくても、デザインを微調整して情報をまたはデータベースに保存し、渡すことができます。しかし、それは最終的には設計の純度の問題です。
そしてどうやって?これらのステートフルBeanをセッションに入れる必要がありますか(ステートレスhttpのため)?
HttpSession
EJBはトランザクションコンポーネントであり、SFSBのパッシベーションとアクティブ化のための明示的なコールバックがあるため、EJBモデルはより豊富なモデルです。これには、SFSBを正しく使用する方法、特に(1)例外処理と(2)同時実行性、および(2)SFSBの削除とタイムアウトに関する複雑さが増します。詳細については、こちらの回答をご覧ください。
それらを使用する場合は、最初にSFSBを検索して、1つの新しいリモートインスタンスへの参照を取得する必要があります。次に、リクエスト間で再利用できるように、この参照をどこかに保存する必要があります。これは通常どこかHttpSession
にあります。つまり、SFSBを使用しても、完全に取り除くことはできません。
EJB2を使用すると、ハンドルと呼ばれるリモート参照をシリアル化して後で再利用できます。そうすれば、たとえばデータベースに保存することができましたが、それは見たことがありません。それがEJB3でまだ可能かどうかはわかりません。
それは良い習慣ですか?
すでに述べたように、EJBモデルの優れたコマンドを持っている場合にのみ、ではなく、なぜそれらを使用するのかを正確に理解していない限り、人々は通常それに対してアドバイスします。HttpSession
(たとえば、ビジネスサービスにWebフロントエンドとデスクトップクライアントを介してアクセスできる場合、SFSBは正当化される可能性があります)他の多くのフレームワークにはSFSBに似たものがなく、人々は依然としてそれらを使用して優れたアプリを作成できます。
PS:私はWebアプリでSFSBを使用しましたが、実際に使用するのは難しいかもしれませんHttpSession
が、最終的には機能しました。