Java IDL: コールバックオブジェクトを使用する例


クライアントプログラムでは、サーバ側で起こった変更や更新への対応が必要になることがあります。たとえば、株価サーバ上で株価が更新されるたびに、クライアントのグラフ表示プログラムやスプレッドシートプログラムでも更新を行いたい場合などです。このような場合、クライアントには 2 つのオプションがあります。

このドキュメントの例では、クライアントプログラムからサーバにコールバックオブジェクトを渡す方法と、その後にサーバからクライアントに変更を通知する方法について説明します。ここでは、単純なアプリケーションを拡張したコードを紹介します。アプリケーションを簡略化した箇所については、コード内にコメントを記載します。

このドキュメントで紹介するコードは、次のようなものです。

プログラム例のコンパイル方法と実行方法についての説明も掲載します。

コールバックの例: 中級レベル

IDL ファイルの記述

このアプリケーション例で使用する callback.idl ファイルは、次のようなものです。

サーバコードの記述

このアプリケーション例で使用する Server.java ファイルは、次のようなものです。

MessageServer 実装の記述

このファイルのコードでは、新しいクライアントを登録し、メッセージを受け付けた後、登録されたクライアントにそのメッセージを中継します。このアプリケーション例で使用する MessageServerImpl.java ファイルは、次のようなものです。

クライアントコードの記述

このアプリケーション例で使用する Client.java ファイルは、次のようなものです。

Listener 実装の記述

Listener は、サーバからのメッセージ受信を識別すると、そのメッセージをクライアントに表示します。このアプリケーション例で使用する ListenerImpl.java ファイルは、次のようなものです。

サンプルのコンパイル方法と実行方法についての説明

このアプリケーション例を実行するには、以下の手順をサーバマシンで実行します。

  1. 例を以前に実行したことがある場合は、生成された既存のファイルを削除します。UNIX オペレーティング環境では、次のようなコマンドを使用します。
      rm -rf ./classes ./orb.db
      

  2. スタブとスケルトンを生成します。まず、スタブとスケルトンを置くディレクトリを作成し、次に、idlj コンパイラを実行してスタブとスケルトンを生成します。コマンドは次のようになります。
      mkdir -p ./classes
      <path_to_java>/bin/idlj -fall -td ./classes callback.idl
      

  3. 次のようにして、.java ファイルをコンパイルします。
      <path_to_java>/bin/javac -classpath ./classes -d ./classes *.java
      

  4. 次のようにして、orbd ネームサービスを開始します。
      <path_to_java>/bin/orbd -ORBInitialPort 1050 -ORBInitialHost <host_name> &
      

  5. 次のようにして、サーバを実行します。
      <path_to_java>/bin/java -classpath ./classes Server -ORBInitialPort 1050
      

サーバを開始すると、端末ウィンドウに次のような出力が表示されます。

このプロンプトを使用してクライアントにメッセージを送信することになりますが、その前に、クライアントアプリケーションを開始する必要があります。クライアントの端末で次の手順を実行して、クライアントアプリケーションを実行します。クライアントコードの properties セクションで、サーバが実行されているホスト名を使用したことを確認してください。

クライアントアプリケーションからの出力が、次のような形式で表示されます。

コールバックを使用した機能を表示するには、サーバ端末のプロンプトにデータを入力します。そうすると、そのデータがすべてのクライアント端末に表示されます。通知の内容には、クライアントが関心を持つものを何でも含めることができます。

一例として、フットボールの試合のスコアが変化したときに、クライアントに通知してみます。

上記のようなメッセージが送信されると、クライアントに次のように表示されます。


ホーム

Copyright © 2002-2004 Sun Microsystems, Inc. All Rights Reserved.