Presentation is loading. Please wait.

Presentation is loading. Please wait.

アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone.

Similar presentations


Presentation on theme: "アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone."— Presentation transcript:

1 アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone

2 分散ソフトの開発支援ツール Addistant[Tatsubori01], J-Orchestra[Tilevich02] 本研究の目標
以下のコードを既存プログラムに自動合成可能 遠隔メソッド呼び出しの実装方法 オブジェクトの分散配置 利点 プログラム全体として可読性、保守性の向上 本研究の目標 より多くの機能を自動合成可能に    例:オブジェクトの複製を、複数のホストに配置し      一貫性、同一性を維持するアプリケーション 分散プログラムの開発は非常に困難であると昔から言われている。理由は、CCのため 開発支援ツールが数多く登場した AddistantやJ-OrchestraはRMIの実装やオブジェクトの分散配置をユーザが指定すると自動的に分散プログラムを作成 本研究の目標は「RMIの実装や分散配置だけでなく、その他多くの機能を自動合成可能にしたい この機能は「オブジェクトの複製を複数のホストに配置するようなapplication」に役立つ SPA summer 2002, Hakone

3 対戦型○×ゲームの開発 3 つのホストに分散して動作する 2 つのホストは各プレーヤー に対する GUI を処理する
残りのホストはゲーム全体   のロジックを制御する 遠隔ホスト GUI を処理: Square オブジェクトなど Square オブ ジェクトの複製 ・オブジェクトの複製を必要とする分散プログラムの例として「対戦型TTT」を例にとります ---説明する--- ・例えば遠隔ホスト上で動作するオブジェクトとして、一つ一つのます目を管理するSquareなどがあるだろう、これは2つの遠隔ホストで同一性を保持していなくてはならない アプリケーション・ホスト ゲームを制御: TicTacToe オブジェクトなど SPA summer 2002, Hakone

4 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 オブジェクトの メソッド clicked を呼ぶ 一つ一つのます目をあらわすSquareクラスの定義を簡単に見ていく (論文の3ページ目にも書いてある) ・ゲームボードのどの位置か、を表すposをフィールドにとる ・そのます目が○か×かを設定するsetMark() ・現在のます目のMarkを返すgetMark() ・ボタンがクリックされるとSquareのpressed()が呼ばれ、内部でゲームを制御しているTTTに  どの位置がクリックされたか伝える TicTacToe t = ...; for (int i = 0; i < 9; ++i) board[i] = new Square(t, i); TicTacToe クラス内部の Square オブジェクトの生成 SPA summer 2002, Hakone

5 Square オブジェクトの複製 複製の間の完璧な同一性の保証は不要 フィールドの値は常に同じ pressed() の動作は同じでない
今、手番でないホストからのクリックは無視するため ツールが生成する同一性保証のコード ユーザがカスタマイズできる必要がある アプリケーションに特化したカスタマイズ pressed() だけ特別扱い 緩い一貫性 ・しかし、オブジェクトの複製間で完璧な同一性は必要ない  もちろん、2つの遠隔ホスト上の同じます目が同じマークである必要はある  しかし、「片方のホストから連続したクリックを禁止しなくてはならない」 ・このような「緩い一貫性の保持」は「アプリケーション・ロジックに依存する  分散に関する処理」である SPA summer 2002, Hakone

6 Jarcler の提案 アスペクト指向の 開発支援ツール ユーザが分散処理によるカスタマイズをアスペクトとして簡潔に記述
非分散の Java  プログラム アプリケーション ホスト用bytecode bytecode 変換 遠隔ホスト用 アスペクト 記述 アスペクト指向の   開発支援ツール ユーザが分散処理によるカスタマイズをアスペクトとして簡潔に記述 より多くの機能を自動合成することができる ・我々はJarclerというアスペクト指向の開発支援ツールを作成している ・本システムは遠隔メソッド呼び出しの実装やオブジェクトの分散配置などの  指定だけでなく、ユーザによる(例えば先ほどの「アプリケーション・ロジック  に依存している分散に関する処理」のようなカスタマイズをアスペクトに簡潔に記述できる ・これにより、アスペクトと非分散のJavaコードを自動合成して分散プログラ  ムを作成することができる  ・これにより、可読性・保守性が向上する SPA summer 2002, Hakone

7 Squareの複製の実装 - 複製の生成 Weave前 Weave 後 Square TicTacToe Square SquarePair
2 つ生成。 Square Weave前 ×9 TicTacToe 遠隔ホスト上 SquarePair の setMark() が呼ばれると 2 つの Square の setMark() が呼ばれる。 Square ・Jarclerを利用して対戦型TTTを作成していく ・Squareの複製をどのように作成していくか?を考える  もともとTTTで生成されるSquareオブジェクトの部分をSquarePairオブジェクト  に置換する。そしてSquarePairの内部で2つの遠隔ホスト上にあるSquareオブジ  ェクトを生成する ・メソッド呼び出しも同じで、SquarePairのsetMark()が呼ばれると、内部で2つの遠隔ホ  スト上のSquareオブジェクトのsetMark()が呼ばれるようにすればよい。 Weave 後 network SquarePair Square TicTacToe ×9 network SPA summer 2002, Hakone

8 アスペクトの記述 (1) - 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); } void setMark(char c) { s1.setMark(c); s2.setMark(c); ・これがSquareオブジェクトの複製を生成するためのアスペクト記述である 主なところを解説する ・3行目のinsteadofキーワードは「TTTクラス内部のSquareオブジェクトの生成式  (new式)をSquarePairオブジェクトの生成式に置き換える ・4行目からはSquarePairクラスを定義している  SquarePairのコンストラクタ内部ではSquareオブジェクトを2つ生成している  このSquareのコンストラクタは非分散のJavaプログラムにはもともと無いもので  あるが、アスペクト内でこのようにホスト名を第一引数に入れることにより、  分散配置することができる ホスト名 “player1” ホスト名 “player2” SPA summer 2002, Hakone

9 Squareの複製の実装 - TicTacToe.clicked() を変更
char 型の nextPlayer という 変数を持っている:現在の手番 を表す変数 遠隔ホスト1 引数を 1 つ加える。 TicTacToe.clicked(pos, myMark) その引数で手順でないホストからのクリックを無視する Square myMark = ‘O’ click TicTaToe X 遠隔ホスト2 nextPlayer = ‘O’ Square click myMark = ‘X’ ・Squareクラスにchar型のスタティックフィールドmyMarkを追加する。 このmyMarkは「こちらのホストのプレーヤーは○か×か」という情報を保持します。 そこで、このmyMarkをSquareオブジェクトのpressedメソッドが呼ばれたとき、 TicTacToeのclickedの引数に加えます。 これにより「どちらのプレーヤーからのクリックか?」がわかる。 もともとTTTには、現在の手番が○か×かというフィールドnextPlayerを持っているので そのnextPlayerと渡されたmyMarkとを比較して、無視するかどうかを決めればよい。 SPA summer 2002, Hakone

10 アスペクトの記述(2) - TicTacToe.clicked()の変更
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); 手順でないプレーヤー   によるクリックがあった   場合には無効とする クラス、メソッドそしてフィールドの追加、変更 Introduction 構文 Advice 構文   before, after, around ・クラス、メソッドそしてフィールドを追加したいときにはintroduction構文を利用する ・クラス、メソッドそしてフィールドを修正・変更したいときはadvice構文を利用する アスペクト記述の主な部分を説明する ・1行目Squareクラスにスタティックなchar型の変数myMarkを追加する ・3,4行目でそれぞれのホスト上で生成されるSquareオブジェクトのmyMarkを初期化 ・あるます目がクリックされSquareオブジェクトのpressed()がclicked()を呼ぶとき、その  ます目の位置posだけでなく、myMarkも格納する ・実際にposとmyMarkを引数に取るメソッドclickedをTTTに作成する SPA summer 2002, Hakone

11 オブジェクトの複製を実現する アスペクト Crosscutting concern
Middleware(この場合、自動合成されたコード) と Application との間にまたがっている Application アプリケーション・ロジックのモジュール 支援ツールが自動合成する、クライアント・スタ ブとサーバ・スケルトン Middleware layer ・ここで、少し抽象的な話になりますが、私たちの研究の背景にあたる。 ・今まで、例としてオブジェクトの複製を利用するアプリケーションを説明して  来たが、この話はAOPでいうところのCrosscutting concernであると考えている。 ・CCとは、複数のモジュール(OOPではオブジェクト)に、あるモジュールがまた  がって入ってしまうコードのことをさす ・ただし、通常AOPで言われるCCとは異なり、アプリケーションとミドルウェアに  またがる、CCである。 具体的に、ここがまたがっているとTTTの例で説明できるといい。 Square オブジェクトの複製を生成するためのコード 例:Squareの複製を生成するのはアプリケーション・ロジックであるが、それら Squareオブジェクトを分散配置するのは支援ツールがするべき処理である SPA summer 2002, Hakone

12 関連研究(1) - AspectJ [Kiczales01]
Java を拡張した、汎用の AOP 言語 アプリケーション・クラス間の crosscutting concern をアスペクトに記述できる Middleware と application との間ではない Jarcler は分散に対応した AOP ツール ・今までAOPで扱ってきたCCはユーザが作成したアプリケーション・クラス間のCC  であり、汎用的なAOPであるAspectJでは、CCをうまく記述できるものである。 ・ところが、「オブジェクトの複製」などは、アプリケーションとミドルウェアの間  にまたがっているCCであり、AspectJでは記述することが不可能 ・それを記述できるようにしたのがJarclerである。 アプリケーション・クラス間 の crosscutting concern Middleware layer アプリケーション ・クラス SPA summer 2002, Hakone

13 関連研究(2) - Reflective Middleware
メタ・プログラミングでカスタマイズ 直感的でない。簡単ではない。 Object trapMethodCall(Method m, Object[] args) { if (m.getName().equals(“clicked”) { if (getCallerHost() != nextPlayer) return null; // クリックを無視 } return super.trapMethodCall(args); ・例としてとりあげた「オブジェクトの複製」を処理する方法として、リフレクション  を利用があげられる。 ・clickedメソッドが呼ばれたとわかった場合、クリックしたホストが○か×かを判断する  メソッドgetCallerHost()を用意し、それとnextPlayerとを比べ、一致しなければ、今の  クリックを無視するという方法を取ればよい。 ・このコードはメタプログラムであり、ユーザにメタな記述を書かせるのは適当でないと  我々は考えている。直感的でも簡潔でもないため。 ・リフレクションを用いたミドルウェアは「オブジェクトの複製」などのCCをミドルウェア  に押し込んで、対処しようと考えている Application Middlewware と Application 間のcrosscutting concern を無理やり Middleware に押し込めた Middleware layer SPA summer 2002, Hakone

14 まとめ Jarcler アスペクト指向の Java 用分散化支援ツール
ユーザによるカスタマイズを、コード生成に反映 例:複製オブジェクトを作成 Middleware と application にまたがる crosscutting concern に対応 AspectJ では対応できない Reflection ではプログラミングが難しい ・我々はアスペクト指向の分散化支援ツールJarclerを提案しました。 SPA summer 2002, Hakone

15 SPA summer 2002, Hakone

16 SPA summer 2002, Hakone

17 Jarcler の処理 weave Application Application Middleware layer
aspect SPA summer 2002, Hakone

18 Addistant プロジェクト 目標 既存プログラムをバイト コードレベルで自動的に 機能分散
   bytecode アプリケーション ホスト用bytecode bytecode 変換 遠隔ホスト用 分散化の 指針の記述 目標 既存プログラムをバイト コードレベルで自動的に 機能分散 既存プログラムと 分散化の指針を分離 して記述 既存プログラムをどう分 散させるか、等の指示 SPA summer 2002, Hakone

19 多重化 ORB 標準ORBの 分散化 多重化ORBの分散化 TicTacToe Windowを1個生成 二重に生成 TicTacToe
遠隔ホスト アプリケーション ホスト 二重に生成 TicTacToe ORB Windowを1個生成 遠隔ホスト1 多重化ORB ORB アプリケーション ホスト 遠隔ホスト2 SPA summer 2002, Hakone

20 関連研究 - X Window Xlib ライブラリレベルで分散化 Addistant の分散化
低レベルな命令が大量にネットワークを飛び交う 応答性能が悪い Addistant の分散化 メッセージプロトコルがやりとり 応答性のよい遠隔表示が可能 X Window では、ライブラリレベルで分散化を行っていて、 全自動の遠隔表示環境を実現しています。 線を書くなどの比較的低レベルな命令やイベントが大量にネットワークを行き交う。 GUI がシンプルな場合や、ネットワークの帯域とサーバのCPUリソースが潤沢に得られる場合には問題ないわけですが。 SPA summer 2002, Hakone

21 関連研究 – D言語[Lopes97] 分散プログラミング支援の AOP ソースファイルが必要 並列に動作するスレッド間の協調動作
IDL を提供 ソースファイルが必要 分散化の指示を、プログラムに直接埋め込む SPA summer 2002, Hakone

22 SPA summer 2002, Hakone


Download ppt "アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone."

Similar presentations


Ads by Google