ccm
#contents
CCM (CORBA Component Model)
CCM は CORBA のサーバーサイドのコンポーネントモデルを提供するとともに、CORBA 環境上に EJB のようなコンポーネント環境を構築するためのフレームワークを提供する。
コンポーネント
コンポーネントの定義には様々あり、一般的に「再利用可能なソフトウェアの単位」であると言われている。 M.Collins-Cope らにある定義では、以下の4つの要件を満たすものをコンポーネントと呼び、この定義が広く用いられているようである。
| 自己完備性/自己記述性 | 独立した機能単体として存在し、 宣言的にインターフェースが定義されている。また、動作や操作に 標準的な方法が定められており、そのためのメカニズムが明確に定義されている。 |
| 動的な機能追加、変更が可能 | コンポーネントの外部からプロパティやイベントなどの設定、変更ができる。また、そのための標準的な方法が与えられている。 |
| インターフェースの透明性 | インターフェース定義に基づいて、バイナリレベルでの連携方法が与えられている。 |
| 他のコンポーネントとの疎結合の支援 | 他のコンポーネント との直接的な通信経路を持たず、コンテナやアセンブリ環境などのフレームワークを介して接続される。 |
『 CORBA components が開く新しい分散環境 』 鈴木 純一/著, ドクター・ドブズ・ジャーナル日本語版 1999 年 4 月号、pp.150-158.
コンポーネントモデル
| Facet | コンポーネントのインターフェースを外部に公開することを示します。クライアントは、公開されたインターフェースをイントロスペクションによって獲得し、インターフェースがもつメソッドを呼び出すことができます。 |
| Receptacle | 他のコンポーネントがもつインターフェースを接続できることを示します。Receptacle のタイプとしては、一つのインターフェースを接続できる Simplex Receptacle と複数のインターフェースを同じ Receptacle に接続できる Multiplex Receptacle が存在します。 |
| Event Source | 特定のイベントを発行することを示します。イベント通知のタイプとしては、1対多の通知ができる Publisher と同時にひとつしか通知できない Emitter が存在します。 |
| Event Sink | 特定のイベントを受け取ることを示します。 |
| Attribute | コンポーネントが持つ属性を示します。通常の CORBA オブジェクトの属性と同じ意味を持っています。 |
CIDL のための追加されたキーワード
- component
- consumes
- emits
- eventtype
- finder
- getraises
- home
- import
- multiple
- primarykey
- provides
- publishes
- setraises
- typeid
- typeprefix
- uses
Deployment と Configuration のための XMLファイル
| Descriptor | 拡張子 |
|---|---|
| Component Package Descriptor: | .cpd |
| Component Implementation Descriptor: | .cid |
| Implementation Artifact Descriptor: | .iad |
| Component Interface Descriptor (CORBA Component Descriptor): | .ccd |
| Component Domain Descriptor | .cdd |
| Deployment Plan Descriptor (Component Deployment Plan): | .cdp |
| Top Level Package Descriptor | package.pcd |
| ZIP file containing all of above + binaries | .cpk |
コンポーネントの宣言
CCM のコンポーネントは、拡張 IDL に基づき component 宣言子を用いて以下の構文に従って宣言される。
component <component_name> [ : <base_name> ]
[ supports <interface_name> [, <interface_name>] * ]
{
<attribute declaration> *;
<port declaration> *;
};
component に続く <component_name> は宣言するコンポーネントの名前を記述する。 オプション的な宣言として、コンポーネントは一つのコンポーネント( <base_name> )を継承することがでる。 また、support 宣言子により同時にいくつかの IDL で定義したインターフェース( <interface_name> )を持つこともでき、これらは supported interface と呼ばれる。 コンポーネントの本体には、コンポーネントの属性( <attribute declaration> ) や Ports ( <port declaration> )を宣言することができる。
この宣言は IDL2 と等価なインターフェース equivalent interface として以下のように宣言するのと等価である。
interface <component_name>
: Components::CCMObject, [<base_name>, <interface_name>, <interface_name>] * ]
{
};
したがって、<base_name> はコンポーネント名であり、<interface_name> はインターフェース名として区別されるが、equivalent interface においてこれらはすべて interface となり、これらの継承に帰着される。
例えば、以下のように Hello インターフェースをもった HelloWorld コンポーネントを宣言することができます。