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

連載:HORBと遊ぼう(4)

HORBでサーバアプリケーションを作ろう

萩本順三
HORB Openマネージャ
株式会社豆蔵
2001/2/18


 (3) サーバアプリケーションを作る

 ここまでで接続モデルの簡単な例を示しました。ここまでの例では、サーバ側で生成されるTest2リモートオブジェクトはHORBサーバによって自動的に生成されたものです。ここからは、生成モデルのもっと高度な使い方を説明しましょう。

 まず、サーバ側にアプリケーションを起動し、その中からリモートオブジェクトを名前付きでHORBサーバに登録する方法を示します。この方法を使うと、生成モデルの欠点として挙げた、「すでに稼働中のオブジェクトのサービスをクライアントから受ける」ということができるようになります。

 リスト4は、サーバ側で起動するアプリケーションです。まず4行目で、HORBServerを起動しています。このときポート番号を指定します。HORBのデフォルトポート番号は8887番ですが、ここでは9000番を使ってみましょう。この命令で、HORBサーバは別スレッドを立ち上げ、HORBのリモートサービスを開始します。あ、そうそう、1行目のhorb.orbパッケージのインポートをお忘れなく。

 5行目、6行目でTest2クラスのオブジェクトを作成しています。この2つのインスタンスをリモートオブジェクトとして登録しているのが、7行目と8行目です。このようにHORBサーバへリモートオブジェクトを登録するには、registerObjectメソッド(HORBServerのクラスメソッド)を使います。このメソッドの引数は、左から「リモートクラスのクラス名」、「リモートクラスのインスタンス」、「オブジェクトID」です。

 このプログラムは、9行目まできてハイ終わりというように見えるでしょう。実際は、4行目で起動されたHORBサーバのスレッドは、起動されたスレッドが終わるまでプロセスが終了しない(デーモン)として起動されていますので、このプログラムは終了せずにコマンドラインから強制終了するまで、HORBのリモートサービスを続けるのです。

001:import horb.orb.*;
002:public class ServerApp{
003:   public static void main( String argv[] ){
004:     HORBServer hs = new HORBServer(9000);// ポート番号9000番で立ち上げる
005:     Test2 test1 = new Test2();
006:     Test2 test2 = new Test2();
007:     HORBServer.registerObject("Test2", test1, "testObj1");
008:     HORBServer.registerObject("Test2", test2, "testObj2");
009:   }
010:}
リスト4 ServerApp.java

 では次にコンパイルと実行について説明します。

■ コンパイル

 コンパイルは、次のとおりです。

>horbc Test2.java
    compiling Test2.java
    generating Test2_Proxy.java
Warning: Test2: private variable 'name' will not be copied when this object is transfered by Proxy.
    compiling Test2_Proxy.java
    generating Test2_Skeleton.java
    compiling Test2_Skeleton.java
>javac RemoteTest.java ServerApp.java

 コンパイルが完了したら、実行しましょう。

■ Serverの起動

 今度は、horbを起動するのではありません。ServerAppを起動して、ServerApp の中でHORBがスレッドとして起動されます。

>java ServerApp

■ Clientの起動

 起動パラメータでは、ServerAppで登録されたホスト名とオブジェクトIDを使用します。また、ServerAppの中でHORBサーバはポート番号9000で起動しましたよね。よってクライアントの起動パラメータは、次のように指定してください。

>java RemoteTest localhost:9000/testObj1 localhost:9000/testObj2

■ 実行結果

 サーバ側に以下のように表示されます。この結果から、ServerAppの中で生成した2個のTest2オブジェクトにクライアントの代理オブジェクトがそれぞれ接続されたことが分かりますか。この実行イメージは図3のようになります。

>java ServerApp
私の名前は Test1です。
私の名前は Test2です。

図3 クライアントから2個のリモートオブジェクトに接続する

 今回は、生成モデルと接続モデルについて解説し、最後に接続モデルの例としてサーバアプリケーションからリモートオブジェクトを登録する方法を説明しました。次回は、コンフィグレーションファイルを使ってHORBサーバのさまざまな起動形態について見ていきましょう。また、アクセスコントロールリスト(ACL)を使ったユーザー認証やプロトコルの拡張についても挑戦したいと思います。では、3月2日のHORBシンポジウムでお会いしましょう。


 

Index

第4回 HORBでサーバアプリケーションを作ろう

  (1) 生成モデルって何だ?
  (2) 接続モデルって何だ?
 HORBサーバの起動

 Clientの起動
 実行結果
 代理オブジェクトの引数
(3)サーバアプリケーションを作る
 コンパイル
 Serverの起動
 Clientの起動
 実行結果
 

連載記事一覧



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

注目のテーマ

Java Agile 記事ランキング

本日 月間