- - PR -
Stateful SessionBean のクライアントについて
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-06-09 14:31
ステートフルセッションBean は、EJBクライアント毎に、値を保持できると思っていますが、実際にどのようにクライアントに紐付けられるのかが、よく理解できません。
調べていると、Webアプリケーションでは、セッションと同様、ブラウザ毎に割り当てられるような記述を見つけたりもしましたが、この認識であっているのでしょうか? クライアント→Servlet→EJB の呼び出し方だと、ServletがEJBクライアントだと思ったりもするのですが。。。 また、単純なJavaアプリの場合はどうなるのでしょうか? セッション機構のアーキテクチャーを解説したサイトは多々あるのですが、 ステートフルセッションBeanのでは、アーキテクチャーは見つけれませんでした? このあたりご教授いただけたら、幸いです。 |
|
投稿日時: 2004-06-09 15:13
WebアプリケーションのクライアントにステートフルセッションBean をひもつけるときはシリアライズ可能なハンドルをセッションにセットします。
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/ejb/EJBObject.html#getHandle() 使うときは ((AnRemoteInterface)((Handle)session.getAttribute("theStatefulSB")).getEJBObject())).doSomething(); ですね。 |
|
投稿日時: 2004-06-09 16:27
インギさん
ありがとうございます。 ということは、handleをセットする事なく、 Servlet内で、 InitialContext ejb_ctx = new InitialContext(); Object obj = (Object)ejb_ctx.lookup("ejb/Test"); TestHome ejb_home = (TestHome)javax.rmi.PortableRemoteObject.narrow(obj, TestHome.class); で、EJBを使用した場合は、サーブレットが呼びだされる毎に、EJB が作成され、ゴミとして、どんどん増えていくのでしょうか? |
|
投稿日時: 2004-06-09 16:34
remove() を呼びださないでおいたらゴミが残ります。
セッションビーンのキャッシュがあふれて大量に永続化が行われてパフォーマンス上大変問題になります。 あと、InitialContext はちゃんと close() しましょう。サーブレットの init で home を取得しておいて必要に応じて create() するのが良いでしょう。 |
|
投稿日時: 2004-06-09 16:42
ご指摘、ありがとうございます。
Webアプリケーションの場合、ステートフルセッションBeanを何に紐つけるのかは、 Handleをどのスコープにセットして、使用するかに左右されるのですね。 ありがとうございます。 |
1
