7.CORBAプログラミング
CORBA 7章 CORBAプログラミング
この章ではJavaによる簡単なCORBAプログラミングを行います。 CORBAプログラミングを行うには、まずどのORB製品を利用するかを決めなければいけません。ORB製品は商用・非商用を含め多くの製品が存在します。ここではその中から、JDKに標準で付属しているJava IDLを利用することにします。Java IDLにはいくつか制限がありますが、JDKがインストールされていれば他になにも追加しなくても利用することができますので、簡単なCORBAプログラムの動作確認を行うには適しています。 ここで、Java IDLとは単にIDL(Interface Difinition Language)のことを示しているのではなく、JDKに付属しているCORBA環境の総称です。Java IDLはいくつかのツールより構成されています。JDK1.4に付属しているツールは以下のとおりです。 idljIDL-Javaコンパイラです。IDLで記述されたファイルをコンパイルし、CORBAオブジェクト作成に利用するスケルトンやスタブなどのJavaソースファイルを生成します。 orbdORBのデーモンプログラムです。単なるORBの機能だけではなく、ネームサービスの機能も提供します。JDK1.3に付属していたネームサービスは一時的(Transient)な機能しか提供していなかったのに対して、JDK1.4付属のorbdに含まれるネームサービスは永続的(Persistent)なサービスを提供します。このサーバプロセスをシャットダウンしてもオブジェクトの登録を保持することができ、再度起動したときにもその登録内容を利用できるようになっています。 servertoolCORBAのサーバオブジェクトを管理するためのツールです。オブジェクトの登録や起動などを行います。 tnameservtnameservもネームサーバですが、orbdと違い一時的なサービスしか提供しません。JDK1.3付属のJava IDLとの互換性のために存在しています。 CORBAアプリケーション開発および実行は以下の手順で行います。以下この手順に沿って簡単なカウンタプログラムを作成していきます。
7.1 インタフェースの定義ここでは、まずサーバオブジェクトのIDLを記述し、IDLをコンパイルすることによってスタブやクライアント等のプログラムを作成します。 Count.idlmodule CounterApp{ // モジュール宣言
interface Counter{ // インタフェース宣言
attribute long count; // 属性宣言
long increment(); // オペレーション宣言
long decrement(); // オペレーション宣言
};
};
このIDLは一つのモジュール(CounterApp)を定義しており、その中に一つのインタフェース(Counter)があります。Counterインタフェースは、カウンタ値を保持するlong型の属性と、カウンタをインクリメント/デクリメントする二つのオペレーションより構成されています。 このIDLファイルをidljによってコンパイルします。idljのオプションで生成するファイルの種類を指定できるのですが、ここではサーバ実装およびクライアント実装に必要なファイルを全て生成する-fallオプ ションを指定します。 $ idlj -fall Count.idl
上記のコマンドを実行すると以下のファイルが生成されます。これらのファイルをもとにサーバやクライアントを実装します。 CounterApp/CounterOperations.javaIDLで定義したインタフェースをそのままJavaのインタフェースに変換したものです。スケルトンやスタブなどはこのインタフェースを実装/継承します。 package CounterApp;
public interface CounterOperations {
int count ();
void count (int newCount);
int increment ();
int decrement ();
}
CounterApp/CounterPOA.javaサーバスケルトンの役割を持つ抽象クラスです。このクラスはサーバ用に基本的なCORBA機能を提供します。org.omg.ProtrableServer.Servantを継承し、InvokeHandlerインタフェースとCounterOperationsインタフェースを実装します。サーバ実装クラスはこのクラスを継承することによって作成します。 CounterApp/_CounterStub.javaクライアンスタブの機能をもつクラスです。このクラスはクライアント用に基本的なCORBA機能を提供します。org.omg.CORBA.portable.ObjectImplを継承し、Counter.javaインタフェースを実装します。 CounterApp/Counter.javaCounterOperationsとorg.omg.CORBA.Objectを継承する、サーバオブジェクトのインタフェースです。 CounterApp/CounterHelper.javaこのクラスはCORBAに関する補助的な機能を提供します。主なものとしてCORBAオブジェクト参照を、適切な型に変換するnarrow()メソッドがあります。ナロー変換はクライアントやサーバなど、オブジェクト参照を利用する場所に応じて適切な型変換を行います。 CounterApp/CounterHolder.javaHolderクラスはout型やinout型のパラメータの受け渡しに用いられるクラスです。 |
![]()
![]()
|