新SCA仕様、Assembly Model Specification Extensions for Event Processing and Pub/SubはSCAアセンブリモデルのためのイベント処理とPub/Sub拡張である。
- イベント処理は、イベントもしくはイベントオブジェクト/リプレゼンテーションの削除、生成、読込、変換といった処理のパフォーマンス演算を行う。イベント処理コンポーネントは、イベントメッセージを生成し、他のイベント処理コンポーネントに配布することによって情報をやりとりしている。さらに、イベント処理コンポーネントはSCAの標準的なサービスイノベーションの仕組みを利用して他のSCAコンポーネントと相互作用することができる。
- パブリケーションとサブスクリプション (Pub/Sub)はイベント提供コンポーネントと消費コンポーネントを体系づける特別な方式だ。イベント消費に注目するコンポーネントは、インタフェースよりもサブスクリプションを使って自身の注目を定義する。複数のサブスクライバは同じイベントを受信する。
このイベント処理仕様は、コンポーネントを組み合わせて実現する方式で、サービスインタフェースより疎結合なものになっている。各通信終端上のコンポーネントに対する要件は少ない。事実上、イベント処理ではプロデューサとコンシューマとの間で共有するのはイベントタイプだけである。Pub/Subの利用によって、まさに疎結合を実現しているのだ。この方式では、プロデューサはどのコンシューマーとも直接はつながらない、代わりにプロデューサは論理的な仲介者(Pub/Subエンジン)を介してコンシューマとつながる。
SCAでは、イベントプロデューサはチャネルと呼ばれるサードパーティを介してイベントコンシューマとリンクすることができる。この際、プロデューサにターゲットとなるチャネルを設定し、コンシューマーにリソースとなるチャネルを設定する。プロデューサは、ターゲット属性内にある1以上のターゲットURIリストによって、メッセージがどこに送られるか示す。コンシューマはソース属性内にある1以上のソースURIリストによって受信したメッセージの発信元を示す。
チャネルは新しいSCAの機能で、イベントプロデューサの集合と、イベントコンシューマの集合の接続に用いられる。チャネルは多数のプロデューサからイベントを受けることができ、さらにそれらのイベントをチャネルにサブスクライブしているコンシューマに送ることができる。チャネルは個別のプロデューサ、もしくはコンシューマに独立に存在する。チャネルがコンシューマ要素を1つだけ持つ場合、プロデューサが送信するイベントの入力先となる"in"として振舞う。チャネルがプロデューサ要素を1つだけ持つ場合、サブスクライバが受信するイベントの出力元となる"out"として振舞う。チャネルに、受信すべきイベントセットを示すフィルタを設定してもよい。フィルタにイベントがマッチしない場合、イベントは捨てられる。
チャネルはドメインレベル、もしくは実装に用いられるコンポジットに存在することができる。ドメインレベルにあるチャネルはコンポジション階層内の任意のレベルのプロデューサのターゲットになることができる。又、チャネルはコンポジション階層内の任意のレベルのコンシューマのソースとなることができる。こういったプライベートチャネルは、チャネルと同じコンポジットに存在するプロデューサ専用のターゲットとなることができる。プライベートチャネルはチャネルと同じコンポジットに存在するコンシューマ専用のターゲットになることができる。
グローバルチャネルや、プライベートチャネルといったチャネル区分は、必要であれば、アセンブラがイベントを交換するためにコンポーネントセットを制御することを許可する。グローバルチャネルのプロデューサやコンシューマは、ドメインレベルに存在し、いつでもデプロイメントアクションによって追加や削除が可能であり、事実上制御されていないのである。プライベートチャネルは制約のついたプロデューサやコンシューマの集合を持つ。つまり、これら集合はコンポジットコンテナが生成される時に、アセンブラによって決定される。
コンポーネントによるメッセージの消費、提供のサポートは、コンシューマ(consumer)もしくはプロデューサ(producer)タグをコンポーネント定義に追加することで実現する。コンポーネント要素は0以上のコンシューマ要素を子要素として持つ。設定可能なコンシューマは実装によって定義される。同様に、コンポーネント要素も0以上のプロデューサ要素を子要素として持ち、設定可能なプロデューサは、実装によって定義される。
SCA上のイベントは、自身と関連するイベントタイプを持つ。イベントタイプは一意のイベントタイプ名によって識別される。イベントは自身に関連するメタデータを持たなくてもよい。例えば、SCAではない、あらかじめ存在するイベントソースから生成されたイベントのケースが挙げられる。SCAはXML用語で言うところのイベントタイプ正規化表現や、XMLスキーマ用語で言うところのイベント形状を持つ。このSCAイベント形状はXMLインフォセットによって記述可能で、XMLスキーマで記述せずに、他形式のシステムを用いることも可能である。SCAのイベントはXMLではないワイヤフォーマットを持つことができる。イベントはプログラミング言語特有の表現を持つこともできる。言語特有のフォーマットとXML間のマッピングの詳細はSCA実装言語仕様によって定義される。
SOAとEDAの融合継続と、今回のイベントサポート紹介で、SCAはSOAプログラミングモデルにおける最先端のポジションを強固にする。