コンポーネントの疎結合

EJBにはStateful SessionBean(SFSB)というものがありますが、これを使いこなすには2つの難点があります。SFSBは、そもそもConversationを保持するコンポーネントとしてEJB仕様書には定義されていますが、これらの理由から使い勝手が悪いのです。

  • シングルスレッド向き。排他制御はクライアントの責任
  • ライフサイクル管理。Create/Removeはクライアントの責任

Seamは上の問題をConversation contextを導入することで一気に解決しました。クライアントはSFSBにアクセスするのに、Conversation context上の変数名を介して間接的にアクセスすることができます。SeamWebブラウザのWindowやタブごとにサーバー内にConversationを用意してくれますから、排他制御の必要はありません。Conversation contextの変数にバインドされたSFSBのCreate/RemoveはSeamが面倒みてくれます。

@Inと@Out、イベントモデル、そして排他制御とライフサイクル管理。これらが組み合わさって、クライアントはSeamコンポーネントを非常に気軽に使うことができます。そして、Seamコンポーネント間も依存関係は動的にSeamが解決してくれますから、コンポーネント間の独立性も高いのです。

参考: Seam Component Model