JavaTM IDL 入門


Java TM IDL は分散オブジェクト、つまりネットワーク上の異なるプラットフォームで相互に作用するオブジェクトのためのテクノロジです。Java IDL を使うと、Java プログラミング言語で書かれているか、または C、C++、COBOL などの言語で書かれているかに関係なく、オブジェクトは相互に作用することができます。

これが可能なのは、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 リモートメソッド呼び出し (RMIRMI-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) によって定義されています。

Java IDL の開発プロセスと Hello World のチュートリアル

このチュートリアルでは、Java IDL を使って CORBA 分散アプリケーションを構築する基本的な方法を学びます。分散アプリケーションとして、古典的な「Hello World」プログラムを構築します。「Hello World」プログラムには、出力される文字列を返すだけの単一操作があります。

Hello World プログラムは単純ですが、このプログラムを通して、静的な呼び出しを使用するほとんどの CORBA プログラムの開発に必要な作業のすべてを学び、経験することができます。 Java IDL を使って分散オブジェクトアプリケーションを設計および開発するときの、一般的な手順について説明します。チュートリアルでリンクされている関連手順に従って、このサンプルアプリケーションを作成してみてください。

  1. リモートインタフェースの定義

    OMG のインタフェース定義言語 (Interface Definition Langauge、IDL) を使うと、リモートオブジェクトのインタフェースを定義できます。Java 言語の代わりに IDL を使用するのは、idlj コンパイラが IDL から自動的にマッピングして Java 言語のスタブとスケルトンのソースファイルをすべて生成し、さらに ORB に接続するためのインフラストラクチャコードも生成するからです。また IDL を使うと、開発者は CORBA 準拠の他の言語でクライアントとサーバを実装する手段を提供できます。

    既存の CORBA サービスにクライアントを実装したり既存のクライアントのためのサーバを実装する場合、実装者つまりサービスプロバイダやベンダーから IDL インタフェースを入手するようにします。その場合、これらのインタフェースに idlj コンパイラを実行し、その後この手順に従ってください。

    このチュートリアルの「IDL ファイルの記述」では、簡単な「Hello World」の例でリモートインタフェースの定義方法を示します。

  2. リモートインタフェースのコンパイル

    インタフェース定義ファイルで idlj コンパイラを実行すると、Java バージョンのインタフェースが作成され、同時にスタブとスケルトンのクラスコードファイルも生成されてアプリケーションを ORB に接続できるようになります。

    このチュートリアルの「Hello.idl を Java にマッピングする」では、簡単な「Hello World」の例で手順を示します。

  3. サーバの実装

    idlj コンパイラを実行すると、生成されるスケルトンを使ってサーバアプリケーションに結合できます。サーバコードにはリモートインタフェースのメソッドが実装されるだけでなく、ORB を起動してリモートクライアントからの呼び出しを待機する機構が含まれます。

    「Hello World サーバの開発」では、「Hello World」アプリケーションの簡単なサーバの記述方法を示します。

  4. クライアントの実装

    同様に、idlj コンパイラで生成されたスタブをクライアントアプリケーションの基礎として使用します。クライアントコードはスタブ上に構築され、ORB の起動、Java IDL で提供されるネームサービスを使ったサーバのルックアップ、およびリモートオブジェクトの参照の取得とそのメソッドの呼び出しを行います。

    「クライアントアプリケーションの開発」では、簡単なクライアントアプリケーションの記述方法を示します。

  5. アプリケーションの起動

    サーバとクライアントを実装すると、ネームサービスを起動した後にサーバを起動し、さらにクライアントを起動することができます。

    「Hello World アプリケーションの実行」では、「Hello World」アプリケーションを構成するサーバとクライアントプログラムを実行する方法を学び、それぞれを検出しあうネームサービスを実行する方法も学びます。

「文字列化されたオブジェクト参照の使用」では、ネームサービスがない場合のオブジェクト参照の作成方法を示します。

「2 台のマシンで実行する Hello World プログラム」では、クライアントとサーバという 2 台のマシンで簡単なアプリケーションを分散させる方法の一例を示します。

詳細情報

基本的な概念はチュートリアルの中で説明されていますが、「概念」の節を参照するとより詳しく知ることができます。また、チュートリアルを通じて、新規用語をクリックするとその定義を見ることができます。

現在、Object Management Group はこのサイトを更新していませんが、CORBA for Beginnners のページには CORBA 導入のための情報を提供する Web ページが紹介されています。


次のレッスン: インタフェース定義の記述方法
Java IDL トップへ

Copyright © 2001-2004 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn. View, CA.94043-1100 USA., All rights reserved.