SAKAI Masahiro - さかい::進捗報告::2003-05-29 Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
= 進捗報告 (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");
= クライアントの実装例
(デモ)
慶應義塾大学 総合政策学部 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");
= クライアントの実装例
(デモ)