JXTA Shell (3) P2P特論 (ソフトウェア特論) 第6回 / 2005-05-25
JXTA Shell
JXTAのアーキテクチャ (3 Layer Cake)
JXTA Shell JXTAのプロトコル上で動くアプリケーション Unix の Shell のように、コマンドを利用して P2P を使った情報の公開、転送などを行う。 コマンドは自分で新規作成可能 Java言語を用いる
JXTA Shell の起動 -- ひとつめの Peer を起動 --
ディレクトリの移動 (1) "jxta-shell-2.3.3" ディレクトリに移動 サブディレクトリが2つある lib ... JXTA Shell の動作に必要な Jar ファイルがある shell ... JXTA Shell の起動スクリプト・実行ファイルなどがある
ディレクトリの移動 (2) shell ディレクトリ (およびディレクトリ中の全ファイル) を shell2 にコピーする lib ディレクトリ、shell ディレクトリのほかに shell2 ディレクトリができた shell2 ディレクトリは、もうひとつの Peer の起動に使う shell ディレクトリに移動
JXTA Shell の起動 JXTA Shell を起動する (Windowsでは) jxta.exe あるいは run.bat を起動 (Unix系OSでは) run.sh を起動
“JXTA Configurator” ウィンドウが表示される
JXTA Configurator の設定 "Peer Name" に適当な名前 (ここでは tomoharu-peer1) "Password" には適当なパスワード "Verify Password" は、"Password" 欄に入力したものを再度入力 "OK" ボタンを押す
“Initialize JXTA Keystore” ウィンドウ "Identity" が "tomoharu-peer1" であることを確認 "Identity Password" では、"JXTA Configurator" で設定したパスワードを入力する
ひとつめの Peer が起動されて、"JXTA Shell" が使えるようになる
“.jxta” ディレクトリ 設定情報・キャッシュなどは、起動ディレクトリの ".jxta" ディレクトリに保管される 2度目に起動したときは、”.jxta” ディレクトリの情報を読み出すので、”JXTA Configurator” ウィンドウは表示されない。
コマンドの実行
プロンプトの表示 ウィンドウの “JXTA>” というプロンプトにコマンドを入力する
whoami コマンド (1) プロンプトに対して “whoami” と入力する JXTA>whoami <Peer>tomoharu-peer1</Peer> <Description>Platform Config Advertisement created by : net.jxta.impl.peergroup.DefaultConfigurator</Description> <PeerId>urn:jxta:uuid-59616261646162614A7874615032503316B8DAE33952487E95978C43004EA73E03</PeerId> ...... JXTA>
(正確には Peer の告知 (Advertisement) の一部) whoami コマンド (2) JXTA>whoami <Peer>tomoharu-peer1</Peer> <Description>Platform Config Advertisement created by : net.jxta.impl.peergroup.DefaultConfigurator</Description> <PeerId>urn:jxta:uuid-59616261646162614A7874615032503316B8DAE33952487E95978C43004EA73E03</PeerId> ...... JXTA> Peer に関する情報が出力された (正確には Peer の告知 (Advertisement) の一部)
man コマンド whoami コマンドの使い方は、man コマンドで調べることができる。 JXTA>man whoami -g と -l という2つのオプションがあることがわかる。
whoami コマンド (3) JXTA>whoami -l <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jxta:PA> <jxta:PA xmlns:jxta="http://jxta.org"> <PID>urn:jxta:uuid-59616261646162614A7874615032503316B8DAE33952487E95978C43004EA73E03 </PID> <GID>urn:jxta:jxta-NetGroup</GID> <Name>tomoharu-peer1</Name> <Desc> Platform Config Advertisement created by : net.jxta.impl.peergroup.DefaultConfigurator </Desc> ......
whoami コマンド (4) -l オプションを使った。 このPeerに関する告知 (Advertisement) が表示される。 JXTA>whoami -l <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jxta:PA> <jxta:PA xmlns:jxta="http://jxta.org"> <PID>urn:jxta:uuid-59616261646162614A7874615032503316B8DAE33952487E95978C43004EA73E03 </PID> <GID>urn:jxta:jxta-NetGroup</GID> <Name>tomoharu-peer1</Name> <Desc> Platform Config Advertisement created by : net.jxta.impl.peergroup.DefaultConfigurator </Desc> ...... -l オプションを使った。 このPeerに関する告知 (Advertisement) が表示される。
Peer告知 PID 要素は Peer ID を表す。 GID 要素は、このPeerが属している Peer Group JXTA>whoami -l <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jxta:PA> <jxta:PA xmlns:jxta="http://jxta.org"> <PID>urn:jxta:uuid-59616261646162614A7874615032503316B8DAE33952487E95978C43004EA73E03 </PID> <GID>urn:jxta:jxta-NetGroup</GID> <Name>tomoharu-peer1</Name> <Desc> Platform Config Advertisement created by : net.jxta.impl.peergroup.DefaultConfigurator </Desc> ...... PID 要素は Peer ID を表す。 GID 要素は、このPeerが属している Peer Group Name 要素は、JXTA Configurator で指定した Peer の名前
whoami コマンド (5) -g オプションで、所属している Peer Group の情報を出力する。 JXTA>whoami -g <PeerGroup>NetPeerGroup</PeerGroup> <Description>default Net Peer Group</Description> <PeerGroupId>urn:jxta:jxta-NetGroup</PeerGroupId> JXTA> -g オプションで、所属している Peer Group の情報を出力する。 JXTA では、デフォルトで NetPeerGroup という Peer Group に参加している
2つめの Peer を起動
JXTA Shell の起動 別のターミナルで "jxta-shell-2.3.3/shell2" に移動 JXTA Shell を起動する (Windowsでは) jxta.exe あるいは run.bat を起動 (Unix系OSでは) run.sh を起動
“JXTA Configurator” ウィンドウが表示される
JXTA Configurator の設定 "Peer Name" に適当な名前 (ここでは tomoharu-peer2) "Password" には適当なパスワード "Verify Password" は、"Password" 欄に入力したものを再度入力
ポート番号の設定 (1) "Advanced" タブを選択する
ポート番号の設定 (2) "TCP Settings" で "9701" となっているポート番号を "9702" に変更する 同一ホストで複数の Peer を立ち上げるとき、ポート番号を変更する必要がある "OK" ボタンを押す
Peerの起動 "Initialize JXTA Keystore" ウィンドウが表示される "Identity" が "tomoharu-peer2" であることを確認 "Identity Password" では、"JXTA Configurator" で設定したパスワードを入力する ひとつめの Peer が起動されて、"JXTA Shell" が使えるようになる
Peer ID の確認 whoami -l コマンドを実行して、Advertisement 中の PID 要素をチェックしよう。 PID 要素は、Peer ID を表す。 tomoharu-peer1 と tomoharu-peer2 で Peer ID が違うことを確認しよう。
入力パイプの生成と公開
パイプ告知を用いた通信
newpipe コマンド JXTA>tomoharuPipeAdv = newpipe -n tomoharuPipe
env コマンド (1) JXTA>env ...... tomoharuPipeAdv = "Pipe Advertisement" [net.jxta.impl.protocol.PipeAdv] JXTA>
env コマンド (2) 現在の環境変数を一覧できるコマンド “tomoharuPipeAdv” という環境変数は “Pipe Advertisement” (=パイプ告知) であることがわかる。 tomoharuPipeAdv = "Pipe Advertisement" [net.jxta.impl.protocol.PipeAdv]
cat コマンド 環境変数の値を出力するコマンド tomoharuPipeAdvはパイプ告知なので、告知のXMLファイルが出力される。 JXTA>cat tomoharuPipeAdv <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jxta:PipeAdvertisement> <jxta:PipeAdvertisement xmlns:jxta="http://jxta.org"> <Id> urn:jxta:uuid-59616261646162614E50472050325033E104B85EE4B641EEBAA8C28A49556DA204 </Id> <Type>JxtaUnicast</Type> <Name>tomoharuPipe</Name> </jxta:PipeAdvertisement> JXTA> 環境変数の値を出力するコマンド tomoharuPipeAdvはパイプ告知なので、告知のXMLファイルが出力される。
パイプ告知 Id 要素、Type 要素、Name 要素がある。 Name 要素の内容は、newpipe コマンドで指定した名前 JXTA>cat tomoharuPipeAdv <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jxta:PipeAdvertisement> <jxta:PipeAdvertisement xmlns:jxta="http://jxta.org"> <Id> urn:jxta:uuid-59616261646162614E50472050325033E104B85EE4B641EEBAA8C28A49556DA204 </Id> <Type>JxtaUnicast</Type> <Name>tomoharuPipe</Name> </jxta:PipeAdvertisement> JXTA> Id 要素、Type 要素、Name 要素がある。 Name 要素の内容は、newpipe コマンドで指定した名前
mkpipe コマンド JXTA>tomoharuInputPipe = mkpipe -i tomoharuPipeAdv
publish コマンド JXTA>publish tomoharuPipeAdv
出力パイプの生成と ファイルの送受信
search コマンド (1) 公開された告知を探索するためのコマンド “search -r” で、ほかの Peer から新しい告知を見つけ出す JXTA>search -r JXTA>search JXTA>search -a Name -v tomoharuPipe JXTA Advertisement adv0 [jxta:PipeAdvertisement] (Search criteria: Attribute="Name" Value="tomoharuPipe")
search コマンド (2) “search” で、ローカルにキャッシュされた告知をリスト表示する。 JXTA>search -r JXTA>search JXTA>search -a Name -v tomoharuPipe JXTA Advertisement adv0 [jxta:PipeAdvertisement] (Search criteria: Attribute="Name" Value="tomoharuPipe") “search” で、ローカルにキャッシュされた告知をリスト表示する。 “search -a Name -v tomoharuPipe” タグ名が “Name” 内容が “tomoharuPipe” である告知を探索する
search コマンド (3) 目的の告知が見つかった! 告知の名前は adv0 JXTA>search -r JXTA>search -a Name -v tomoharuPipe JXTA Advertisement adv0 [jxta:PipeAdvertisement] (Search criteria: Attribute="Name" Value="tomoharuPipe") 目的の告知が見つかった! 告知の名前は adv0
adv0 の確認 ひとつめのPeerで作成した tomoharuPipeAdv と同じであることを確認しよう JXTA>env JXTA>cat adv0 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jxta:PipeAdvertisement> <jxta:PipeAdvertisement xmlns:jxta="http://jxta.org"> <Id> urn:jxta:uuid-59616261646162614E50472050325033E104B85EE4B641EEBAA8C28A49556DA204 </Id> <Type>JxtaUnicast</Type> <Name>tomoharuPipe</Name> </jxta:PipeAdvertisement> JXTA> ひとつめのPeerで作成した tomoharuPipeAdv と同じであることを確認しよう
mkpipe コマンド JXTA>tomoharuOutputPipe = mkpipe -o adv0
importfile コマンド JXTA>myfile = importfile hello.xml hello.xml という XML ファイルを myfile という環境変数に読み込む
myfile 環境変数の中身 JXTA>env JXTA>cat myfile <?xml version="1.0" encoding="UTF-8"?> <greeting> Hello, world ! </greeting> JXTA>
mkmsg コマンド JXTA>tomoharuMsg = mkmsg
put コマンド JXTA>put tomoharuMsg tomoharuTag myfile mkmsg で作ったメッセージに、インポートしたファイルを追加する このとき、”tomoharuTag” というタグをつける
recv コマンド JXTA>tomoharuNewMsg = recv tomoharuInputPipe ひとつめのShellに移る tomoharuInputPipe (入力パイプ) から、データを読み込む準備をする 待機モードになる
send コマンド JXTA>send tomoharuOutputPipe tomoharuMsg 2つめのShellに戻る
そのときひとつめのShellでは JXTA>tomoharuNewMsg = recv tomoharuInputPipe recv has received a message JXTA> 入力パイプがメッセージを受信した メッセージは tomoharuNewMsg に格納
tomoharuNewMsg の中身 JXTA>cat tomoharuNewMsg Message Element # 1 name : / tomoharuTag type : text/xml;charset=UTF-8 body : (78 bytes) JXTA> tomoharuTag というものがある
get コマンド JXTA>tomoharuNewFile = get tomoharuNewMsg tomoharuTag 受け取ったメッセージからデータを取り出す。 データは tomoharuNewFile に格納 タグとして “tomoharuTag” を指定
tomoharuNewFile の中身 JXTA>cat tomoharuNewFile <?xml version="1.0" encoding="UTF-8"?> <greeting> Hello, world ! </greeting> JXTA>
exportfile コマンド JXTA>exportfile received.xml tomoharuNewFile tomoharuNewFile の中身を received.xml ファイルに保存する
パイプ告知を用いた通信