さかい::進捗報告::2003-05-22
進捗報告 (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
- ILU
- MICO
- ORBit
Python
- Fnorb
- pure Python な ORB。Jythonなんかでも使える。
- omniORBpy
- 定評のあるomniORBのPythonバインディング?
- ORBit-Python
- ORBit1のPythonバインディング。メンテナンスされてないみたい。
- PyORBit
- ORBit2のPythonバインディング。
Ruby
- Ruby-ORBit
- ORBit1のバインディング。メンテナンスされていない。
- Rinn
- pure Ruby を目指していたみたい。やっぱりメンテナンスされていない。
まとめ
- 通常は、各言語毎に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への対応
Keyword(s):
References: