Java IDL入門

Java 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ページが紹介されています。


Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.