Java

Hello.idl のサンプルコード

このドキュメントでは、IDL から Java 言語へのマッピング仕様に従って 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 仕様の第 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-2004 Sun Microsystems, Inc.All Rights Reserved.

Sun

Java ソフトウェア