Webアプリ開発エンジニアのための技術情報サイト「テックスコア」

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に付属しているツールは以下のとおりです。

idlj

 IDL-Javaコンパイラです。IDLで記述されたファイルをコンパイルし、CORBAオブジェクト作成に利用するスケルトンやスタブなどのJavaソースファイルを生成します。

orbd

 ORBのデーモンプログラムです。単なるORBの機能だけではなく、ネームサービスの機能も提供します。JDK1.3に付属していたネームサービスは一時的(Transient)な機能しか提供していなかったのに対して、JDK1.4付属のorbdに含まれるネームサービスは永続的(Persistent)なサービスを提供します。このサーバプロセスをシャットダウンしてもオブジェクトの登録を保持することができ、再度起動したときにもその登録内容を利用できるようになっています。

servertool

 CORBAのサーバオブジェクトを管理するためのツールです。オブジェクトの登録や起動などを行います。

tnameserv

 tnameservもネームサーバですが、orbdと違い一時的なサービスしか提供しません。JDK1.3付属のJava IDLとの互換性のために存在しています。

 CORBAアプリケーション開発および実行は以下の手順で行います。以下この手順に沿って簡単なカウンタプログラムを作成していきます。

  1. IDLによるサーバインタフェースの定義
  2. IDLのコンパイル
  3. サーバの実装
  4. クライアントの実装
  5. アプリケーションの起動

7.1 インタフェースの定義

 ここでは、まずサーバオブジェクトのIDLを記述し、IDLをコンパイルすることによってスタブやクライアント等のプログラムを作成します。

Count.idl
module 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.java

 IDLで定義したインタフェースをそのまま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.java

 CounterOperationsorg.omg.CORBA.Objectを継承する、サーバオブジェクトのインタフェースです。

CounterApp/CounterHelper.java

 このクラスはCORBAに関する補助的な機能を提供します。主なものとしてCORBAオブジェクト参照を、適切な型に変換するnarrow()メソッドがあります。ナロー変換はクライアントやサーバなど、オブジェクト参照を利用する場所に応じて適切な型変換を行います。

CounterApp/CounterHolder.java

 Holderクラスはout型やinout型のパラメータの受け渡しに用いられるクラスです。



次のページへ TECHSCOREのTOPページへ 次のページへ
techscore(トップページへ)
TECHSCORE書店
TECHSCOREトップページJavaSQLXMLリッチクライアントモデリングセマンティックWebその他技術Tuigwaa