分散オブジェクト環境を学ぶ

連載:HORBと遊ぼう(2)

分散オブジェクトを体験しよう!

萩本順三
HORB Openマネージャ
株式会社豆蔵
2000/11/28

 (2) HORBのインスタンス管理

■Javaのインスタンス管理

 皆さん、「インスタンス」というオブジェクトの用語を知っていますか? インスタンスとは、プログラム実行時に、クラスからJavaのnew演算子で生成されるオブジェクトのことです。リスト3リスト4を見てください。

 リスト3のTest2.javaは、Test2インスタンスごとに管理されるname属性(この属性のことをインスタンス属性と呼びます)を持っています。

 リスト4のLocalInstanceTestは、Test2クラスから2つのインスタンスを生成(new)して、test1変数とtest2変数で参照しています。そしてそれぞれのインスタンスにsetNameメソッドを呼び出して、インスタンスごとに個別に管理されているname属性を変更しています。

 public class Test2{
  private String name;
  public void setName(String name){
    this.name = name;
  }
  public void print(){
    System.out.println("私の名前は "+name+ "です。");
  }
}
リスト3 Test2.java

public class LocalInstanceTest{
  public static void main( String argv[] ){
    Test2 test1 = new Test2();
    Test2 test2 = new Test2();
    test1.setName("Test1");
    test2.setName("Test2");
    test1.print();
    test2.print();
  }
}
リスト4 LocalInstanceTest.java

 このプログラムの実行結果は次のようになります。

c:\examples\step2>java LocalInstanceTest
私の名前は Test1です。
私の名前は Test2です。

 そして、そのイメージ図は、図7のとおりです

図7 Javaローカルなインスタンスの世界

 どうですか、それぞれのインスタンスに属性とメソッドが管理されているのがお分かりになりますか?

 ソースはここからダウンロードしてください。

■HORBによるリモートオブジェクトのインスタンス管理

 では、次は分散オブジェクトにおけるリモートなオブジェクトのインスタンス管理はどうなっているのか説明しましょう。とはいっても、Javaのインスタンスの意味が分かる方には、簡単なことですので心配しないでください。

 リスト5を見てください。RemoteInstanceTestは、Test2_Proxyインスタンスを2つ生成してtest1変数とtest2変数を使って2つのTest2_Proxyインスタンスを参照しています。このときTest_Proxyインスタンスは遠くのマシンに存在するかもしれないTestインスタンスの代理オブジェクトとして働いてくれます。つまり、test1変数とtest2変数は、2つのTestインスタンスをリモートで参照しているという役割を果たしているのです(コラム参照)

public class RemoteInstanceTest{
  public static void main( String argv[] ){
    String host = (argv.length == 1) ? argv[0] : "localhost";
    Test2_Proxy test1 = new Test2_Proxy("horb://"+host);
    Test2_Proxy test2 = new Test2_Proxy("horb://"+host);
    test1.setName("Test1");
    test2.setName("Test2");
    test1.print();
    test2.print();
  }
}
リスト5 RemoteInstanceTest.java

 では、さっそくコンパイル・実行して確認してみましょう。

(1)コンパイル

 コンパイル実行は、まずTest2.javaをhorbcによりコンパイルし、次に、RemoteInstanceTest.javaをjavacによりコンパイルしてください。horbcの際に、private変数はコピーできないというワーニングがでますが、これはネットワーク間でオブジェクトをコピーする際にだけ関係するものですので、このワーニングが表示されても気にしないでください。

c:\examples\step2>horbc -delete Test2.java
      compiling Test2.java
      generating Test2_Proxy.java
      Warning: Test2: private variable 'name' will not be copied
      when this object is ransfered by Proxy.
      compiling Test2_Proxy.java
      generating Test2_Skeleton.java
      compiling Test2_Skeleton.java
c:\examples\step2>javac RemoteInstanceTest.java


(2)実行

 まず、サーバ側でHORBを立ち上げます。サーバ名は、MyServerとします。

c:\examples\step2>horb

 次に、クライアントマシンから RemoteInstanceTestを実行します。

c:\examples\step2>java RemoteInstanceTest MyServer

 最後に、HORBを立ち上げたサーバの出力結果を見てください。以下のように、2つのインスタンスが作成され、それぞれにインスタンス属性のnameを管理しているのが分かるでしょう。

c:\examples\step2>horb
私の名前は Test1です。
私の名前は Test2です。

 図8にイメージ図を示します。いかがですか、test1変数とtest2変数は、2つのTestインスタンスをリモートで参照していることがお分かりでしょうか? このようにTest2_Proxyのようなhorbcで生成された代理オブジェクトは黒衣となって、実際のTestインスタンスをそれぞれに参照することができるのです。

図8 HORBによるリモートインスタンスの管理

 今回は、この辺でおしまいにしておきましょう。この連載では、今後HORBの新規開発内容や、開発事例などや、HORBの目指す分散オブジェクトの将来像についても語っていければと思います。

 皆さんからの内容についてのご要望にもおこたえしていきたいと思います。Javaフォーラムの掲示板にどんどん書き込んでください。

 ところで、2001年3月2日(金)にHORBの一大イベント「第4回 HORBシンポジウム」が開催されます。 特に、企業での実例や、学生の方々からのフレッシュな 寄稿をお待ちしていますので、みなさんもチャレンジし てみてはいかがでしょうか。

 では、次回をどうぞお楽しみに!!

●コラム:HORBにおける代理オブジェクトの役割

 この説明を読んでいる方の中にはほかの分散オブジェクト製品を使った経験がある方も多いと思います。そのような方は、HORBの代理オブジェクトの作成とリモートオブジェクト接続は便利だと思った方も多いでしょうが、何か違和感があるように感じられた方も多いでしょうね。そうなんですよ、この方法はHORB独特のものなんです。

 RMIやCORBAなど通常の分散オブジェクト製品の場合、サーバ・アプリケーションにてリモートオブジェクトを登録した後、クライアントアプリケーションから代理オブジェクトを検索(lookup)するという手続きとなります。実は、HORBもこのようなlookup機能をサポートしています。HORBでは、ここで説明している方法を生成モデル、RMI、CORBAのようなlookup方式を接続モデルと呼んでいます。

 また、CORBAのようにネットワーク透過性を実現するには、lookup方式を使ってリモートオブジェクトのインターフェイスにアクセスして接続されるホスト情報をクライアントから隠すべきだと思われる方もいるでしょう。これもHORBのextensionのネーミングサービスを使えば可能です。

 lookup方式は、Java入門者にとって少々面倒で分かりづらいために、今のところバツサリ省略していますが、この連載の後ろのほうで取り上げていくつもりです。

 なんだ、後で説明するって! もう待ちきれないぞ! と思う方は、以下のURLにアクセスしてみてください。生成モデル、接続モデルについて、詳しい説明がでています。また、これらの情報はダウンロードページからも取得することができます。

http://www.horb.org/horb-j/doc/index.htm

上記のサイトのコンテンツの一部をご紹介します。

・HORB Flyer's Guide
とりあえず使ってみたい人に全般的なHORB機能について、やさしく書いてあります

・HORB ver 2.0 Beta1 Core パッケージ
HORB Flyer's Guideの上級者編

・HORB Extension naming ver1.0 b1 パッケージ
ネーミングサービスのドキュメント


 


Index
第2回 分散オブジェクトを体験しよう!
  (1) HORBが動作する仕組み
 HORBを使ったアプリケーションを動かす準備
 ネットワーク環境で動かす準備
 さあ、実行してみよう!
 頑張る黒衣たち
 代理オブジェクトのコンストラクタ引数
 メッセージをやり取りするまでの流れ
(2) HORBのインスタンス管理
 Javaのインスタンス管理
 HORBによるリモートオブジェクトのインスタンス管理
 


連載記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間