一時ディレクトリを作成して、作業の段階ごとにチュートリアルファイルを保存しておくと良いでしょう。
注: レッスンの課題を実行するためには、idltojava コンパイラをダウンロードする必要があります。レッスンのコマンドとトラブルシューティングの指示は、このバージョンの idltojava にだけ適用されます。
レッスンの概要
このレッスンでは、Hello World プログラム用の簡単な IDL インタフェースを記述します。IDL インタフェースには、アプリケーションのクライアント部分とサーバ部分の間で、どんなオペレーションと属性を利用できるかを指定する規約を定義します。OMG IDL はプログラミング言語に依存しません。実装コードを記述する前に、OMG IDL を Java にマッピングする必要があります (IDL ファイルに対して idltojava を実行すると、自動的にマッピングされる)。
このレッスンでは次のことを行います。
完成した Hello.idl ファイルを見るには、Hello.idl をクリックしてください。
Hello.idl の記述
OMG IDL は、分散型アプリケーションでプログラミング言語に依存しないオペレーションインタフェースを指定するために設計された、純粋な宣言型の言語です。OMG では IDL から別の言語へのマッピングを指定します。これらの言語には C、C++、Smalltalk、COBOL、Ada、Java があります。 OMG IDL の文をマッピングすると、選んだプログラム言語の対応する文に翻訳されます。idltojava ツールを使うと、IDL インタフェースを Java にマッピングしてクライアントクラスを実装できます。次に同じ IDL を C++ にマッピングし、C++ でサーバを実装すると、Java クライアントと C++ サーバは ORB を通じて、同一の言語で記述された場合と同様に相互にやりとりができます。
Hello World の IDL は、1 つのインタフェースにオペレーションが 1 つという、とても簡単なものです。次の 3 ステップで完成します。
CORBA モジュールは、関連するインタフェースと宣言のコンテナの役割を果たす名前空間です。このモジュールは、Java パッケージと厳密に対応しています。IDL ファイル内の各モジュール文は、それぞれ 1 つの Java パッケージ文にマッピングされます。
module HelloApp { // Add subsequent lines of code here. };
この IDL に対して idltojava を実行すると、 Java のコードでパッケージ文が生成されます。
インタフェースの宣言
Java インタフェースと同様に、CORBA インタフェースは、あるオブジェクトが他のオブジェクトに対して持つ API 規約を宣言します。IDL のインタフェース文はそれぞれ Java インタフェース文にマッピングされます。
作成した Hello.idl ファイルに、次のインタフェース文を追加します。
module HelloApp { interface Hello // Add { // these // four }; // lines. };
ファイルを保存します。IDL をコンパイルすると、この文からインタフェース文が Java コードで生成されます。クライアントクラスとサーバクラスでは、Hello インタフェースの実装方法が異なります。
オペレーションの宣言
CORBA のオペレーションは、サーバが、そのサーバを呼び出したクライアントに代わって実行する動作のことです。IDL の各オペレーション文から、対応する Java インタフェースのメソッド文が生成されます。
Hello.idl ファイルに、次のオペレーション文を追加します。
module HelloApp { interface Hello { string sayHello(); // Add this line. }; };
ファイルを保存します。Hello World はオペレーションが 1 つしかない小さなアプリケーションなので、Hello.idl はこれで完成です。ここでテキストエディタを終了してもかまいません。
Hello.idl の IDL から Java へのマッピング
idltojava
ツールは OMG IDL ファイルを読み込んで、必要な Java ファイルを作成します。デフォルトの設定では、idltojava はクライアントとサーバの両方のファイルが必要な場合、ツールの名前と IDL ファイルの名前だけを入力することになっています。Hello World プログラムもこの設定を使用します。
idltojava Hello.idl
ディレクトリの内容を一覧表示してみてください。HelloApp という名前のディレクトリが作成され、その中に 5 つのファイルが保存されていることが分かります。テキストエディタで Hello.java を開くと、次の内容になっているはずです。
/* Hello.java as generated by idltojava */ package HelloApp; public interface Hello extends org.omg.CORBA.Object { String sayHello(); }
このインタフェースは簡単なので、IDL 文が生成された Java 文にどのようにマッピングされているかがよく分かります。
IDL 文 | Java 文 |
---|---|
module HelloApp | package HelloApp; |
interface Hello | public interface Hello |
string sayHello(); | String sayHello(); |
extends 文に注目してください。必要な CORBA 機能を確実に備えるために、すべての CORBA オブジェクトは org.omg.CORBA.Object から派生しています。必要なコードは idltojava により生成されます。ユーザがマッピングを行う必要はありません。
idltojava コンパイラの出力について
idltojava ではコマンド行で指定するオプションに基づき、複数のファイルが生成されます。これらのファイルには標準の機能がありますが、プログラムを配置して実行するまでは無視してもかまいません。次の 5 つのファイルが生成されます。
IDL インタフェースを記述するときは、目的の分散型アプリケーションに必要なすべてのファイルが生成されるようにプログラムを記述します。それ以外に必要な作業は、クライアントおよびサーバクラスの実装だけです。以降のレッスンでは、 HelloClient.java と HelloApplet.java の 2 つのクライアントクラス、および HelloServer.java クラスを作成します。
トラブルシューティング
次のレッスン | チュートリアルのホーム | Hello.idl
ホーム |