プログラム分散化のための アスペクト指向言語 西澤無我 学籍番号 98-2072-7
動機 – 既存プログラムの分散化 既存プログラムの各機能を複数のマシンに分散させたい そのためには 既存の分散プログラミング支援ツール ex. 遠隔 GUI の操作 遠隔ホストのディスプレイに JFrameオブジェクトを表示、etc そのためには プログラムを機能により分割 分割した各パーツがお互いに 通信しながら動作するように書き換える 既存の分散プログラミング支援ツール ex. JavaRMI 遠隔ホスト アプリケーション ホスト
JavaRMI による分散化 JavaRMIの制約に従って以下のプログラムを手で記述し、利用する これらの作業は大変骨が折れる 遠隔クラスのメソッドをインターフェースとして定義 遠隔サービスを利用するクライアントクラスを記述 独自のコンパイラでスタブまたはスケルトンを生成 etc … これらの作業は大変骨が折れる
Addistant プロジェクト 既存プログラムをバイトコ ード変換により自動的に 分散化することができる 分散化の指針を既存プロ bytecode アプリケーション ホストbytecode bytecode 変換 遠隔ホスト 分散化の 指針 既存プログラムをバイトコ ード変換により自動的に 分散化することができる 分散化の指針を既存プロ グラムと分離したファイル に書くことができる
分散化の指針の分離 既存プログラムから分散化に関する記述を分離する必要性 プログラム全体の保守性が高まる 既存プログラムの可読性が保持される 分散環境の修正、変更があれば、分散化の指針のみを修正、変更すればよい Advanced Separation of Concerns として近年注目されている技術である
Addistant の分散化モデル 旧版モデル 既存プログラムの セマンティクスを保持 しながら分散させる 例えば、 2 つの遠隔ホスト 上で対戦する Tic-Tac-Toe を作れない 元々1つの Window を2つに アプリケーション ホスト 遠隔ホスト2 遠隔ホスト1 異なる分散化モデルも必要
研究の成果 : ORB の差し換え機能の実現 ORB の役割 ORB が分散化モデルを実装 以下の機能を実現 遠隔オブジェクト生成 変換後 bytecode ORB アプリケーション ホスト 遠隔 ネットワーク ORB の役割 以下の機能を実現 遠隔オブジェクト生成 遠隔メソッド呼び出し などの分散オブジェクトのリクエストを作成、受信のための手段を提供している ORB が分散化モデルを実装 ユーザ定義の ORB クラスで、Addistant のデフォルト ORB を差し換えることができるようにした ユーザ定義の ORB クラスは RequestBrokable インターフェースを実装
ユーザ定義 ORBの例: 多重化ORB 標準ORBの 分散化 多重化ORBの分散化 TicTacToe Windowを1個生成 二重に生成 遠隔ホスト アプリケーション ホスト 二重に生成 TicTacToe ORB Windowを1個生成 遠隔ホスト1 多重化ORB ORB アプリケーション ホスト 遠隔ホスト2
ユーザ定義 ORBの例: 多重化ORB 標準ORBの 分散化 多重化ORBの分散化 TicTacToe メソッド呼出 同じ引数で 二重に呼出 遠隔ホスト アプリケーション ホスト 同じ引数で 二重に呼出 TicTacToe ORB メソッド呼出 遠隔ホスト1 多重化ORB ORB アプリケーション ホスト 遠隔ホスト2
分散化の指針の記述 分散化の指針 多重化ORBの実装 <remote name=“rmt”> <orb classname=“RequestMultiplyingBroker”> <remote name=“rmt”> <host name=“taro” …/> <host name=“yulian” …/> </remote> invokeRemoteMethod(…) { for (int i = 0;i < stdorb.length; ++i) { stdorb[i].invokeRemoteMethod(…); }
実装状況 旧版の Addistant に相当の機能はほぼ完成 ORB の差し換え機能を実現 全部で 3700 行 Tic-Tac-Toe の実装が完成 全部で 3700 行 動作している対戦型 Tic-Tac-Toe
まとめ 新版 Addistant を設計・実装した 異なる分散化モデルに対応できる ORB の実装をユーザ定義のクラスにより差し換え可能にした ユーザ定義ORBの例 多重化ORB 対戦型 Tic-Tac-Toe を作成した
今後の方針 オブジェクト配置の指定を、new 式のあるクラスやメソッドの種類といった生成文脈に応じて細かく指定 ネットワーク・ストリームの実装の差し換え