分散オブジェクト環境を学ぶ
連載:HORBと遊ぼう(1)
まずはHORBに触ってみよう!
萩本順三HORB Openマネージャ
株式会社豆蔵
2000/10/26
(2) HORBプログラムを実行してみる |
■HORBを使ったJavaプログラム
さぁて、次はいよいよHORB魔法の絨毯でネットワーク空間を飛んでみましょう。ほんとです。本当に飛ぶんですよ。あなたもこれでHORBの虜になるでしょう。なにが飛ぶって?それは後でちゃんと説明しましょう。
HORB魔法の絨毯を使うためには、リスト3を使います。このソースはリスト2を若干変更したものです。リスト2との違いは「変更」とコメントを入れています。このソースもexamples\step1の中に入っていますので作成する必要はありません。
public class Client2{ //クラス名の変更 |
リスト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 |
そして、サーバとして立ち上げたMS-DOSプロンプトを見ると次のようなメッセージが表示されているはずです。
c:\examples\step1>horb |
■HORBプログラムで何が起こったのか?
実行結果を見て何が起こったかわかりますか?
1台のマシンで仮想のサーバを立ち上げている場合少々イメージしにくいかもしれませんが、HORBを使ったサンプルでは、1つのJavaVMのメモリ上の出来事ではなくなっていることに気がつくでしょう。実行結果を見てのとおり、2つのJavaVM間でオブジェクトメッセージのやり取りがなされているのです。具体的には、ClientとTestは異なるJavaVM上に作成(new)されているのです。そして、Clientからのgreetingメソッドの呼び出しは、サーバに作成されたTestによって実行されます。
そうです。いつの間にか、Testのgreetingメソッドはネットワークを超えて呼び出されているのです。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を勉強するときに参考になるページをご紹介しておきましょう。
それでは、次回をお楽しみに!!
http://www.horb.org/horb-j/doc/index.htm
(http://horb.etl.go.jp/horb-j/doc/index.htm)
●HORBユーザグループのページ
http://www.horbopen.org/
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って何が便利なの? |
|
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|