Seam イベントモデル

Seamではコンポーネント疎結合であることを強く意識したモデルになっています。それを支えるのが「イベント」という考え方です。SeamではJSFのUI操作はイベントとして扱われ、コンポーネントにそれが伝達されます。

@Inや@Outはコンポーネント間の接続点であり、何らかのイベントが発生すると、コンポーネント間をデータが伝わっていく。このモデルには、①コンテキスト依存、②動的、③双方向という特徴があります。

fine-grained, loosely-coupled components in a fine-grained eventing model

これを実現するため、Seamには、コンポーネントの依存性注入を超えて、外部からのイベントに呼応して自ら外部に対してデータを発信するというアウトジェクション(Outjection)という機能が備えられています。

ここで、インジェクションをオブジェクトの参照渡しという点だけに着目していると「なぜSeamでアウトジェクションが必要なのか」がわかりにくいですが、アウトジェクションが@Outという接続点に対してのイベントの送出なのだと理解すると、それは従来の「静的」「片方向」のインジェクションとは違うことがおわかりになると思います。

イベントですから、それは「参照」を渡すだけではなく、変化のトリガーを伝えている。何かが変わったということを伝えるには、実行時にイベントを発火する必要があるのです。