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


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

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

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

コンパイル方法と実行方法についての説明 プログラム例も用意されています。

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

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.