さかい::進捗報告::2003-05-29
進捗報告 (2003-05-22)
慶應義塾大学 総合政策学部 3年
酒井 政裕 <sakai at tom.sfc.keio.ac.jp>
今日話すこと
今日はちょっと休憩して、CORBAとBonoboについての簡単な説明。
CORBAとは?
- CORBA = Common Object Request Broker Architecture
- 分散オブジェクト技術
分散オブジェクト技術
- オブジェクトを分散配置し、ローカルにあるオブジェクトと 同様に呼び出せるようにする
- 分散
- マシン間
- プロセス間
- スレッド間
一般的な仕組み
- ローカルにはスタブと呼ばれるオブジェクトのみをおいておく
- スタブのメソッドが呼び出されたとき、引数をマーシャリングしORB(Object Request Broker)を介しリモートに要求を送る。
- リモートのORBは要求を受け取ると、「スケルトン」とよばれるコードに要求を引き渡す。
- スケルトンは引数をアンマーシャリングし、実際のオブジェクトのメソッドを呼び出す。
実装
- 言語非依存
- CORBA
- COM, DCOM
- SOAP
- 言語依存
- JavaRMI, HORB
- dRuby
比較
- 「言語非依存」の技術は「言語依存」のものに比べて一般に複雑
- CORBAも結構複雑
CORBA : インターフェース定義
- オブジェクトのインターフェースはIDLで定義
- IDL = Interface Definition Language
- IDLから各言語用のスタブとスケルトンのコードを生成する
Bonobo
- GNOMEのコンポーネント技術
- 分散オブジェクト技術にはCORBAを使用
Bonoboの名前の由来
- ピグミーチンパンジーとも呼ばれるお猿
- コミュニケーションの手段として、生殖活動を目的としない交尾を頻繁にする
- ソフトウェアのコンポーネントも、簡単にくっつく事が出来るべきだよねぇ
……って事らしい。
GNOMEの開発者はお猿がお好き?
コンポーネントの実装
- 実行ファイル
- 共有ライブラリ
のいずれかとして実装する。
- glibの提供するオブジェクトシステムであるgobjectの仕組みを使って、 CORBAの面倒な部分を隠してしまっている。
- インスタンスの作り方, サポートするインターフェース, etc の情報を.serverファイルに書く
- .serverファイルをインストールして、コンポーネントを登録する
コンポーネントの実装例
(デモ)
Bonoboの使い方(クライアント)
- オブジェクトの参照を得るための柔軟な方法をBonoboが提供している
- queryInterfaceで目的のインターフェースを得る
- 後はCORBAで普通にメソッドを呼び出す
- Widgetの埋め込みには(gtk+のクラスの)BonoboWidgetクラスを使う
- オブジェクトを使い終わったら unref
オブジェクトの参照を得る
- OAF Query
- Moniker
OAF Query (1)
CORBA_Object o = bonobo_activation_activate ("repo_ids.has ('IDL:GNOME/Graph/Layout:1.0')", NULL, 0, NULL, &ev);
GNOME/Graph/Lyout:1.0インターフェースをサポートするコンポーネントをインスタンス化する。
OAF Query (2)
もっと複雑なキュエリー
"(repo_ids.has_all (['IDL:Bonobo/Control:1.0', 'IDL:Nautilus/ContentView:1.0']) OR repo_ids.has_one (['IDL:Bonobo/Control:1.0', 'IDL:Bonobo/Embeddable:1.0'])) AND repo_ids.has('IDL:Bonobo/PersistFile:1.0') AND foo:bar.defined()"
Moniker
別名による呼び出し。
- 例) URI や MIME type による呼び出し
queryInterface
BonoboはCORBAの多重継承は使わず、かわりにインターフェース集約を用いる。で、クライアント側がインターフェースを得るためにはqueryInterfaceを使う。
CORBA_Object plotter_object = bonobo_object_query_interface (BONOBO_OBJECT (component), "IDL:Plotter/Control:1.0");
クライアントの実装例
(デモ)
Keyword(s):
References: