・   「Java言語」実習 第17回

分散オブジェクト(RMI)その1

RMIによる分散オブジェクトの設計と、その利用方法を紹介します。


・ 準備1:
この後で必要となる RMIのネームサービスを提供する rmiregistryサーバを起動しておきます。 (今日の実習を終了する時に停止させるのを忘れないこと)


rmiregistry

・ 準備2:
今日も複数の端末のウィンドウが必要になります。 いずれも各自のJavaの作業用のディレクトリに移動して作業します。

・ 準備3:
セキュリティの方針を設定するためのファイルを 適当な名前(たとえば policy)で作成しておいてください。


・ 基本課題1:「分散オブジェクトの機能を定義する」
最初に分散オブジェクトが提供する機能を定めるインターフェイスを設計します。

  1. ソースファイル RemoteDictionary.java を作成しなさい。
  2. コンパイルできたら次の課題に進んでください。(まだ実行はできません。)

・ 基本課題2:「分散オブジェクトを実装する」
分散オブジェクトの機能を具体的に実装します。

  1. ソースファイル RemoteDictionaryImpl.java を作成しなさい。
    ただし、データベースの内容は各自で工夫して、 10件以上の項目があるものを用意しなさい。
  2. コンパイルできたら次の課題に進んでください。(まだ実行はできません。)

・ 基本課題3:「StubとSkelクラスの生成」
スタブとスケルトンと呼ばれる特別なクラスを用意します。

  1. rmic によるコンパイルで RemoteDictionaryImplクラスの スタブとスケルトンを自動生成します。 (まだ実行はできません。) どんな名前のファイルが生成されたかも確認しなさい。

rmic  RemoteDictionaryImpl
ls  RemoteDictionaryImpl*

・ 基本課題4:「分散オブジェクトの生成」

  1. ソースファイル DictionaryServer.java を作成しなさい。
  2. コンパイルできたら実行しますが、 その時に環境の情報として Stubファイルの存在する場所と セキュリティの方針を指定する必要があります(JDK1.2β4以降)。 次のようにして実行してください。(サーバが起動されるだけなので、 まだ通信は行われない。 この実習時間中は起動したままにしておくこと。)

java  -Djava.rmi.server.codebase="http://www.wakhok.ac.jp/~logname/java"
-Djava.security.policy="policy"  DictionaryServer

・ 基本課題5:「分散オブジェクトの呼び出し」
分散オブジェクトの呼び出しを確認するための簡単なサンプルを作成します。

  1. ソースファイル SingleLineClient.java を作成しなさい。
  2. コンパイルできたら、たとえば次のようにして実行し、結果を確認しなさい。 (サーバの起動されているマシン名と調べたいキーの情報を コマンドライン引数から与える。)
    
    java  SingleLineClient  pc4fg6  elephant
    
    

・ 基本課題5:「分散オブジェクトを利用したアプリケーション」

  1. ソースファイル DictionaryClient.java を作成しなさい。
  2. コンパイルできたら実行し結果を確認しなさい。

・ 今週のレポート課題(学内用):
ここまでの課題が終わった人は、下記の項目を tatsuo宛のメール で報告しなさい。(Subjectは java17)

  1. 課題5:の通信プログラム(DictionaryClient)で、 他の人が起動した 3個の異なるマシン上の分散オブジェクトから メッセージを受け取りなさい。 それぞれのマシン名と 分散オブジェクトが提供していた最初の項目のデータの内容を報告すること。

実習の目次   今週の講義の内容