コンポーネントの疎結合
EJBにはStateful SessionBean(SFSB)というものがありますが、これを使いこなすには2つの難点があります。SFSBは、そもそもConversationを保持するコンポーネントとしてEJB仕様書には定義されていますが、これらの理由から使い勝手が悪いのです。
- シングルスレッド向き。排他制御はクライアントの責任
- ライフサイクル管理。Create/Removeはクライアントの責任
Seamは上の問題をConversation contextを導入することで一気に解決しました。クライアントはSFSBにアクセスするのに、Conversation context上の変数名を介して間接的にアクセスすることができます。SeamはWebブラウザのWindowやタブごとにサーバー内にConversationを用意してくれますから、排他制御の必要はありません。Conversation contextの変数にバインドされたSFSBのCreate/RemoveはSeamが面倒みてくれます。
@Inと@Out、イベントモデル、そして排他制御とライフサイクル管理。これらが組み合わさって、クライアントはSeamのコンポーネントを非常に気軽に使うことができます。そして、Seamコンポーネント間も依存関係は動的にSeamが解決してくれますから、コンポーネント間の独立性も高いのです。