Kデスクトップ環境

第 4章Kアクティベータ

話が CORBA を通してサービスを提供するアプリケーションに及ぶとしばしば出て来る問題は、サービスのスタートとアクセスの方法です。ファイルシステム内のファイルのどこかにオブジェクトの IORを、アプリケーションに書かせればいいでしょう。もしくは同様の方法、まさにハックですが ;-)。それならKアクティベータを使った方が良いでしょう。なぜならこれは必要があれば自動的にサーバをスタートさせる、あるいは既に動いているサーバを使用できるようにするからです。これは、MICOに提供される BOA/POAへのメディエータといった救済機能や IMRで実行されます。幸運にも IMR エントリやメディエータを扱う必要はありません。

サーバを起動するのに Kアクティベータ を使用する前に、サーバのサービスについて登録しておかなければなりません。考えられる方法は二つありますが、後者の方法を強くお勧めします。

二番目として、記入が反映されるディレクトリに Kレジストリを置くことで、.desktopファイルが有効になるということは重要です。例えばアプリケーションが applnk ツリーに既に .desktopファイルを持っているようなら、そこに必要なものを加えるだけで構いません。また、それには "services" (system-wide かまたは user-local)というディレクトリがもっとも適しています。この方法で CORBA サービスの情報を準備するなら、Kアクティベータは自動的にそれを見つけ出し、IMR に自動的にそれを記録します。これは Kアクティベータ が直ちにに有効になり、それ故クライアントアプリケーションにもすぐに反映することを意味します。Kレジストリがそのように凄いものなので :-)、kded が起動していればランタイムにこの作業を全部行うことが出来るのです。.desktop ファイルを適切なディレクトリに置くと、Kアクティベータ は直ちに IMR をアップデートします。これは .desktop ファイルの削除及び変更にも当てはまります。この操作で、Kアクティベータ が IMR を調整します。これがなかなか良い方法だということが理解できますか。 :-))

CORBA サービスを記録する方法を知ることが出来た今、それにアクセスする方法も知りたいことでしょう。activateService()がここで役立つでしょう。単にサービスの名称、サーバオブジェクトのレポジトリ ID、そしてオブジェクトのタグを通すだけです。するとオブジェクトリファレンス関数を返します。これで全部です。:-)

Kアクティベータ は、サービスのアクティブモードに依存しているため、既に稼働しているサーバにリファレンスを返すか、新しいインスタンスを起動するかのどちらかを行います。

返されたオブジェクトリファレンスについて一つ注意すべきこと : これは仮想リファレンスです。つまりこのリファレンスに対して最初のコールがなされればそのサーバオブジェクトが起動し、したがって、要すれば自分自身のサーバを一歩送らせて起動します。しかしそれは単なる補助的な情報で、それについて扱い、知る必要は全くありません。単にオブジェクトリファレンス関数で幸せになればいいのです :-)。

サンプルはいかがですか?

コマンドライン"--server"は CORBA サーバモードでアプリケーションを起動するものとすると、 .desktopファイルがどのようにするかの例です。
   1 Name=MyApp
   2 Exec=fooblah
   3 CORBAExec=fooblah --server
   4 X-KDE-RepoIds=IDL:Foo/Blah:1.0#MyFoo
   5 X-KDE-ActivationMode=shared

Kアクティベータ がこのファイルを読み込むと、サービスを記録し、次のようなことが出来るようになります :
   1   ...
   2   KActivator *activator = KdedInstance::self()->kactivator();
   3   ...
   4   CORBA::Object_var obj = activator->activateServer( "MyApp", "IDL:Foo/Blah:1.0", "MyFoo );
   5   ...

上の例は、新しい fooblah インスタンスを開始するか、既に稼働済みのインスタンスに接続するかのどちらかです。

詳しい情報は kdelibs/corba/tutorials/kded のサンプルをご覧ください。そこにあるサンプルアプリケーションはregisterServiceを用いて手動でサーバを登録します。

注意してほしいこと : Kアクティベータ により、稼働しているサーバにリファレンスを返させるためサーバが kded で起動しなければなりません。ほかのところで "fooblah" を実行するとKアクティベータ にそれを用いません。これはたとえば Kデスクトップ環境のような持続性サーバにとっては問題です。しかし解決策もあります。KDEネーミングサービスについての次の章をお読みください :-)。