アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone 1 分散ソフトの開発支援ツール Addistant[Tatsubori01], J-Orchestra[Tilevich02] 以下のコードを既存プログラムに自動合成可能 利点 遠隔メソッド呼び出しの実装方法 オブジェクトの分散配置 プログラム全体として可読性、保守性の向上 本研究の目標 より多くの機能を自動合成可能に 例:オブジェクトの複製を、複数のホストに配置し 一貫性、同一性を維持するアプリケーション SPA summer 2002, Hakone 2 対戦型○×ゲームの開発 3 つのホストに分散して動作する 2 つのホストは各プレーヤー に対する GUI を処理する 残りのホストはゲーム全体 のロジックを制御する 遠隔ホスト GUI を処理: Square オブジェクトなど Square オブ ジェクトの複製 アプリケーション・ホスト ゲームを制御: TicTacToe オブジェクトなど SPA summer 2002, Hakone 3 Square クラス ます目をあらわす class Square { TicTacToe ttt; char mark; // 'O', 'X', or ' ' int pos; // position ます目の位置を表す Square(TicTacToe t, int p) { ttt = t; pos = p; } void setMark(char c) { mark = c; } char getMark() { return mark; } void pressed() { ttt.clicked(pos); } } TicTacToe t = ...; for (int i = 0; i < 9; ++i) board[i] = new Square(t, i); SPA summer 2002, Hakone ます目がマウスでクリックされた とき、TicTacToe オブジェクトの メソッド clicked を呼ぶ TicTacToe クラス内部の Square オブジェクトの生成 4 Square オブジェクトの複製 複製の間の完璧な同一性の保証は不要 フィールドの値は常に同じ 緩い一貫性 pressed() の動作は同じでない 今、手番でないホストからのクリックは無視するため ツールが生成する同一性保証のコード ユーザがカスタマイズできる必要がある アプリケーションに特化したカスタマイズ pressed() だけ特別扱い SPA summer 2002, Hakone 5 非分散の Java プログラム Jarcler の提案 アスペクト 記述 アスペクト指向の 開発支援ツール ユーザが分散処理によ るカスタマイズをアスペ クトとして簡潔に記述 より多くの機能を自動合 成することができる bytecode 変換 アプリケーション 遠隔ホスト用 ホスト用bytecode bytecode SPA summer 2002, Hakone 6 Squareの複製の実装 - 複製の生成 Square クラスと同じ名前のメソ ッドをすべて持つSquarePair オ ブジェクトに置換。 SquarePair の内部で Square オブジェクトを 2 つ生成。 Square Weave前 ×9 TicTacToe 遠隔ホスト上 SquarePair の setMark() が呼ばれると 2 つの Square の setMark() が呼ばれる。 Weave 後 TicTacToe Square network SquarePai r ×9 SPA summer 2002, Hakone network Square 7 アスペクトの記述 (1) - Square の複製を生成 2 つの遠隔ホスト上に Square オブジェクトを生 成する remote class TicTacToe at “server”; remote class Square; use SquarePair insteadof Square in TicTacToe; public class SquarePair { Square s1; Square s2; SquarePair(TicTacToe ttt, int pos) { s1 = new Square(“player1”, ttt, pos); s2 = new Square(“player2”, ttt, pos); ホスト名 } “player1” void setMark(char c) { s1.setMark(c); s2.setMark(c); } } SPA summer 2002, Hakone ホスト名 “player2” 8 Squareの複製の実装 - TicTacToe.clicked() を変更 char 型の nextPlayer という 変数を持っている:現在の手番 を表す変数 遠隔ホスト1 Square click myMark = ‘O’ TicTaToe nextPlayer = ‘O’ X 遠隔ホスト2 click Square myMark = ‘X’ 引数を 1 つ加える。 TicTacToe.clicked(pos, myMark) その引数で手順でないホストからのクリック を無視する SPA summer 2002, Hakone 9 アスペクトの記述(2) - TicTacToe.clicked()の変更 手順でないプレーヤー によるクリックがあった 場合には無効とする クラス、メソッドそして フィールドの追加、変 更 Introduction 構文 Advice 構文 before, after, around static char Square.myMark; on “player1” { Square.myMark = ‘O’; } on “player2” { Square.myMark = ‘X’; } void around(TicTacToe ttt, int pos): target(ttt) && args(pos) && within(Square) && callerside && call(void clicked(int)) { ttt.clicked(pos, Square.myMark); } void TicTacToe.clicked(int pos, int player) { if (player != nextPlayer) return ; // クリックを無視 clicked(pos); } SPA summer 2002, Hakone 10 オブジェクトの複製を実現する アスペクト Crosscutting concern Middleware(この場合、自動合成されたコー ド) と Application との間にまたがっている Application Middleware layer アプリケーション・ロジックのモジュール 支援ツールが自動合成する、クライアント・スタ ブとサーバ・スケルトン Square オブジェクトの複製を生成するためのコード 例:Squareの複製を生成するのはアプリケーション・ロジックであるが、それら Squareオブジェクトを分散配置するのは支援ツールがするべき処理である SPA summer 2002, Hakone 11 関連研究(1) - AspectJ [Kiczales01] Java を拡張した、汎用の AOP 言語 アプリケーション・クラス間の crosscutting concern をアスペクトに記述できる Middleware と application との間ではな い アプリケーション・クラス間 の crosscutting concern Middleware layer アプリケーション ・クラス Jarcler は分散に対応した AOP ツール SPA summer 2002, Hakone 12 関連研究(2) - Reflective Middleware メタ・プログラミングでカスタマイズ 直感的でない。簡単ではない。 Object trapMethodCall(Method m, Object[] args) { if (m.getName().equals(“clicked”) { if (getCallerHost() != nextPlayer) return null; // クリックを無視 } return super.trapMethodCall(args); } Middlewware と Application 間のcrosscutting concern を無理やり Middleware に押し込めた SPA summer 2002, Hakone Application Middleware layer 13 まとめ Jarcler アスペクト指向の Java 用分散化支援ツール ユーザによるカスタマイズを、コード生成に反映 例:複製オブジェクトを作成 Middleware と application にまたがる crosscutting concern に対応 AspectJ では対応できない Reflection ではプログラミングが難しい SPA summer 2002, Hakone 14 SPA summer 2002, Hakone 15 SPA summer 2002, Hakone 16 Jarcler の処理 Application weave Middleware layer aspect SPA summer 2002, Hakone Application Middleware layer 17 Addistant プロジェクト 既存プログラム bytecode 分散化の 指針の記述 目標 既存プログラムをバイト コードレベルで自動的に 機能分散 既存プログラムと 分散化の指針を分離 して記述 既存プログラムをどう分 散させるか、等の指示 bytecode 変換 アプリケーション 遠隔ホスト用 ホスト用bytecode bytecode SPA summer 2002, Hakone 18 多重化 ORB TicTacToe Windowを1個生成 標準ORBの 分散化 ORB ORB アプリケーション ホスト 遠隔ホスト 多重化ORBの分散化 二重に生成 TicTacToe ORB Windowを1個生成 遠隔ホスト1 多重化ORB ORB アプリケーション ホスト 遠隔ホスト2 SPA summer 2002, Hakone 19 関連研究 - X Window Xlib ライブラリレベルで分散化 低レベルな命令が大量にネットワークを飛 び交う 応答性能が悪い Addistant の分散化 メッセージプロトコルがやりとり 応答性のよい遠隔表示が可能 SPA summer 2002, Hakone 20 関連研究 – D言語[Lopes97] 分散プログラミング支援の AOP 並列に動作するスレッド間の協調動作 IDL を提供 ソースファイルが必要 分散化の指示を、プログラムに直接埋め込む SPA summer 2002, Hakone 21 SPA summer 2002, Hakone 22
© Copyright 2024 ExpyDoc