ステートのマネジメントはWebアプリケーションデベロッパ達にとっては常に挑戦的な課題であった。リクエストレベルの代わりにアプリケーションレベルにおいてインタラクションを処理するのはカンバセーション(会話)が管理するものである。Jacob Orshalick氏はSeamのデモブッキングの一例のホテルブッキングアプリケーションを用いて、ネスト化されたカンバセーションがどのように働くのかを述べた(source)。
Seamのカンバセーションモデルは継続性に簡易化されたアプローチを提供する。もしあなたが継続サーバの概念に馴染みがあれば、それらがシームレスなバックボタン化と自動ステートマネジメントを含めた能力を提供することは気付いているだろう。ユーザセッションには単に実行時間のステートのスナップショットである継続性がたくさんあり、またその継続性はいつでも立ち戻ることが可能である。もしあなたがこの概念に親しみを感じれば心配無用でSeamがそれを簡 単にしてくれる。
これは単にこのモデルの一部でありSeamは更にカンバセーションのネスト化も可能にする。
カンバセーションのネスト化はオリジナルか、もしくは外部のカンバセーション上にスタックされたステートコンテナを提供する。ネスト化されたカンバセーションのステートコンテナに設定されたオブジェクトは、どれももとのカンバセーションのステートコンテナ内でアクセス可能なオブジェクトに影響を及ぼさない。またこれはそれぞれのネスト化されたカンバセーションが独自のユニークステートを保持するのを可能にする。
そしてOrshalick氏はネスト化されたカンバセーションを定義する方法と同様にそれが適切に片付けられたかどうかを確かめる方法を解説した。 JBoss Developer Studioを使用してSeamのブッキング例を拡張するという一例は、ネスト化されたカンバセーションの記述例を結論付ける。
Seamに関してJacob Orshalick氏が誤解を解いてきたのはネスト化されたカンバセーションのみではなく、彼はまたカンバセーションタイムアウトに関するトピックに関しても論じた(source)。
カンバセーションタイムアウトは一般的に誤解されているSeamの概念です。私はそのカンバセーションタイムアウトは機能しない!ということを主張している掲載をSeamフォーラムで良く目にします。さて、それは実はただセマンティックを理解すれば機能するのです。
ネストカンバセーションと同じ例を使用して、Orshalick氏は複数のカンバセーションに対応する時はバックグラウンドのカンバセーションのみに影響があることを説明した。これを踏まえてフォアグラウンドのカンバセーションはセッションそのものがタイムアウトした時にタイムアウトする。
Orshalick氏の出した結論は下記のとおりである。
Seamはそのシンプルなカンバセーションモデルを通してステートマネジメントにとても魅力的なアプローチを提供しています。マルチウィンドウオペレーションとバックボタン化を含めた過去にデベロッパたちを苦戦させた複雑な問題は現在シームレスに処理されているのです。原文はこちらです:http://www.infoq.com/news/2008/01/seam-conversations