Sun SPOTにおけるSSRMIの実装
Total Page:16
File Type:pdf, Size:1020Kb
Vol.2010-SE-167 No.18 情報処理学会研究報告 2010/3/18 IPSJ SIG Technical Report 可能で,各デバイスを使用して無線によるネットワークを構築することができる. Sun SPOT には標準で温度,照度,加速といった種類のセ Sun SPOT における SSRMI の実装 ンサが用意されている.他にも汎用の IO ピンやアナログの入 力ピンなどが用意されているため,ユーザによるセンサの追 1 1 加などにも対応し,センサ類だけでなくモーターの制御やそ 大 宮 佑 介† 杉山安洋† の他,高度な制御に用いることも可能である.これらを無線 無線センサネットワークを容易に構築する事の出来るデバイスとして Sun SPOT ネットワークを利用して活用することが可能で,様々な分野 がある.Sun SPOT を使用すれば Java 言語を用いて容易にプログラムを作成し動作 に応用が期待されている. させる事が可能である.しかし,Sun SPOT ではネットワーク上に存在するリモー 一般的にネットワークを使用したプログラムは複雑になる トオブジェクトのメソッドを呼び出す技術が実装されていない.そこで,本研究では Sun SPOT 向けのリモートメソッド呼び出しフレームワークとして SSRMI を提案 ことが多く,開発者にとって大きな負担となる場合が多い. し,そのアーキテクチャと実装方法について述べる. Java SE(Standard Edition) ではネットワークを通してのメ ソッド呼び出しを容易に実現することができる技術の一つで Implementation of SSRMI on Sun SPOT ある RMI(Remote Method Invocation)2) と呼ばれる技術が 用意されている. 図 1 1 1 SunSPOT し か し ,Sun SPOT ではモバイル機器向けの Java Yusuke Ohmiya† and Yasuhiro Sugiyama† Fig. 1 SunSPOT MIDP2.03)(Mobile Information Device Profile 2.0) を採用 Sun SPOT is a device designed to build wireless sensor networks. Sun SPOT しておりネットワークを通してのメソッド呼び出しが実装さ includes a Java virtual machine to allow programs written in Java to run on it. れていない.本稿では, 向けの として を提案 However, the current Sun SPOT technology does not allow remote method calls Sun SPOT RMI SSRMI(Sun SPOT RMI) over networks. We propose a remote method invocation framework SSRMI for し,そのアーキテクチャと実装について述べる. Sun SPOT. This paper will show its architecture and implementation. 本稿の構成は以下の通りである.まず,2節で RMI の概要と,RMI を Sun SPOT へ実 装する場合の問題点について述べる.3節で SSRMI の概要,4節で実装,5節でその使用 方法を述べる.6節で SSRMI の評価と 7 節で関連技術について述べる. 1. は じ め に 2. RMI の概要 近年,無線技術の発展に伴い無線技術を使ったネットワークの構築が盛んに行われてい る.無線を使用したネットワークを構築することのできるデバイスの一つに Sun SPOT(Sun RMI とは,リモートホスト上にあるオブジェクトのメソッドを実行する処理を,プログラ Small Programmable Object Technology)1) がある.Sun SPOT とはサン・マイクロシス マが容易に記述することのできるシステムである.つまり,一つの Java 仮想マシン (VM) テムズ (Sun Microsystems) の開発した,図 1 に示すような,小型の無線センサーネット 上のオブジェクトが,別の VM 上に配置されたオブジェクトのメソッドを呼び出し,実行 ワークデバイスである.これは,Java 言語により書かれたプログラムを実行させることが させる事が可能である.また,プログラマは特にネットワークの知識がなくともネットワー ク上にある別の VM 上に設置されたオブジェクトのメソッドを呼び出す処理を構築するこ とができる. 1 日本大学工学部 情報工学科 † Department of Computer Science, College of Engineering, Nihon University 1c2010 Information Processing Society of Japan ! Vol.2010-SE-167 No.18 情報処理学会研究報告 2010/3/18 IPSJ SIG Technical Report 2.1 RMI のアーキテクチャ !"#$%&./& +,-./& 図 2 を用いて RMI の基本的なアーキテクチャを説明する.RMI では Naming クラスが用 意されており,サーバオブジェクト上に置かれたオブジェクトを使用するための登録(bind) !"#$%& B +,- や検索 (lookup) を行う. ; '()*!& C '()*!& : 4 4 4 RMI を使用する際にはあらかじめいくつかの準備をする必要がある.その一つに rmic と 5 5 5 呼ばれるツールを使用して Stub と Skeleton と呼ばれるネットワークを使用するための部 6 Naming 6 Naming 6 Stub Skeleton 7 .lookup() 7 .bind() 7 品を生成する必要がある.現在の Java のバージョン 1.6 では Stub と Skeleton は廃止され ているが,ここでは後述する の説明の関係上 ・ についても説明する. DEF SSRMI Stub Skeleton JVM JVM Stub は呼び出す側であるクライアントホスト上に設置される.クライアントオブジェク ?@A トがサーバホスト上にあるサーバオブジェクトを間接的に呼び出すためのオブジェクトであ rmiregistry る.クライアントオブジェクトは,サーバオブジェクトを呼び出すために Stub を呼び出す <=> 事でネットワーク越しでのメソッド呼び出しを行っている.Skeleton はサーバホスト上に JVM 設置され,サーバオブジェクトの呼び出しを行う.前述で説明した Stub からネットワーク 82&9,!4567 01234567 を通してメソッド呼び出し情報を受け取り,サーバオブジェクトの呼び出しを行っている. 図 2 RMI の概要 Fig. 2 An Overview of RMI また,サーバオブジェクトの情報を登録・検索するレジストリサーバとして rmiregistry がある.この rmiregistry はサーバホスト上で起動し,サーバオブジェクトの登録を行う. 係を除くほぼ全てのライブラリが含まれてる. クライアントオブジェクトは,このサーバオブジェクトが登録された rmiregistry に検索を CLDC と組み合わせるプロファイルには MIDP,IMP(Information Module Profile), かけ,サーバオブジェクトの情報を取得し,その情報を元にサーバオブジェクトのメソッド Doja などがある.MIDP は携帯電話や PDA などのような組み込み機器で使用するプロファ 呼び出しを行う. イルである.IMP は自動販売機や組み込み向け産業機器などディスプレイを持たないデバ 2.2 Sun SPOT と MIDP イスなどに用意されているプロファイルである.また,Doja は NTT ドコモ社の携帯電話 Java は,使用される環境に合わせて複数の仕様を用意している.一般的な PC 向けの 上で動作する Java アプリケーション向けで,同社の提供する i アプリなどで使用されてい J2SE(Java 2 Standard Edition),サーバ向けの J2EE(Java 2 Enterprise Edition),そし るプロファイルである. て携帯電話などの携帯端末向けの J2ME(Java 2 Micro Edition) が存在する. Sun SPOT では CLDC と組み合わせて使用する MIDP が採用されている.そのため, J2ME は,家電製品や携帯電話など小型の機器向けに用意された仕様である.様々な機 Java SE で使用されていた RMI などのライブラリが用意されておらず,最小限のライブラ 器に対応させるため,Java の実行環境仕様であるコンフィギュレーションとクラスライ リのみ用意されている.また,VM には KVM の代わりに CLDC に準拠した Squawk VM ブラリのセットであるプロファイルが用意されている.J2ME ではコンフィギュレーショ が実装されている.Squawk VM は小型の組み込みデバイス向けに開発されたオープンソー ンとして CLDC(Connected Limited Device Configuration) と CDC(Connected Device スの VM で非常にコンパクトな VM である. Configuration) がある.CLDC は携帯電話のような処理能力の低い機器を対象とし,Java 2.3 Sun SPOT への実装時の問題点 VM の代わりに KVM(The K Virtual Machine) と呼ばれる小型の機器専用の VM が用意 Sun SPOT では MIDP が採用されており,RMI をそのまま移植することはできない. されている.J2SE とは互換性が無く,最小限の機能で動作する.CDC はカーナビゲーショ RMI で使用されている技術である TCP・UDP を使用した通信やリフレクションなどがサ ンシステムなど,ある程度処理能力を持つ機器を対象としており J2SE と比較して GUI 関 ポートされていないのが大きな原因である.これは,プロファイルの違いによる機能の制限 2c2010 Information Processing Society of Japan ! Vol.2010-SE-167 No.18 情報処理学会研究報告 2010/3/18 IPSJ SIG Technical Report によるものが大きい.図 3 はプロファイルと機能の比較を行ったものである.なお,Doja 3. SSRMI のアーキテクチャ については一部の項目が未公開のため不明と記載している. Sun SPOT では,TCP や UDP を使用する Socket に代わり,Radiogram,Radio Stream SSRMI とは,Sun SPOT 向けのリモートメソッド呼び出しフレームワークである.基本 と言った無線ネットワーク用の通信方式が用意されている.これらの通信方式は,TCP や 的な使用方法とプログラムの配置を RMI とほぼ同じような構造としユーザが特に違いを意 UDP との互換性が無いため,PC ネットワークと直接通信することは不可能である. 識せず使用できる. また,Sun SPOT は SPOT 自身のアドレスを指定して通信する事ができない. これは, !"#$%& +,- RMI ではローカルホストに対しての通信が可能であったため,サーバホスト上に置かれた SPOT SPOT サーバオブジェクトを同一ホスト上で起動している rmiregistry へ bind することが可能で あったが,Sun SPOT ではローカルホスト間での通信が出来ないため,同一ホスト上のサー !"#$%& @ +,- 9 '()*!& A '()*!& 8 バオブジェクトからレジストリへの登録が困難である. 2 2 2 リフレクションとはプログラム自身が実行過程でその構造を解析,書き換えする技術で, 3 3 3 (SSRMI) (SSRMI) 4 (SSRMI) 4 (SSRMI) 4 この技術を使用することにより動的な処理の実行が可能となる.RMI では実行中に,リモー Naming Naming 5 Stub 5 Skeleton 5 トで呼び出されるオブジェクトの解析などに使用している. .lookup() .bind() BCD また,Sun SPOT 上では複数のプロセスの起動が制限されているため,サーバホスト上で Squawk VM =>? レジストリを立ち上げる事が困難になっている.これは,Sun SPOT 上では Squawk VM SSRmiregistry :;< が用意されているが,Java SE などと違い,VM を複数動作させることが出来なくなってい Squawk VM る.それにより複数のプロセスを別々に起動・実行することが出来ない.そのため,Java 60&7,!2345 ./012345 SE の RMI で可能であった rmiregistry とサーバオブジェクトを別の VM 上で起動させる 図 4 SSRMI の概要 ことが不可能である. Fig. 4 An Overview of SSRMI !"#"$%& '()* )+," %-.$%*/0 SSRMI は RMI と比較して,基本的な使用方法やクラス,プログラムの配置は RMI とほ 1'21345-"6$'"783.9: !1' ;1' ;1' %<-"=>$1' ぼ同じような構造になっているが,いくつかの相違点がある.図 4 は SSRMI のアーキテク ?95=+4> 0@*A(* B00* B00* C"D3+E4"FAC"D3+%549"F チャを図にしたものである. GHIJKLM N O O O 3.1 SSRmiregistry PQR1'ST N O O O J2SE では,rmiregistry と呼ばれるリモートオブジェクト検索用のディレクトリサーバ UVWXYZR[\ N O ]^ O が用意されていた.しかし,Sun SPOT では,通信方式やプロファイルの違いからそのま 図 3 Java プロファイルの比較 ま rmiregistry を起動させることは出来ない.そこで,SSRMI 専用の SSRmiregistry を用 Fig. 3 Comparing Java Profiles 意している.SSRmiregistry には次に示す特徴がある. まず,SSRmiregistry は,従来の rmiregistry のようなツールではなく,Naming クラス と同じように API として提供される.これは,Sun SPOT では複数の VM を起動すること が出来ないため,1 つの VM 上でサーバオブジェクトと SSRmiregistry を起動させる方式 3c2010 Information Processing Society of Japan ! Vol.2010-SE-167 No.18 情報処理学会研究報告 2010/3/18 IPSJ SIG Technical Report を SSRMI が採用しているためである.Sun SPOT 上で bind メソッドを使用してサーバオ Sun SPOT A Sun SPOT B ブジェクトの登録を行う前に,ユーザがプログラム中に SSRmiregistry の起動を記述する. また,RMI では同じホスト上に置かれた rmiregistry に対して自身の IP アドレスを指定 ! !"# !"# してネットワークを通して登録を行っていた.しかし,Sun SPOT では自身のアドレスを ! $%&'()A $%&'()B " 指定しての通信をサポートしていない.SSRMI でも,SSRmiregistry へサーバオブジェク # $ トを登録する際に SSRmiregistry のある SPOT のアドレスを指定する.そのアドレスを見 " (SSRMI) (SSRMI) て,同じ 上にある に対して登録が行われた場合には,ネットワーク % SPOT SSRmiregistry # Naming Naming を経由せず,SSRmiregistry オブジェクトのメソッドを直接呼び出すことにより登録を行っ & ' ている. $ % また,RMI ではセキュリティの面から,リモートホスト上にあるレジストリへの bind, & SSRmiregistry 42,)3"(567189: などの処理は禁止されている.しかし, では一般的な ネットワーク ( rebind Sun SPOT PC & との互換性が無い事や SPOT 自身の処理能力の面から,柔軟な使用を考え,図 5 のように別 ' 2,)3"(./01 *+,-./01 の SPOT 上にあるレジストリへの登録を可能としている.この仕様により,SSRmiregistry 図 5 SSRmiregistry への登録 だけを設置した SPOT を起動することも可能になっている.SPOT 自身の処理能力はそれ Fig. 5 Registration to SSRmiregistry ほど高くないため,負荷のかかる処理がある場合はサーバオブジェクトと SSRmiregistry を別々の SPOT 上で起動させるといったことも可能となっている.また,セキュリティの ているが,実装面では全く別ものである. 面から他の SPOT からの SSRmiregistry への登録を禁止することも可能である. 4.1 メソッド呼び出しの実現 3.2 スタブ・スケルトンコンパイラ SSRMI でのリモートメソッド呼び出しを図 6 を使用して説明する. また,Stub と Skeleton の生成についても RMI で使用されている rmic に代わって ssrmic (1) クライアントはレジストリの指定されたポート番号に対してリモートオブジェクトの を用意して対応している.これにより,Sun SPOT の通信方式である Radiogram,Radio 検索をかける. Stream に対応し,SSRMI 向けの Stub と Skeleton を生成させている.また,RMI で使用 (2) 検索をかけられたレジストリは検索結果を元に Stub の生成に必要なサーバのアドレ されていた Naming クラスについては,基本的な lookup メソッドや bind メソッドといっ スやポート番号と言った情報をクライアントに送信し,その情報を元にクライアントでは たメソッド名は従来のものとほぼ共通で,プログラムを書くにあたって,あまり違いを意識 Stub が生成される.Stub はリモートオブジェクトと同じ引数・返り値のメソッドを保有し せずにプログラムを書くことができるようになっている. ている. ただし,SSRMI は RMI とは通信での互換性が無い.これは,RMI で使用されている通 (3) クライアントは,リモートオブジェクトの代わりに Stub のメソッドを呼び出し,Stub 信方式である TCP・UDP に Sun SPOT が対応していないためである.そのため,SSRMI は Skeleton へメソッド呼び出しを行うためのポート番号を要求する. からの RMI の呼び出し,RMI からの SSRMI の呼び出しなどには対応していない. ( 4 ) Stub からポート番号を要求された Skeleton は使用していないポート番号を検索し, Stub へ接続先のポート番号を送信する. 4. SSRMI の実装 ( 5 ) Stub は受け取ったメソッド呼び出し用ポート番号へメソッド名・引数を送信する. SSRMI を実装するにあたって,通信方式の違いやリフレクションの使用ができないため ( 6 ) Skeleton は受け取ったメソッド名・引数を元にリモートオブジェクトのメソッドを呼 RMI とは一部異なる方式で実装されている.基本的な使用方法に関しての互換性は保たれ び出す. 4c2010 Information Processing Society of Japan ! Vol.2010-SE-167 No.18 情報処理学会研究報告 2010/3/18 IPSJ SIG Technical Report (7) リモートオブジェクトの処理が終了すると処理結果が返る. ウエアの制限によるものである. ( 8 ) Skeleton は処理の結果を Stub へ送信する. 4.3 リフレクション 以上が SSRMI でのメソッド呼び出しの実装である.また,それぞれの通信には SSRMI リフレクションとは,プログラム自身が実行中にその構造を解析する技術である.この技 の独自プロトコルを使用して通信エラーや整合性・同期を取っている.プロトコルのヘッダ 術を使用する事で実行中に動的なコードを生成する事が可能である. などが追加されているために,通常の通信と比べてオーバーヘッドが増えている. Sun SPOT では MIDP を採用している事からリフレクションに対応していないため,リ フレクションを使用する事が不可能である.現在の RMI では,Stub・Skeleton を生成す Client SPOT SSRmiregistry Server SPOT Remote Object る代わりに,リフレクションを使用して動的にリモートオブジェクトのメソッド呼び出し を行っているが,Sun SPOT ではリフレクションが使用できない.そこで,SSRMI では を実行した際に ・ として静的なコードを実行させることでリモートメ 1.!"#$%&'() ssrmic Stub Skeleton ソッドの呼び出しを行っている. 2.Stub'*+ 4.4 trmic を使用した ssrmic の実装 3.,-./012345&67'89 SSRMI を使用するにあたって,Stub と Skeleton というネットワーク通信をする為のクラ 4.,-./012345&67':; スが必要になる.RMI には rmic と呼ばれる Stub と Skeleton