[Seasar-user:14803] Re: [Teeda] 二重サブミットについて
松崎 学
[E-MAIL ADDRESS DELETED]
2008年 6月 24日 (火) 17:12:37 JST
小林さん
松崎です。いつもお世話になっております。
ありがとうございます!
いただいたソースでしばらく凌ぎます。
お忙しいところ申し訳ありませんが、修正バージョンよろしくお願い致します。
On Tue, 24 Jun 2008 16:30:32 +0900
Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> wrote:
> 小林 (koichik) です.
>
> Date: Tue, 24 Jun 2008 13:33:47 +0900
> From: 松崎 学 <[E-MAIL ADDRESS DELETED]>
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:14797] Re: [Teeda] 二重サブミットについて
>
> > 03_server2.logと04_server2.logの間のログを添付します。
>
> ありがとうございます.原因が分かりました.
> Teeda では windowId は static に持っている
> カウンタをインクリメントしながら割り当てています.
> このカウンタは 0 から始まるため,複数のサーバで
> 同じ値が割り当てられることがあります.
>
> 今回の場合,
>
> > 01_server1.log ⇒ 初期表示
>
> でサーバ 1 で windowId=1 が割り当てられ,
>
> > 3. 呼び出し元画面でAjax検索。
>
> こちらではサーバ 2 で windowId=1 が割り当てられて
> しまい,Ajax 呼び出しのサブアプリケーションが
> ポップアップでの検索のサブアプリケーションとは
> 異なることから,それまでのサブアプリケーション
> スコープが消されてしまったというのが原因です.
>
> サーバ起動直後に一連の操作を行い,ポップアップの
> 初期表示と元画面での Ajax 検索が別のサーバに
> 割り当てられれば再現するはずです.
>
> スティッキーが効いていれば同じ HTTP セッションは
> 同じサーバに割り当てられるので windowId が重複
> することもないため,この問題に遭遇した人が
> いなかったということなのでしょう.
>
> 対策として windowId には乱数を使い,HTTP セッション内で
> 重複がないかチェックするようにしたいと考えています.
> 他にも HTTP セッションが複数のサーバで処理された
> 場合にウィンドウ単位の情報を失う危険性があるので,
> 一通り見直してから Teeda 1.0.13-sp2-rc1 を出します.
>
> とりあえず,カウンタの初期値を currentTimeMillis() に
> したソースを添付するので,これをソースフォルダの
> javax.faces.internal パッケージに置いて凌いでください.
> サーバの起動時間が 1 秒違えばウィンドウ 1000 枚は
> 重複しないはずです.
> # ひどい対策だ.(^^;
>
>
> --
> <component name="koichik">
> <property name="fullName">"Koichi Kobayashi"</property>
> <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
> <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
--
松崎 学 <[E-MAIL ADDRESS DELETED]>
Seasar-user メーリングリストの案内