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

Slides:



Advertisements
Similar presentations
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
Javaのための暗黙的に型定義される構造体
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
Dynamic AOPと その実装手法について
アルゴリズムとデータ構造1 2007年6月12日
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
AspectScope によるアスペクトとクラスのつながりの視覚化
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
アスペクト指向プログラミングを用いたIDSオフロード
アスペクト指向プログラミングと Dependency Injection の融合
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
Flyingware : バイトコード変換による 安全なエージェントの実行
既存Javaプログラムの バイトコード変換による 機能分散
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
プログラミング言語入門 手続き型言語としてのJava
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
Java Bytecode Modification and Applet Security
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
Addistant:アスペクト指向の 分散プログラミング支援ツール
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
Java における 先進的リフレクション技術
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
Javaによる Webアプリケーション入門 第4回
「マイグレーションを支援する分散集合オブジェクト」
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
統合開発環境のための プログラミング言語拡張 フレームワーク
JAVA入門⑥ クラスとインスタンス.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

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

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

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

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

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

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

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

アスペクトの記述 (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

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

アスペクトの記述(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

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

関連研究(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

関連研究(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

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

SPA summer 2002, Hakone

SPA summer 2002, Hakone

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

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

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

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

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

SPA summer 2002, Hakone