Home > Programming > Cocoaと分散オブジェクト

Cocoaと分散オブジェクト

自分の所属する研究室では分散オブジェクトミドルウェアとしてIce (Internet Communications Engine)を使っております。

分散オブジェクトミドルウェアは、すごく端折って言えば「ネットワーク越しの別マシンのインスタンスのメソッドを簡単に呼べる技術」とでももうしましょうか。CORBAとかが有名です。
一つの言語に依存したものであればJava RMIなどで良いのですが、IceやCORBAは違う言語間でのメソッドインボケーションのできるところが特徴です。Iceに関して言えば、C++, Java, C#, Python, VBなどに対応しています。残念ながらObjective Cには対応していません…。

んで、現在MacでIceを意識したデモアプリケーションを作っているのですが、ちょいと環境がマニアックで、Cocoa-Java + Iceというものなのです。
そもそもなぜMacでプログラムを組むかと言うと、QuickTimeを操作するアプリケーションを作っているということと、見栄えを良くしたいという事があるからです。QuickTimeだけだったら、QuickTime Playerを操作するAppleScriptをJavaから叩くアプリケーションを作り、それをIceを使って呼んでやる…みたいな解決策も考えられるのですが、新規アプリケーションだとそう簡単にはいきません。

もともとは全てObjective Cで作ってアプリケーションを"Scriptable"にし、上記のような方針でJavaからコントロールしてやろうと考えていたのですが、ちょいと調べた感じではすぐにはできなそうで(というか、そういう資料があまり無い)方針転換です。

IceのIDLコンパイラってjavaでassert文とか吐き出すから嫌いです…。Project BuilderとかVMの設定し直さなくちゃいかんし。

本来Iceのサーバ側アプリケーションは、Iceが用意したスレッドでクライアントからのイベントを待つ(他の処理はブロックされる)というシンプルな形で実装するのですが、Cocoa-Javaアプリだとそもそもjavaのmain()は見えないので、仕方なくawakeFromNib()の中で別スレッドを生成してIceのスレッドを動かす形に…。
うーん、スマートでないけれど仕方が無い。


しかし、もともとObjective Cを使ってるものにとっては型の動的結合の無いCocoa Javaはまだるっこしい(actionメソッドの仮引数がid型ではなくNSObject型なので、仮引数のメソッドを呼ぶ時は明示的にキャストしなくちゃいけない)です。
また、Eclipseに慣れたJava屋にとっては、Project BuilderのJavaエディタの機能の貧弱さに参ります。

動的結合はまぁ別に良いとしても、Project BuilderでのCocoa-Java開発はもっと楽になっても良いものと思います。せっかくの技術なんだからなぁ。

Comments:0

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://blog.hiroaki.jp/mt/mt-tb.cgi/220
Listed below are links to weblogs that reference
Cocoaと分散オブジェクト from Hirolog

Home > Programming > Cocoaと分散オブジェクト

Search
Feeds

Return to page top