[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 メーリングリストの案内