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");

= クライアントの実装例

(デモ)