CONVERSATION SCOPE

S2のソースコードを読んでいます。S2には外部コンテキスト(ExternalContext)という、サーブレットコンテナ上のコンテキスト(Application、Session、Request、Responseを含む)を抽象化したものがあります。いまのところほぼ100%サーブレットコンテナが対象だと思いますが、いろいろ応用も考えられるし、Mockを使ったテストとかには便利そう。
ところで“Spring WebFlow”というWEB画面の遷移を制御/管理するフレームワーク(今度こそ1.0が出そう…^^;;)があります。これを解説した“Expret Spring MVC and Web Flow”*1という書籍のなかで『Conversation Scope*2という言葉が出てきました。なるほど、言い得て妙だなぁと思ったのですが、どういうものかというと「生存期間がRequestより長く、Sessionより短いスコープ」という意味です。具体的に言えば、ウィザード的な閉じた画面遷移系とか、ドリルダウンした状態で使える閉じた画面遷移系のスコープのようです。
S2のExternalContextに、Conversation Scope があったらどうなるだろう? と漠然と考えてみました。

  • Conversation Scope Context

Application > Session > Conversation > Request/Response

    • Sessionに固有のキー名で、ConversationMapみたいなのを持つのかなぁ
    • 親の遷移系から子の遷移系に移った場合、戻った時の為に、親の遷移系の情報は保持する必要があるなぁ…スタックか?…Continuationか?
    • そうするとSessionスコープもルートConversationスコープみたいに考えれば、汎用的にConversatoinスコープで扱えるかなぁ…Spring WebFlowはどうやってるのだろう…をコードを覗いてみようかなぁ…
    • でも、ポートレットみたいに、画面上に複数の独立したパネルがあって、各パネルがそれぞれ独立したコンテキストを持っている場合や、さらに同時並行にAjaxしちゃうような場合にも使いたいなぁ…これでは、スタックだけじゃだめだなぁ…
    • Session
      • ∋ ConversationStackMap(concurrent conversation)
        • ∋ ConversationStack(drill down conversation)
          • ∋ ConversaionMap(conversation scope context)
    • こんな感じ?…ややこしいそうだなぁ…
    • うぅん…

と、いうわけです(?)。漠然としたまま思索終了です…orz

*1:WebFlow自体の解説は少ないのですが…

*2:または Conversational Scope