これが可能なのは、Java IDL が業界標準の分散オブジェクトモデルである Common Object Request Brokerage Architecture (CORBA) に基づいているからです。CORBA の重要な特長は IDL にあります。IDL は言語に中立なインタフェース定義言語です。CORBA をサポートする言語にはそれぞれ独自の IDL マッピングがあり、Java IDL は名前が示すとおり Java のマッピングをサポートしています。IDL と Java 言語のマッピングについては、「IDL と Java 言語のマッピング」を参照してください。
別々のプログラムにあるオブジェクトの相互作用をサポートするために、Java IDL は Object Request Broker (ORB) を提供しています。ORB は Java IDL アプリケーションと CORBA 準拠のアプリケーション間で低レベルの通信を行うためのクラスライブラリです。
このチュートリアルでは、Java IDL を使って CORBA 分散アプリケーションを構築するための基本的な方法を学びます。分散アプリケーションとして、古典的な「Hello World」プログラムを構築します。Hello World プログラムには、出力される文字列を返すだけの単一オペレーションがあります。
分散オブジェクトの関係には 2 つの側面があります。クライアントとサーバーです。サーバーはリモートインタフェースを提供し、クライアントはリモートインタフェースを呼び出します。この関係は多くの分散オブジェクト標準に共通しているもので、Java リモートメソッド呼び出し (RMI、RMI-IIOP) や CORBA にも当てはまります。ここで、クライアントやサーバーという言葉はオブジェクトレベルの相互作用を定義するもので、アプリケーションレベルの相互作用を定義するものではありません。どのアプリケーションも、あるオブジェクトのサーバーにもなれば別のオブジェクトのクライアントにもなります。実際、ある 1 つのオブジェクトが、リモートオブジェクトで提供されるインタフェースのクライアントになると同時に、ほかのオブジェクトがリモートで呼び出すインタフェースを実装することもできます。
次の図は、古典的な「"Hello World"」アプリケーションを実装するために単一メソッドの分散オブジェクトが、CORBA クライアントとサーバーで共有されている状態を示したものです。
CORBA クライアントとサーバーで共有されている単一メソッドの分散オブジェクト。クライアント側では、アプリケーションにリモートオブジェクトの参照が含まれています。オブジェクト参照にはスタブメソッドがあり、リモートで呼び出されるメソッドの代わりになります。実際にはスタブは ORB に接続されているため、スタブを呼び出すと ORB の接続機能が呼び出され、サーバーに伝えられます。
サーバー側では、ORB がスケルトンコードを使ってリモート呼び出しをローカルオブジェクトのメソッド呼び出しに変換します。スケルトンは呼び出しとパラメータを実装に適した形式に変換し、起動するメソッドを呼び出します。メソッドが復帰するとスケルトンコードは結果またはエラーを生成し、ORB を経由してクライアントに返します。
ORB 間の通信は共有プロトコルである IIOP (Internet Inter-ORB Protocol) で実行されます。IIOP は標準の TCP/IP インターネットプロトコルに基づくプロトコルで、CORBA 準拠の ORB が情報を送受信する方法を定義します。CORBA や IDL と同じく、IIOP 標準は OMG (Object Management Group) によって定義されています。
「Hello World」プログラムは単純ですが、このプログラムを通して、「静的な呼び出し」を使用する CORBA プログラムの開発に必要な作業すべてを学び、経験することができます。Java IDL を使って分散オブジェクトアプリケーションを設計および開発するときの、一般的な手順について説明します。チュートリアルでリンクされている関連手順に従って、このサンプルアプリケーションを作成してみてください。
OMG のインタフェース定義言語 (Interface Definition Langauge、IDL) を使うと、リモートオブジェクトのインタフェースを定義できます。Java 言語の代わりに IDL を使用するのは、idlj
コンパイラが IDL から自動的にマッピングして Java 言語のスタブとスケルトンのソースファイルをすべて生成し、さらに ORB に接続するためのインフラストラクチャーコードも生成するからです。また IDL を使うと、開発者は CORBA 準拠のほかの言語でクライアントとサーバーを実装する手段を提供できます。
既存の CORBA サービスにクライアントを実装したり既存のクライアントのためのサーバーを実装する場合、実装者つまりサービスプロバイダやベンダーから IDL インタフェースを入手するようにします。その場合、これらのインタフェースに idlj
コンパイラを実行し、その後この手順に従ってください。
このチュートリアルの IDL ファイルの記述では、簡単な「Hello World」の例でリモートインタフェースの定義方法を示します。
インタフェース定義ファイルで idlj
コンパイラを実行すると、Java バージョンのインタフェースが作成され、同時にスタブとスケルトンのクラスコードファイルも生成されてアプリケーションを ORB に接続できるようになります。
このチュートリアルの「Hello.idl を Java にマッピングする」では、簡単な「Hello World」の例で手順を示します。
idlj
コンパイラを実行すると、生成されるスケルトンを使ってサーバーアプリケーションに結合できます。サーバーコードにはリモートインタフェースのメソッドが実装されるだけでなく、ORB を起動してリモートクライアントからの呼び出しを待機するメカニズムが含まれます。
「Hello World サーバーの開発」では、「Hello World」アプリケーションの簡単なサーバーの記述方法を示します。
同様に、idlj
コンパイラで生成されたスタブをクライアントアプリケーションの基礎として使用します。クライアントコードはスタブ上に構築され、ORB の起動、Java IDL で提供されるネームサービスを使ったサーバーのルックアップ、およびリモートオブジェクトの参照の取得とそのメソッドの呼び出しを行います。
「クライアントアプリケーションの開発」では、簡単なクライアントアプリケーションの記述方法を示します。
サーバーとクライアントを実装すると、ネームサービスを起動したあとにサーバーを起動し、さらにクライアントを起動することができます。
「Hello World アプリケーションの実行」では、「Hello World」アプリケーションを構成するサーバーとクライアントプログラムを実行する方法を学び、それぞれを検出しあうネームサービスを実行する方法も学びます。
「文字列化されたオブジェクト参照の使用」では、ネームサービスがない場合のオブジェクト参照の作成方法を示します。
「2 台のマシンで実行する Hello World プログラム」では、クライアントとサーバーという 2 台のマシンで簡単なアプリケーションを分散させる方法の一例を示します。
基本的な概念はチュートリアルの中で説明されていますが、「概念」セクションを参照するとより詳しく知ることができます。また、チュートリアルを通じて、新規用語をクリックするとその定義を見ることができます。
現在、Object Management Group はこのサイトを更新していませんが、CORBA for Beginnners のページには CORBA 導入のための情報を提供する Web ページが紹介されています。