SAKAI Masahiro - さかい::進捗報告::2003-05-22 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

= 進捗報告 (2003-05-22)

慶應義塾大学 総合政策学部 3年

酒井 政裕 <sakai at tom.sfc.keio.ac.jp>

= 先週の補足訂正

IDispatchに相当するインターフェースはBonoboにはまだ存在しないと書いたが、
動的に呼び出したり呼び出されたりするための機能は、CORBAレベルで提供されている。

* DII (Dynamic Invocation Interface)
* DSI (Dynamic Skelton Interface)

= 今週やったこと

* gnome-utilsのパッチを取り込んでもらった
* Bonoboを介してRubyを呼び出す実装を進めた
* 主なスクリプト言語のCORBA対応について調べた

= Bonoboを介したRubyの呼び出し

現在の問題点

* Factoryと同じプロセスですべてのスクリプトエンジンのインスタンスが作られてしまう
* Rubyはプロセス内に複数のインタプリタを持つことが出来ないので、これではまずい
* スクリプトエンジンのインスタンス毎にプロセスを分けたいが、方法がわからない

= 主なスクリプト言語のCORBA対応状況

とりあえず、Perl, Python, Ruby, Tcl, PHPについて。

= Perl

((<Owen Taylor がいろいろ作ってる|URL:http://people.redhat.com/otaylor/corba/>))

* ILU
* MICO
* ORBit

= Python

: ((<Fnorb|URL:http://www.fnorb.org/>))
    pure Python な ORB。Jythonなんかでも使える。

: ((<omniORBpy|URL:http://www.uk.research.att.com/omniORB/omniORBpy/>))
    定評のあるomniORBのPythonバインディング?

: ((<ORBit-Python|URL:http://sourceforge.net/projects/orbit-python/>))
   ORBit1のPythonバインディング。メンテナンスされてないみたい。

: ((<PyORBit|URL:http://ftp.gnome.org/pub/GNOME/sources/pyorbit/1.99/>))
   ORBit2のPythonバインディング。
# URL:http://sourceforge.net/mailarchive/forum.php?thread_id=1350530&forum_id=4733

= Ruby

: ((<Ruby-ORBit|URL:http://www.ruby-lang.org/en/raa-list.rhtml?name=Ruby-ORBit>))
    ORBit1のバインディング。メンテナンスされていない。

: ((<Rinn|URL:http://www.minato.net/~j2/corba/rinn.html>))
    pure Ruby を目指していたみたい。やっぱりメンテナンスされていない。

= Tcl

: ((<Torb|URL:http://www.pythontech.co.uk/torb/>))
    ORBit1のバインディング。

= PHP

: ((<PHP-ORBit|URL:http://freshmeat.net/projects/php-orbit/>))
    ORBit1のバインディング。

= まとめ

* 通常は、各言語毎にCORBAの標準インターフェースが規定されているので、
  言語が同じならばどのORBを使っても基本的には同じ
* でも、ORBによっては、便利な拡張機能があったり、実装が不完全だったり……
* そもそも標準インターフェースが規定されていない言語も……

= サンプル

  interface Echo {
    void echo(in string);
  };

= クライアント側(Rinn)

  #!/usr/bin/ruby
  require 'rinn/orbit/required'
  require 'ridl/ridl.rb'
  
  # IDLを読み込み、クラスを作成
  RIDL.feval("Echo.idl")
  
  # ORBの初期化  
  orb = ::CORBA::ORB.init('ORBit')
  
  # IOR(サービスの識別子)を参照に変換
  echo = orb.string_to_object(ARGV[0])
  echo._narrow! Echo # ???
  
  # メソッド呼び出し  
  echo.echo("hogehoge")

= クライアント側(PyORBit)

  #!/usr/bin/env python
  import sys, os
  import ORBit
  import CORBA
  
  ORBit.load_typelib('Echo')
  
  orb = CORBA.ORB_init(sys.argv, 'orbit-local-orb')
  echo = orb.string_to_object(sys.argv[1])
  echo.echo("hogehoge")

= 今後の予定

* CORBAのお勉強
* Rinn, Ruby-ORBit の調査と、ORBit2への対応