分散オブジェクト環境を学ぶ
連載:HORBと遊ぼう(5)

コンフィグレーションファイルで遊ぼう

 

(3)コンフィグレーションファイルを使ったさまざまな起動法

 次は、HORBServerスレッドを2つ立ち上げてみましょう。ポート番号は8000番と9000番です。6行目のdebugはHORBサーバがどのように動いているか詳細情報を出力します。
17行目の「object」キーワードは、このオブジェクトはポート9000にしか接続できないという意味です(リスト4参照)

記述 説明
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
#
# HORB Servers
#
horbServer[0].name=HORBServer1(9000)
horbServer[0].port=9000
horbServer[0].debug=true

horbServer[1].name=HORBServer2(8000)
horbServer[1].port=8000
horbServer[1].debug=true
#
#
# auto start objects
#
object[0].className=Test2
object[0].objectID=testObj1
object[0].port=9000


object[1].className=Test2
object[1].objectID=testObj2
コメント行
  
  
HORBサーバの名前
HORBサーバのポート番号
デバッグ表示=YES
もう1つのHORBサーバの名前
HORBサーバのポート番号
デバッグ表示=YES




(1個目のデーモンオブジェクト)
リモートオブジェクトのクラス名
リモートオブジェクトの名前
接続するポート
(2個目のデーモンオブジェクト)
リモートオブジェクトのクラス名
リモートオブジェクトの名前
リスト4 testconf2.conf


■起動してみよう


 ではリスト4のコンフィグレーションファイルを使ってHORBサーバを起動してみましょう。

●HORBサーバの起動

 図5のようにHORBServerが2つ起動されたことが表示されます。

prompt>horb -conf testconf2.conf
main: HORBServer1(9000) started
main: HORBServer2(8000) started
Test2(testObj1) started
Test2(testObj2) started
図5 testconf2.confを使用したHORBサーバの立ち上げ

●クライアントプログラムの起動

 以下に3つの起動例を示します。結果の「○」は正常に起動されるパターン、「×」は異常終了するパターンです。

結果 起動パラメータ
prompt>java RemoteTest localhost:9000/testObj1 localhost:8000/testObj2
prompt>java RemoteTest localhost:9000/testObj1 localhost:9000/testObj2
× prompt>java RemoteTest localhost:8000/testObj1 localhost:8000/testObj2
図6 クライアントの立ち上げ

 うまくいったら、HORBサーバを起動した画面に、リモートオブジェクトが出力した結果とHORBServerが出力した詳細情報が表示されます(図7)

prompt>horb -conf testconf1.conf
main: HORBServer1(9000) started
main: HORBServer2(8000) started
Test2(testObj1) started
Test2(testObj2) started
Thread-4: connecting to object testObj1
Thread-4: HORB object testObj1 has been connected
Thread-4: Waiting for method call
Thread-4: connecting to object testObj2
Thread-4: HORB object testObj2 has been connected
Thread-4: Waiting for method call
Thread-4: objectID= testObj1 classNo= 1 methodNo= 1002
Thread-4: objectID= testObj2 classNo= 1 methodNo= 1002
Thread-4: objectID= testObj1 classNo= 1 methodNo= 1001
私の名前は Test1です。
Thread-4: objectID= testObj2 classNo= 1 methodNo= 1001
私の名前は Test2です。
Thread-4: disconnected - java.net.SocketException: Connection reset by peer: JVM
_recv in socket input stream read
Thread-4: close connection
図7 HORBサーバの実行結果

■動作イメージ

 動作イメージは図8のようになります。ポート9000とポート8000のHORBServerスレッドが起動されていることが分かります。「testObj1」デーモンオブジェクトは、ポート9000のみ接続要求を受け付けます(リスト4の17行目)。「testObj2」デーモンオブジェクトは、ポート指定がありませんので、どちらのポートからでも接続できます。

図8 動作イメージ

■そのほかの設定情報

 「horbServer」キーワードには、プロトコルを変更するprotocoltype指定があります。例えば、デフォルトのプロトコル「horb」を変更するには、次のように指定します。

horbServer[0].name=HORBServer1(9000)
horbServer[0].port=9000
horbServer[0].protocoltype=dataio
object[0].className=Test2
object[0].objectID=testObj1
object[0].port=9000
図9 プロトコルを変更する(testconf3.conf)

 このように指定されたhorbServerに接続するには、クライアントから次のようにプロキシを作成します。こうすることで、testObj1デーモンオブジェクトは、ポート番号9000番に割り付けられ、dataioプロトコルを使ってメッセージの送受信を行うように限定されます。
 dataioとは、HORBから提供されているDataStream形式(オブジェクトシリアライザを使用しない)のプロトコルです。

new Test2_Proxy("detaio://localhost:9000/testObj1");
図10 クライアントコード

 

 
「マルチクライアント・マルチスレッドからの利用」


Index

第5回 コンフィグレーションファイルで遊ぼう

  (1)接続モデルのおさらい
(2)コンフィグレーションファイルの使い方
 起動してみよう

 動作イメージClientの起動
(3)コンフィグレーションファイルを使ったさまざまな起動方法
 起動してみよう

 動作イメージ
 そのほかの設定情報
 代理オブジェクトの引数
  (4)HORB実験室「マルチクライアント・マルチスレッドからの利用」
 コンパイル
 動作イメージ
 マルチクライアントからの利用
 動作イメージ
 

 

連載記事一覧



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

注目のテーマ

Java Agile 記事ランキング

本日 月間