[Seasar-user:14846] Re: [Teeda] 二重サブミットについて

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 6月 27日 (金) 18:00:06 JST


小林 (koichik) です.

Date:    Tue, 24 Jun 2008 17:12:37 +0900
From:    松崎 学 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:14803] Re: [Teeda] 二重サブミットについて

> お忙しいところ申し訳ありませんが、修正バージョンよろしくお願い致します。

SNAPSHOT をデプロイしたのでご確認ください.

http://maven.seasar.org/maven2-snapshot/org/seasar/teeda/teeda-core/1.0.13-sp2-SNAPSHOT/teeda-core-1.0.13-sp2-20080627.082855-5.jar
http://maven.seasar.org/maven2-snapshot/org/seasar/teeda/teeda-extension/1.0.13-sp2-SNAPSHOT/teeda-extension-1.0.13-sp2-20080627.082855-5.jar
http://maven.seasar.org/maven2-snapshot/org/seasar/teeda/teeda-ajax/1.0.13-sp2-SNAPSHOT/teeda-ajax-1.0.13-sp2-20080627.082855-5.jar
http://maven.seasar.org/maven2-snapshot/org/seasar/teeda/teeda-tiger/1.0.13-sp2-SNAPSHOT/teeda-tiger-1.0.13-sp2-20080627.083235-5.jar


ウィンドウ ID に乱数を使うようにはしましたが,
結局複数のウィンドウからのリクエストを異なった
サーバで並行に処理すると,情報を失う可能性が
あります.
現在の Teeda はサブアプリケーションスコープ等の
情報を次のような構造の Map で管理しています.

subapp = {
  null = {key=value, key=value,...}
  wid1 = {key=value, key=value,...}
  wid2 = {key=value, key=value,...}
}

subapp という大きな Map が HTTP セッションに
保存され,その中にウィンドウごとの Map が
保持されます.
もし複数のウィンドウからのリクエストを異なった
サーバで並行に処理すると,サーバ A では
デフォルトのウィンドウからのリクエストを処理して

subapp = {
  null = {key=AAAAA, key=BBBBB,...}
  wid1 = {key=value, key=value,...}
  wid2 = {key=value, key=value,...}
}

となり,サーバ B では wid1 のリクエストを
処理して

subapp = {
  null = {key=value, key=value,...}
  wid1 = {key=AAAAA, key=BBBBB,...}
  wid2 = {key=value, key=value,...}
}

となったりします.
リクエストの処理後,それぞれのサーバで
この Map がセッション情報に保存されると,
先に保存した方の変更が失われます.

そのため,やはりスティッキーを使用して
同じセッションに対するリクエストは常に
同じサーバで処理されるようにする方が無難です.

ウィンドウ Id を上位のキーとして,

wid1 = {
  page = {key=value, key=value,...}
  subapp = {key=value, key=value,...}
  redirect = {key=value, key=value,...}
}
wid2 = {
  page = {key=value, key=value,...}
  subapp = {key=value, key=value,...}
  redirect = {key=value, key=value,...}
}

のようにすることも考えたのですが,ウィンドウ数の
上限 (現在のデフォルトは 20 ) を管理するのが
難しく,それに対処しようとすると結局スティッキー
セッションが必要になってしまって本末転倒という
感じなので,現状のままにしたいと思います.


-- 
<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>



Seasar-user メーリングリストの案内