<
Java

Hello.idl のサンプルコード

バージョン 1.4 の JavaTM 2 SDK, Standard Edition には、数多くの有効な新しい Java IDL 機能が含まれています。新機能の一覧については、「変更の概要」を参照してください。 IDL-to-Java コンパイラ (idlj) は、ポータブルオブジェクトアダプタに必要な CORBA 標準機能をサポートするようになりました。 このドキュメントでは、IDL to Java Language Mapping Specification に従って IDL-to-Java コンパイラで生成したコード (仕様の詳細については準拠に関するドキュメントを参照)、およびサンプルのクライアントアプリケーションとサーバアプリケーションについて説明します。

ここに記載したコードの詳細な説明については、入門チュートリアル「Java IDL 入門」を参照してください。


インタフェース定義の Hello.idl

次のファイル (Hello.idl) は OMG インタフェース定義言語 (IDL) で記述されたもので、CORBA オブジェクトの sayHello() オペレーションが文字列 (string) を返し shutdown() メソッドが ORB を停止させています。 OMG IDL は、分散型アプリケーションでプログラミング言語に依存しないオペレーションインタフェースを指定するために設計された、純粋な宣言型の言語です。 IDL はさまざまなプログラミング言語にマッピングできます。 IDL を Java にマッピングする方法は「IDL と Java 言語のマッピングの概要」で説明しています。

OMG IDL の構文とセマンティクスの詳細は、OMG の Web サイトで CORBA Specification の第 3 章を参照してください。

Hello.idl

module HelloApp
{
  interface Hello
  {
  string sayHello();
  oneway void shutdown();
  };
};

生成されるファイル

idlj コンパイラは、IDL-to-Java マッピングを使って IDL インタフェース定義を対応する Java インタフェース、クラス、およびメソッドに変換します。次に、それを使ってクライアントとサーバコードを実装できます。 次のファイルは、次のコマンドを使って IDL-to-Java コンパイラで Hello.idl をコンパイルすると生成されます。



シグニチャーインタフェースの Hello.java

シグニチャーインタフェースファイル Hello.java は、org.omg.portable.IDLEntityorg.omg.CORBA.Object、およびオペレーションインタフェース HelloOperations を継承したものです。 シグニチャーインタフェースは、指定した型のインタフェースを他のインタフェースで使用する場合にメソッド宣言のシグニチャー型として使用します。 クライアントの観点から述べると、CORBA Hello オブジェクトのオブジェクト参照は、このインタフェースを実装します。

注: スタブは Hello インタフェースを実装します。ここで各メソッドのコードを生成して引数を整列化してメソッドを呼び出し、引数の整列化を解除します。



オペレーションインタフェースの HelloOperations.java

Java オペレーションインタフェース HelloOperations.java はサーバ側のマッピングで使用され、同じ場所にあるクライアントとサーバに最適化された呼び出しを提供する機構として使用されます。 サーバの開発者は、オペレーションインタフェースで指示されたメソッドに対して実装を提供します。

このインタフェースには sayHello() メソッドおよび shutdown() メソッドが含まれます。 IDL-to-Java マッピングは、IDL インタフェースで定義されたオペレーションをすべてこのファイルに組み込み、スタブとスケルトンで共有します。

注: サーバの開発者は、通常、HelloPOA を拡張し、オペレーションインタフェースで提供されたメソッドに対して実装を提供します。



Helper クラスの HelloHelper.java

Java クラス HelloHelper は補助的な機能を提供します。 特に、CORBA オブジェクト参照を適切な型にキャストするための narrow() メソッドは重要な役割を果たします。 ヘルパークラスは、CORBA ストリームへのデータ型の読み書きおよび Any からのデータ型の挿入および抽出を担当します。 Holder クラスは Helper クラスのメソッドに入出力を委譲します。



Holder クラスの HelloHolder.java

Java クラス HelloHolder には、Hello 型のパブリックインスタンスメンバが入ります。 IDL 型のパラメータが out または inout であれば Holder クラスが使用されます。 ここでは、org.omg.CORBA.portable.OutputStream および org.omg.CORBA.portable.InputStream 引数に対するオペレーションが規定されます。これらの引数は CORBA には存在しますが、Java のセマンティクスには簡単にマッピングできません。 Holder クラスは Helper クラスのメソッドに入出力を委譲します。 Holder クラスは org.omg.CORBA.portable.Streamable を実装します。



クライアントスタブの _HelloStub.java

Java クラス _HelloStub は、クライアント側マッピングのスタブファイルです。 これは org.omg.CORBA.portable.ObjectImpl を継承し、Hello.java インタフェースを実装します。



サーバスケルトンの HelloPOA.java

Java クラス HelloImplPOA はサーバ側のマッピングのスケルトンファイルで、サーバ用に基本的な CORBA 機能を提供します。 これは org.omg.PortableServer.Servant を継承し、InvokeHandler インタフェースと HelloOperations インタフェースを実装します。 サーバクラスの HelloServant は、HelloPOA を継承します。



アプリケーションの完了

アプリケーションを完了するには、開発者がクライアントとサーバのコードを記述する必要があります。

一時サーバの HelloServer.java

ここで紹介するサーバは、サーバントとサーバの 2 つのクラスで構成されます。 サーバントである HelloImpl は、Hello IDL インタフェースの実装です。つまり、Hello の各インスタンスは、HelloImpl のインスタンスにより実装されます。 サーバントは、idlj コンパイラにより例の IDL から生成される HelloPOA のサブクラスです。

サーバントには、IDL オペレーションごとに 1 つのメソッドが含まれます。この例では、sayHello() および shutdown() メソッドです。 サーバントメソッドは、Java の通常のメソッドと変わりはありません。ORB の処理、引数や結果の整列化などを行うコードは、スケルトンで実装します。

次の例では、一時サーバのコードを示します。 持続サーバを使った「Hello World」アプリケーションについては、持続サーバを使った Hello World の例を参照してください。

次のコードは、開発者によって記述されます。



クライアントアプリケーションの HelloClient.java

次の例では、Java クライアントアプリケーションを示します。 CORBA クライアントは、サーブレット、JSP、アプレットなどとして記述できます。



Java CORBA アプリケーションのコンパイルと実行

Java CORBA アプリケーションのコンパイルと実行の詳細については、「Hello World の構築方法と実行方法」を参照してください。



Copyright © 2001 Sun Microsystems, Inc. All Rights Reserved.

コメントの送付先: JavaIDL@eng.sun.com.

Sun

Java ソフトウェア