さかい::進捗報告::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について。

Python

Fnorb
pure Python な ORB。Jythonなんかでも使える。
omniORBpy
定評のあるomniORBのPythonバインディング?
ORBit-Python
ORBit1のPythonバインディング。メンテナンスされてないみたい。
PyORBit
ORBit2のPythonバインディング。

Ruby

Ruby-ORBit
ORBit1のバインディング。メンテナンスされていない。
Rinn
pure Ruby を目指していたみたい。やっぱりメンテナンスされていない。

Tcl

Torb
ORBit1のバインディング。

PHP

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への対応
Last modified:2005/10/10 01:35:14
Keyword(s):
References: