連載
スキルアップのための分散オブジェクト入門
第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の利点の多くは、このインターフェイス定義に由来しているのですから。
■開発手順に従って理解を深める |
ここでは、アプリケーションの開発手順を追いながら、CORBAの特徴をもう少し詳しく見ていくことにします。
●インターフェイス定義
CORBAのアプリケーションを作成する場合、まずIDLでオブジェクトのインターフェイスを定義します。以下のリストはごく簡単なインターフェイス定義例です。
リスト IDLの定義例 |
exception MailException {
|
用語解説4 IDL(Interface Definition Language) |
IDLには、オブジェクトが外部に公開する属性(データ)とオペレーション(メソッド)を記述します。図1のidとmailAddressは読み取り専用の属性で、ChangeMailAddressとSendMailはオペレーションの例です。また、必要に応じてユーザー定義のデータ型や例外を定義することもできます。先頭のMailExceptionは例外の定義例です。このように、IDLはインターフェイスを含むさまざまな型を定義するための言語であり、プログラムのロジックを記述するためのJavaのようなプログラミング言語とは異なります。このため、非常にシンプルで、簡単にマスターできます。 |
インターフェイスを先に定義することで、クライアント・アプリケーションとサーバ・アプリケーションを、それぞれお互いの実装の詳細(プログラミング言語や内部のアルゴリズムなど)を気にすることなく作成できるようになります。さらに、インターフェイス定義を守っている限り、相手に影響を与えずに別の実装に交換することも可能です。
●スタブとスケルトンの生成
次に、作成したインターフェイス定義を、図1のようにIDLコンパイラでコンパイルします。その結果、クライアント用のスタブとサーバ用のスケルトン(コードのひな型)がそれぞれのプログラミング言語のソース・コードとして生成されます。スタブとスケルトンの役割は、第2回でお話ししたとおりです。
図1 インターフェイス定義のコンパイル(注:一般的にコマンド名やパラメタは製品によって異なる) |
●サーバ・プログラムの作成
先に説明したように、CORBAではクライアントとサーバのプログラミングを独立して行うことができますが、ここでは便宜上サーバを先に説明します。
サーバ・プログラムは基本的に、IDLで定義したインターフェイスを実装するクラスとメイン・プログラムから構成されます。前者の実装クラスのことをサーバント・クラス、そのオブジェクト・インスタンスをサーバントと呼んでいます。つまり、CORBAオブジェクトのアプリケーション・ロジックを実装したプログラミング言語のオブジェクトが、サーバントということになります。
一方、メイン・プログラムでは、ORBの初期化を行い、さらにサーバントの作成とクライアントへのオブジェクト・リファレンスの公開を行います。オブジェクト・リファレンスをクライアントに配布するためには、次のような機能(またはその組み合わせ)を利用します。詳細は用語解説を参照してください。
- ネーミング・サービス(用語解説5)
- トレーディング・サービス(用語解説6)
- オブジェクト・リファレンスのファイル渡し(用語解説7)
- IORとオブジェクトURL(用語解説8)
- 別のオブジェクトのオペレーション呼び出しの戻り値
●クライアント・プログラムの作成
クライアント・プログラムの作成は至って簡単です。まず、ORBの初期化を行い、次にサーバが公開したオブジェクト・リファレンスを取得します。そして、これをJavaやC++のオブジェクトに対する参照またはポインタのように扱ってリモート・オブジェクトのオペレーションを呼び出すのです。
用語解説6 トレーディング・サービス |
CORBAサービスの1つ。ネーミング・サービスは名前でオブジェクト・リファレンスを登録、検索するためのサービスでしたが、トレーディング・サービスでは、サービス内容でオブジェクト・リファレンスを登録、検索することができます。電話帳に例えると、イエロー・ページ(職業別電話帳)に相当します。 |
●コンパイルと実行
クライアントとサーバのプログラミングが完了したら、後はスタブとスケルトン、およびクライアントとサーバのコードをコンパイル、リンク(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) |
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|