連載

スキルアップのための分散オブジェクト入門

第3回 開発手順からCORBAのしくみを理解する

日本アイオナテクノロジーズ
主席 コンサルタント
小野沢 博文
2002/4/25
本連載について

第2回「分散オブジェクト技術のしくみを理解する」の説明で、さまざまな分散オブジェクト技術に共通する基本的な考え方と仕組みについて理解していただけたと思います。今回からは、個々の分散オブジェクト技術の説明をしていきます。今回は、CORBAを取り上げます。第2回の解説を理解していることが前提となりますので、第2回を必ずお読みください。


CORBAとは

今回の内容
CORBAの特徴
開発手順に従って理解を深める

 第2回で説明した分散オブジェクト技術に共通する仕組みに加えて、ここでは、CORBA(用語解説1)固有の概念や仕組みを説明していきます。

用語解説1 CORBA(Common Object Request Broker)
CORBAはOMG(用語解説2)が標準化作業を進めている分散オブジェクト技術の業界標準です。1991年にバージョン1.0の仕様が策定され、その後バージョンアップを重ね、現在2.6が最新バージョンです。CORBAは大量の仕様書から構成されていますが、大ざっぱには、ORBの基本動作やIDL(用語解説 4)、さらに通信プロトコルを規定したコア仕様、IDLの各プログラミング言語へのマッピング仕様、ネーミング・サービスのようなシステム寄りの共通サービスを提供するCORBAサービス仕様、アプリケーション寄りのサービスを提供するCORBAファシリティ仕様、産業分野ごとのドメイン・インターフェイス仕様に分類できます。

用語解説2 OMG(Object Management Group)
CORBAやUML(Unified Modeling Language)などのオブジェクト指向技術の標準化やプロモーションを行っている非営利の業界コンソーシアム。

■CORBAの特徴

 最初にCORBAの特徴を簡単にまとめておきましょう。

特定のOSやプログラミング言語に依存しない
 CORBAは、ほとんどの主要UNIXとWindows系OS、OS390などのメインフレームOS、VxWorksなどのリアルタイムOSや組み込みOS上で広くサポートされています。また、プログラミング言語として、Java、C、C++、COBOLなどがサポートされており、異機種分散環境を統合する共通プラットフォームの役割を担っています。

IIOPによる相互運用性
 IIOP(用語解説3)によって、CORBA製品間はもちろん、JavaRMI、EJB、HORB、およびCOM+(COM-CORBAゲートウェイ経由)と通信することができます。

IDLでインターフェイスを定義する
 オブジェクトのインターフェイスをIDL(Interface Definition Language)(用語解説4)で定義します。CORBAではこれは必須ですが、どうか面倒くさいと思わないでください。プログラミング言語からの独立性、クライアントとサーバの分離、サーバの再利用性、といったCORBAの利点の多くは、このインターフェイス定義に由来しているのですから。

用語解説3 IIOP(Internet Inter-ORB Protocol)
CORBAの標準通信プロトコル。CORBAでは、メッセージの形式やデータのエンコーディング方法などを、特定のトランスポート・プロトコルに依存せずに規定しています。これがGIOP(General Inter-ORB Protocol)と呼ばれる上位プロトコルです。IIOPは、このGIOPのTCP/IPへのマッピングであり、相互接続のための必須プロトコルとして位置付けられています。


■開発手順に従って理解を深める

 ここでは、アプリケーションの開発手順を追いながら、CORBAの特徴をもう少し詳しく見ていくことにします。

インターフェイス定義

 CORBAのアプリケーションを作成する場合、まずIDLでオブジェクトのインターフェイスを定義します。以下のリストはごく簡単なインターフェイス定義例です。

リスト IDLの定義例
exception MailException {
    long reason;
};


interface Customer {
    readonly attribute string id;
    readonly attribute wstring mailAddress;
    void ChangeMailAddress(in wstring address);
    void SendMail(in wstring text) raises(MailException);
};

用語解説4 IDL(Interface Definition Language)
IDLには、オブジェクトが外部に公開する属性(データ)とオペレーション(メソッド)を記述します。図1のidとmailAddressは読み取り専用の属性で、ChangeMailAddressとSendMailはオペレーションの例です。また、必要に応じてユーザー定義のデータ型や例外を定義することもできます。先頭のMailExceptionは例外の定義例です。このように、IDLはインターフェイスを含むさまざまな型を定義するための言語であり、プログラムのロジックを記述するためのJavaのようなプログラミング言語とは異なります。このため、非常にシンプルで、簡単にマスターできます。

 インターフェイスを先に定義することで、クライアント・アプリケーションとサーバ・アプリケーションを、それぞれお互いの実装の詳細(プログラミング言語や内部のアルゴリズムなど)を気にすることなく作成できるようになります。さらに、インターフェイス定義を守っている限り、相手に影響を与えずに別の実装に交換することも可能です。

スタブとスケルトンの生成

 次に、作成したインターフェイス定義を、図1のようにIDLコンパイラでコンパイルします。その結果、クライアント用のスタブとサーバ用のスケルトン(コードのひな型)がそれぞれのプログラミング言語のソース・コードとして生成されます。スタブとスケルトンの役割は、第2回でお話ししたとおりです。

図1 インターフェイス定義のコンパイル(注:一般的にコマンド名やパラメタは製品によって異なる)

サーバ・プログラムの作成

 先に説明したように、CORBAではクライアントとサーバのプログラミングを独立して行うことができますが、ここでは便宜上サーバを先に説明します。

 サーバ・プログラムは基本的に、IDLで定義したインターフェイスを実装するクラスとメイン・プログラムから構成されます。前者の実装クラスのことをサーバント・クラス、そのオブジェクト・インスタンスをサーバントと呼んでいます。つまり、CORBAオブジェクトのアプリケーション・ロジックを実装したプログラミング言語のオブジェクトが、サーバントということになります。

 一方、メイン・プログラムでは、ORBの初期化を行い、さらにサーバントの作成とクライアントへのオブジェクト・リファレンスの公開を行います。オブジェクト・リファレンスをクライアントに配布するためには、次のような機能(またはその組み合わせ)を利用します。詳細は用語解説を参照してください。

  1. ネーミング・サービス(用語解説5)
  2. トレーディング・サービス(用語解説6)
  3. オブジェクト・リファレンスのファイル渡し(用語解説7)
  4. IORとオブジェクトURL(用語解説8)
  5. 別のオブジェクトのオペレーション呼び出しの戻り値

クライアント・プログラムの作成

 クライアント・プログラムの作成は至って簡単です。まず、ORBの初期化を行い、次にサーバが公開したオブジェクト・リファレンスを取得します。そして、これをJavaやC++のオブジェクトに対する参照またはポインタのように扱ってリモート・オブジェクトのオペレーションを呼び出すのです。

用語解説5 ネーミング・サービス
CORBAサービスの1つ。アプリケーションはネーミング・サービスを利用することで、オブジェクト・リファレンスに名前を付けて登録し、逆に名前から検索することができます。ネーミング・サービスは、ファイルシステムのような階層構造でオブジェクト・リファレンスを管理します。ファイルシステムのディレクトリに相当するのがネーミング・コンテキストと呼ばれるCORBAオブジェクトです。アプリケーションは、このネーミング・コンテキストが提供するbindやresolveといったオペレーションを通じて、オブジェクト・リファレンスの登録や検索を行います。

用語解説6 トレーディング・サービス
CORBAサービスの1つ。ネーミング・サービスは名前でオブジェクト・リファレンスを登録、検索するためのサービスでしたが、トレーディング・サービスでは、サービス内容でオブジェクト・リファレンスを登録、検索することができます。電話帳に例えると、イエロー・ページ(職業別電話帳)に相当します。

用語解説7 オブジェクト・リファレンスのファイル渡し
ファイルを介してオブジェクト・リファレンスをサーバからクライアントに受け渡すこともできます。この場合、サーバ側ではオブジェクト・リファレンスを文字列形式に変換してからファイルに書き出します。逆に、クライアント側では文字列形式のリファレンスを読み取り、この情報から代理オブジェクトを作成します。これらの変換は、CORBAが提供するオペレーションを呼び出して行います。

用語解説8 IORとオブジェクトURL
GIOPプロトコルでオブジェクト・リファレンスをやりとりする場合、IOR(Interoperable Object Reference)と呼ばれる形式を使用します。用語解説 7に登場した文字列形式のオブジェクト・リファレンスは、バイナリ形式のIORを16進表記したものです。従って、通常の人間がこの文字列を見ても何のことかさっぱり理解できません。これに対して、オブジェクトURLは、人間が目で見て理解できるURL形式のオブジェクト・リファレンスです。例えば、

corbaloc:iiop:1.2@onozawa.iona.com:3075/MyObject

といった感じです。厳密にいうと、文字列形式のオブジェクト・リファレンスとURL形式のオブジェクト・リファレンスを総称してオブジェクトURLと呼んでいます。


コンパイルと実行

 クライアントとサーバのプログラミングが完了したら、後はスタブとスケルトン、およびクライアントとサーバのコードをコンパイル、リンク(Javaの場合には当然リンクは不要)して実行するだけです。

TIPS1 デーモン・プロセス

 クライアントとサーバを実行する際には、一般にこれらのアプリケーションのプロセス以外に、各製品が提供するデーモン・プロセスが必要になります。このデーモン・プロセスの構成や名称は製品によってまちまちですが、次のような役割を果たしています。

(1)通常サーバ・プロセスは不定ポート(OSが割り当てるポート)でクライアントからのリクエストを受けます(製品によってはポート番号を固定することもできます)。このため、オブジェクト・リファレンスの中にこの不定ポートを格納してしまうと、サーバを再起動してポート番号が変わってしまった場合に、クライアントはサーバに到達できなくなってしまいます。そこで、オブジェクト・リファレンスには固定ポートで待機するデーモンのポート番号を格納しておき、クライアントはまずデーモンにサーバのポート番号を問い合わせるようにします。デーモンはすべてのサーバのポート番号を管理しており、クライアントにサーバの最新のポート番号を通知してくれます。

(2)クライアントがオペレーションを呼び出した時点でターゲットのサーバ・プロセスが起動されていないと、デーモンがプロセスを自動的に起動します。

 ほとんどの最新の製品では、これらのデーモンは標準のIIOP(GIOP)プロトコルでアプリケーションと通信しますので、異なる製品が混在しても問題は発生しません(発生しないはずです)。

 今回は分散オブジェクト技術各論の第1回目としてCORBAを取り上げました。本連載では、分散オブジェクト技術の考え方や仕組みの説明に主眼を置いています。このため、プログラミングの詳細まで知りたい読者には少し物足りないかもしれません。CORBAのプログラミングをマスターしたい方は、以下の入門書を参考にしてください。

CORBA完全解説 基礎編 ― JavaでかんたんCORBA』ソフト・リサーチ・センター
CORBA完全解説 応用編 ― POAを使いこなす』ソフト・リサーチ・センター

 また、「CORBAはどんなところで使われているのか?」「CORBAの将来は?」といったテーマについては、「短期集中連載:いまなぜCORBAなの?」をお読みください。

INDEX
スキルアップのための分散オブジェクト入門
  第1回 分散オブジェクト技術が必要なわけ(2002/3/19)
  第2回 分散オブジェクトのしくみを理解する(2002/4/4)

第3回 開発手順からCORBAを理解する(2002/4/25)

  第4回 開発手順から分かるEJBとJavaRMI(2002/6/25)
  第5回 分散オブジェクト技術としてのHORBとCOM+(2002/8/21)
  第6回 現実モデルはWebサービスとの共存(2002/10/4)


筆者プロフィール
小野沢 博文(おのざわ ひろふみ)

現在、日本アイオナテクノロジーズ株式会社にて分散オブジェクト・システムの技術コンサルタントを務める。
1991年まで富士通株式会社にてプラズマ実験データ処理システムの開発やシステム運用に携わった後、1996年以前は日本DECにてCORBA準拠のObjectBrokerおよびDCEの開発を担当。また、MIA、NMF SPIRITなどの標準化活動にも参加する。 1997年1月から1999年8月までは、TCSIにて分散オブジェクト技術を適用したテレコム向けの大規模ネットワーク管理システムの開発に携わる。

[著書一覧]
『CORBA完全解説 基礎編』(ソフト・リサーチ・センター)、『CORBA完全解説 応用編』(ソフト・リサーチ・センター)、『分散オブジェクト指向技術CORBA』(ソフト・リサーチ・センター)、『イントラネットのためのオブジェクト指向データベース技術』(共著、ソフト・リサーチ・センター)、『分散コンピューティング環境 DCE』 (監著、共立出版)、『トランザクション処理システム入門』(共訳、日経BP)


Java Solution全記事一覧




Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間