- PR -

セッションBeanについて

投稿者投稿内容
sumin
ベテラン
会議室デビュー日: 2003/07/17
投稿数: 93
投稿日時: 2003-07-18 10:37
スミンです。
本題とはずれてしまいますが、私のつまらない知識と経験から言うと、
 ukさんのステートフルビーンについての投稿の引用--------------------------
  「シリアライズ化される」というと、後の呼び出しが待たされるイメージですが、
別のインスタンスを割り当てればいいことですね。
 ------------------------------------------------------------------------
これは別のインスタンスを割り当てるのではなく順番待ちになるのではないかなと思いますが。でないとEJBコンテナーに同じセッション情報をもつ、でも付加情報のステータスは違うステートフルビーンが複数存在する事になりますね?これはPassivationとActivationが発生する時、何を取るかに迷うことになりそうですが。。以上、知識ではなくただの感からのご意見でした。

 にっくさんの投稿からの引用---------------------------------------------
例外は、reentrantコール(Beanが自分のEJBObjectを呼び出す)か、ブラウザの
ボタンの2度押しなどです。これらの場合、RemoteExceptionが発生します。
-----------------------------------------------------------------------

私の経験によりますと、ボタンを2度押した場合はRemoteExceptionを返すのではなくただ2回のトランザクションが発生しました。そのため二重購入が発生したしまったと言う失敗談がありますが。。ご意見お願いします。

以上、宜しくお願いします。
にっく
会議室デビュー日: 2003/03/31
投稿数: 10
投稿日時: 2003-07-18 11:15
suminさん、

>私の経験によりますと、ボタンを2度押した場合はRemoteExceptionを返すのではなく>ただ2回のトランザクションが発生しました。そのため二重購入が発生したしまった>と言う失敗談がありますが。。ご意見お願いします。

正確に言いますと、

●Stateful SessionBeanを利用し、1つのセッション/ブラウザに
1つのBeanインスタンスを割り当てている
●ユーザがボタンを1回押し、トランザクションが実行中である

この状況で2回目を押すと、Stateful SessionBeanのインスタンスへの
マルチスレッド・アクセスとなり、RemoteExceptionが発生します。

一方、1回目のトランザクションが終了してしまっている場合、もしく
はStateless SessionBeanを使用している場合は、2度押ししても
RemoteExceptionは発生しません。

よって、基本的には、トークンなどの「2度押し防止策」が別途必要に
なります。
sumin
ベテラン
会議室デビュー日: 2003/07/17
投稿数: 93
投稿日時: 2003-07-18 11:54
なるほど!!
確かに私が使っていたのはステートレスのビーンでした。
まさにおっしゃる通りです。

ご高見ありがとうございました。

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