- PR -

Stateful SessionBean のクライアントについて

1
投稿者投稿内容
eiji
常連さん
会議室デビュー日: 2003/07/23
投稿数: 32
投稿日時: 2004-06-09 14:31
ステートフルセッションBean は、EJBクライアント毎に、値を保持できると思っていますが、実際にどのようにクライアントに紐付けられるのかが、よく理解できません。

調べていると、Webアプリケーションでは、セッションと同様、ブラウザ毎に割り当てられるような記述を見つけたりもしましたが、この認識であっているのでしょうか?
クライアント→Servlet→EJB の呼び出し方だと、ServletがEJBクライアントだと思ったりもするのですが。。。
また、単純なJavaアプリの場合はどうなるのでしょうか?

セッション機構のアーキテクチャーを解説したサイトは多々あるのですが、
ステートフルセッションBeanのでは、アーキテクチャーは見つけれませんでした?
このあたりご教授いただけたら、幸いです。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 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();
ですね。
eiji
常連さん
会議室デビュー日: 2003/07/23
投稿数: 32
投稿日時: 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
が作成され、ゴミとして、どんどん増えていくのでしょうか?

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-06-09 16:34
remove() を呼びださないでおいたらゴミが残ります。
セッションビーンのキャッシュがあふれて大量に永続化が行われてパフォーマンス上大変問題になります。

あと、InitialContext はちゃんと close() しましょう。サーブレットの init で home を取得しておいて必要に応じて create() するのが良いでしょう。
eiji
常連さん
会議室デビュー日: 2003/07/23
投稿数: 32
投稿日時: 2004-06-09 16:42
ご指摘、ありがとうございます。

Webアプリケーションの場合、ステートフルセッションBeanを何に紐つけるのかは、
Handleをどのスコープにセットして、使用するかに左右されるのですね。
ありがとうございます。

1

スキルアップ/キャリアアップ(JOB@IT)