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

連載:HORBと遊ぼう(1)

まずはHORBに触ってみよう!

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

 (2) HORBプログラムを実行してみる

■HORBを使ったJavaプログラム

 さぁて、次はいよいよHORB魔法の絨毯でネットワーク空間を飛んでみましょう。ほんとです。本当に飛ぶんですよ。あなたもこれでHORBの虜になるでしょう。なにが飛ぶって?それは後でちゃんと説明しましょう。

 HORB魔法の絨毯を使うためには、リスト3を使います。このソースはリスト2を若干変更したものです。リスト2との違いは「変更」とコメントを入れています。このソースもexamples\step1の中に入っていますので作成する必要はありません。

public class Client2{ //クラス名の変更
 public static void main( String argv[] ){
  //ホスト名取得追加
  String host = (argv.length == 1) ? argv[0] : "localhost";
  //クラス名の変更
  Test_Proxy test = new Test_Proxy("horb://"+host);
  String result = test.greeting("こんにちは、Clientです。");
  System.out.println(result);
 }
}
リスト3 Client2.java

 さて、本来の手順ならばコンパイルに入るところですが、実はexamples\step1にはコンパイル済みのファイルが入っています。ですので、まずは、ちょいと動かしてみましょう。HORB関連のコンパイルについては、次回の連載で詳しく説明するつもりです。それでも今のうちに方法を知りたいとう方はこちらを見てください。

 さあ、2つのMS-DOSプロンプトを起動し、片方でサーバ、片方でクライアントプログラムを起動し、HORBでの通信を確認してみましょう。

(1)サーバ側にHORBサーバを立ち上げる

 MS-DOSプロンプトを起動します。このMS-DOSプロンプトは仮想のサーバとして使用します。カレントディレクトリを c:\examples\step1にして、HORBコマンドでHORBサーバを立ち上げます。

c:\examples\step1>horb

(2)クライアントからClient2を起動する

 もうひとつMS-DOSプロンプトを起動します。このMS-DOSプロンプトはクライアントになります。もし、ネットワーク環境にあるマシンならサーバと異なるマシンのMS-DOSプロンプトを起動してもかまいません。

 カレントディレクトリをc:\examples\step1にして、Client2を起動してください。次のように実行結果が表示されるでしょう。ここでは同一のマシン上で2つのMS-DOSプロンプトを立ち上げ、擬似的に2台のコンピュータと見なしていますが、実際にサーバを異なるマシンに立ち上げたのなら「java Client2 マシンのホスト名」と入力してください。

c:\examples\step1>java Client2
こんにちは、Testです。

 そして、サーバとして立ち上げたMS-DOSプロンプトを見ると次のようなメッセージが表示されているはずです。

c:\examples\step1>horb
こんにちは、Clientです。


■HORBプログラムで何が起こったのか?

 実行結果を見て何が起こったかわかりますか?

 1台のマシンで仮想のサーバを立ち上げている場合少々イメージしにくいかもしれませんが、HORBを使ったサンプルでは、1つのJavaVMのメモリ上の出来事ではなくなっていることに気がつくでしょう。実行結果を見てのとおり、2つのJavaVM間でオブジェクトメッセージのやり取りがなされているのです。具体的には、ClientTestは異なるJavaVM上に作成(new)されているのです。そして、Clientからのgreetingメソッドの呼び出しは、サーバに作成されたTestによって実行されます。

 そうです。いつの間にか、Testgreetingメソッドはネットワークを超えて呼び出されているのです。greetingメソッドとその引数であるStringオブジェクトは、ネットワークの上を飛んでサーバ側にいるTestオブジェクトに運ばれます。また、Testオブジェクトのgreetingメソッドの戻り値についてもネットワークの上を飛んでクライアントに渡されているのです。

 このように、いつのまにかメソッドがネットワークを飛ぶことができるから、HORBは魔法の絨毯なのです。

■魔法の絨毯の仕掛けとは

 さて、ここでその仕掛けについて少しだけ説明しておきましょう。もっと詳しくは、この連載の中で説明していきます。

 Client2のコードの修正部分を覗いてみましょう。Testクラスは使われていないようですね。その代わりに、Test_Proxyクラスを生成(new)して、そのオブジェクトのgreetingメソッドを呼び出しているようです。

 実は、Test_Proxyとは、Testクラスの代理役を行うオブジェクトなのです。このオブジェクトをTestオブジェクトのつもりでメソッドを呼び出せば、サーバ側のTestオブジェクトにメソッドを伝達してくれるのです。

 ここで、みなさんの想像性豊かな能力は発揮してもらいましょう。まず、Client2クラスの気持ちになってください。Client2がやりたいことは、ネットワークを越えた遠くにあるTestオブジェクトのメッセージを呼び出したいのです。そこで、HORBのおまじないを使って、Testオブジェクトの幻影を作り出し(これがTest_Proxy)、そのオブジェクトにメッセージを送りだすのです。そうすれば、サーバ側にあるTestオブジェクトのメソッドが呼べるというわけです。

■HORBって何が便利なの?

 HORBで遊ぼうの第1回もこれで終わりです。HORBによるオブジェクトベースのネットワークプログラミングは、恐ろしく簡単だったでしょう。Test.javaは一切ソースの変更をしなかった点も驚かれたと思います。それもそのはずです、われわれ、HORBの生みの親と育ての親は、HORBのプログラミングインターフェイスについて、「Javaを知っている小学生や中学生でも使える、やさしい分散オブジェクト環境を目指そう」という目標を持っているのです。その点では世界一成功している分散オブジェクト技術であることは間違いありません。このほかにもHORBには誇れる機能がありますが、それはこの連載の中で少しずつ紹介します。

 最後にHORBを勉強するときに参考になるページをご紹介しておきましょう。
 それでは、次回をお楽しみに!!

●HORBのドキュメント
http://www.horb.org/horb-j/doc/index.htm
http://horb.etl.go.jp/horb-j/doc/index.htm

●HORBユーザグループのページ
http://www.horbopen.org/

●HORB関連記事の紹介
http://www.horb.org/horb-j/doc/resource.htm
http://horb.el.go.jp/horb-j/doc/index.htm

●HORBデザインパターン
http://www.mamezou.com/OOTips/tiTopPage.html

 


Index
第1回 まずはHORBに触ってみよう!
  (1) HORBのセットアップ
 HORBのダウンロードとインストール
 さっそくHORBを試してみよう!
(2) HORBプログラムを実行してみる
 HORBを使ったJavaプログラム
 HORBプログラムで何が起こったのか?
 魔法の絨毯の仕掛けとは
 HORBって何が便利なの?
 


連載記事一覧



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

注目のテーマ

Java Agile 記事ランキング

本日 月間