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)
- ∋ ConversationStack(drill down conversation)
- ∋ ConversationStackMap(concurrent conversation)
- こんな感じ?…ややこしいそうだなぁ…
- うぅん…
と、いうわけです(?)。漠然としたまま思索終了です…orz