Addistant:アスペクト指向の 分散プログラミング支援ツール

Slides:



Advertisements
Similar presentations
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
Advertisements

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
シーケンス図の生成のための実行履歴圧縮手法
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
JPAを利用した RESTful Webサービスの開発
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
AspectScope によるアスペクトとクラスのつながりの視覚化
ネストした仮想化を用いた VMの安全な帯域外リモート管理
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
RMI ソフトウェア特論 第6回 /
アスペクト指向プログラミングを用いたIDSオフロード
効率的なJava Dynamic AOPシステムを実現する Just-in-Time weaver
アスペクト指向プログラミングと Dependency Injection の融合
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
Flyingware : バイトコード変換による 安全なエージェントの実行
プログラミング演習3 第2回 GUIの復習.
既存Javaプログラムの バイトコード変換による 機能分散
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
型付きアセンブリ言語を用いた安全なカーネル拡張
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone.
暗黙的に型付けされる構造体の Java言語への導入
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
プログラミング演習3 第2回 GUIの復習.
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
通信機構合わせた最適化をおこなう並列化ンパイラ
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
アスペクト指向言語のための 独立性の高いパッケージシステム
アスペクト指向言語のための 独立性の高いパッケージシステム
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
Java における 先進的リフレクション技術
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
「マイグレーションを支援する分散集合オブジェクト」
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
ソフトウェア工学 知能情報学部 新田直也.
コードクローン解析に基づく デザインパターン適用候補の検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プログラム理解のための 付加注釈 DocumentTag の提案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

Addistant:アスペクト指向の 分散プログラミング支援ツール 立堀道昭 (筑波大) 千葉滋 (東工大) 板野肯三 (筑波大) July 26, 2001 SWoPP 2001 PRO, Okinawa

概要 Java による分散プログラミングの 支援ツール Addistant Addistant の特徴 特に機能分散を行うプログラム開発を対象に 言語処理系と実行系で実現 既存の Java virtual machine (JVM) を活用 Addistant の特徴 アスペクト指向の導入 拡張クラスローダによる実現 July 26, 2001 SWoPP 2001 PRO, Okinawa

分散プログラミングの障害 非分散のロジックに分散のためのコードが絡み合い各所にちらばっている Crosscutting concerns 低いモジュラリティ 分散プログラミングを難しくしているものの1つ 分散に関する事項がプログラム全体に四散しており、簡潔に記述できない 絡み合ったコードの保守・変更は困難 July 26, 2001 SWoPP 2001 PRO, Okinawa

Crosscutting Distribution Concerns (1/2) 機能分散プログラム中、分散オブジェクトを配置するコードは散在する class C { .. new L() .. } class A { .. new L_Proxy(“..”) .. } class D { .. new L() .. } class B { .. new L_Proxy(“..”) .. } class L { .. new C() .. } July 26, 2001 SWoPP 2001 PRO, Okinawa

Crosscutting Distribution Concerns (2/2) 配置換えに伴い、散在するコードの書き換えが必要 class A { .. new L(..) .. } class C { .. new L_Proxy(..) .. } class B { .. new L(..) .. } class D { .. new L_Proxy(..) .. } 配置換え class L { .. new C_Proxy() .. } July 26, 2001 SWoPP 2001 PRO, Okinawa

プログラミング技法による対処の限界 Abstract Factory デザイン・パターン 常に Factory クラスを通してインスタンスを生成し、Factory のサブクラスで生成を制御 Factory method はコンテキスト分、数多く必要 生成されるクラスは共通の親をもたねばならない ProductL p = factory.create_L_at_C(); class Factory { .. ProductL create_L_at_B(); ProductL create_L_at_C(); .. } July 26, 2001 SWoPP 2001 PRO, Okinawa

提案するツール Addistant 機能分散プログラムの開発を支援 実現手段 絡み合う分散配置コードの分離 抽象化による分散配置記述の簡素化 既存の Java 仮想機械 (JVM) を利用 ソースコードの変更が不可能なクラスにも対処 July 26, 2001 SWoPP 2001 PRO, Okinawa

Addistant の基本設計 クラス単位のインスタンスの配置方針 クラスローダによるバイトコード変換 開発者が配置アスペクトとして宣言的記述 例: GUI のクラスはあちら、その他のユーザクラスはこちら クラスローダによるバイトコード変換 java.lang.ClassLoader のサブクラス 第三者によって提供されたソースコードのないクラスライブラリにも対応できる July 26, 2001 SWoPP 2001 PRO, Okinawa

ロード時のバイトコード変換 与えられた配置アスペクトに従って、 Addistant の処理系が Java プログラムを 自動的に変換 JVMにクラスをロードする前にバイトコードを書き換える バイトコード変換にはJavassist[Chiba00] を 利用 July 26, 2001 SWoPP 2001 PRO, Okinawa

分散配置アスペクト言語 独立したポリシーファイルに記述 クラスAとBを “hostH”変数のホスト に配置 <policy> <import … from=“hostH”> A B </import> <import … from=“hostI”> p.q.[C|D] </import> <import …> E </import> </policy> クラスAとBを “hostH”変数のホスト に配置 p.q.Cとp.q.Dを “hostI”に配置 Eについては 限定しない July 26, 2001 SWoPP 2001 PRO, Okinawa

配置クラス指定子 配置するクラスを、あるまとまりで指定できる パッケージ、サブパッケージ サブクラス ただし、重複する場合、上方の宣言が有効 COM.xxx.file.* COM.yyy.- subclass@java.awt.Component exactsubclass@java.io.InputStream July 26, 2001 SWoPP 2001 PRO, Okinawa

現実的なシステムに向けて プロキシ・マスタ方式の限界 遠隔オブジェクト(マスタ)に対応して、手元では代理のオブジェクト(プロキシ)を用いる Java RMI など、多くのORB で使われている方式 従来の ORB の実装法をそのまま適用は無理… メソッド 呼び出し プロキシ マスタ ネットワーク通信 July 26, 2001 SWoPP 2001 PRO, Okinawa

システム・クラスの存在 プロキシ・マスタ方式 クラス定義またはクラスを使う側の コードの変更が必要 システムクラスの場合バイトコード変換禁止 例:プロキシクラスを元のクラスの サブクラスとする実装法 元のクラスが final クラスのときは使えない、など July 26, 2001 SWoPP 2001 PRO, Okinawa

Addistant のプロキシ実装方式 クラス毎に異なる実装法で遠隔参照を実現 アスペクト言語で宣言的に指定 実装法により、変更が必要なコードの範囲が 異なる システムクラスの変更を避けるように 実装法を選択 アスペクト言語で宣言的に指定 「置き換え」、「名前変更」、 「サブクラス」、「複製」 July 26, 2001 SWoPP 2001 PRO, Okinawa

「置き換え」手法 (例:ユーザクラス) 対象クラスをプロキシに置き換え 元のクラスを変更できる場合 ひとつのJVM上には、プロキシかマスタのどちらか一方のみ .. Show .. Widget w = new Widget(); w.show(); Widget show() 分散化 置き換える .. Send .. Widget show() July 26, 2001 SWoPP 2001 PRO, Okinawa

「名前変更」手法 (例:java.awt.Window) コード中に現れた対象クラス名を プロキシクラスのものに変更 元のクラスを変更できない場合 使っている側のコードを変更する .. Show .. Widget w = new Widget(); w.show(); Widget show() 分散化 .. Send .. WidgetProxy w = new WidgetProxy(); WidgetProxy show() July 26, 2001 SWoPP 2001 PRO, Okinawa

「サブクラス」手法 (例:java.util.Vector) 対象クラスのサブクラスとしてプロキシクラスを定義 1つのJVM上にプロキシとマスタを 混在させたい場合 .. Show .. Widget w = new Widget(); w.show(); Widget show() 分散化 指示の場合によっては .. Send .. Widget w = new WidgetProxy(); WidgetProxy show() July 26, 2001 SWoPP 2001 PRO, Okinawa

「複製」手法 (例:java.lang.String) プロキシクラスは作らず、遠隔メソッド呼び出しの際、オブジェクトを移送して複製を渡す Shallow copy 変則版 - 「書き戻し複製」手法 配列オブジェクトに 用いる byte[] buf = …; istream.read(buf); July 26, 2001 SWoPP 2001 PRO, Okinawa

関連研究 - AOP Aspect Oriented Programming (AOP) Javaベースの AOP 言語 絡み合うコードを分けて書くように、書けるようにする、プログラミングのパラダイム 何を分けられるようにし、どのようにアスペクト言語を設計・実現するかが課題 Javaベースの AOP 言語 D [Lopes97] AspectJ [Xerox Palo Alto 97-] July 26, 2001 SWoPP 2001 PRO, Okinawa

D [Lopes97] 分散専用 AOP 言語 Addistant は、 アスペクト言語として相補的な役割 Java + 並列同期アスペクト + IDLアスペクト Addistant は、 Java + 分散配置アスペクト + プロキシ実装アスペクト バイトコードレベルのウィーバ(アスペクト合成器) アスペクト言語として相補的な役割 July 26, 2001 SWoPP 2001 PRO, Okinawa

AspectJ [Xerox Palo Alto 97-] Java を拡張した、汎用の AOP 言語 Addistant は分散専用 現在の AspectJ [Kiczales2001] には、Addistant で達成した Separation of Concerns を直接実現する機能が不在 記述力の欠如 - Addistant と同様の Separation of Concerns を実現できない(Join-point のカバー不足) 再利用性の欠如 - ライブラリとして Addistant と同様の機能を提供できない (Points-cut 語彙の不足) July 26, 2001 SWoPP 2001 PRO, Okinawa

応用例: 応答性能のよい遠隔表示 X Window 応答性能のよい遠隔表示のためには ライブラリ・レベルで分散化 応答性能悪い 応答性能のよい遠隔表示のためには プログラム全体を手で変更して分散化 速いが、開発に余分な工数が 必要 X Protocol ユーザ プログラム GUIモジュール ユーザ プログラム July 26, 2001 SWoPP 2001 PRO, Okinawa

X Window Xlib ライブラリレベルで分散化 低レベルな命令が大量に ネットワークを飛び交う Xlib ユーザ プログラム マウスが動いた マウスボタン押された X Window では、ライブラリレベルで分散化を行っていて、 全自動の遠隔表示環境を実現しています。 線を書くなどの比較的低レベルな命令やイベントが大量にネットワークを行き交う。 GUI がシンプルな場合や、ネットワークの帯域とサーバのCPUリソースが潤沢に得られる場合には問題ないわけですが。 Xlib マウスボタン離された ユーザ プログラム 線を書け July 26, 2001 SWoPP 2001 PRO, Okinawa

適切なプログラム分割による 応答性能のよい遠隔表示 ユーザプログラムを変更 応答性能のよい遠隔表示が可能 ORB ライブラリ ORBを使って、プログラムを変更すると、 応答性能のよい遠隔表示が可能になります。 ウィンドウ内で クリックあり ユーザ プログラム ユーザ プログラム 内部ウィンドウ表示 July 26, 2001 SWoPP 2001 PRO, Okinawa

分散 Swing アプリケーション ポリシーファイル <policy> <import proxy="rename" from="display"> subclass@java.awt.- subclass@javax.swing.- .. </import> <import proxy="rename" from="application"> exactsubclass@java.io.[InputStream|OutputStream|..] exactsubclass@javax.swing.filechooser.* </import> <import proxy="subclass"> subclass@java.util.[AbstractCollection|..] </import> <import proxy="writeBackCopy"> array@- </import> <import proxy="replace" from="application"> user@- </import> <import proxy="copy"> - </import> </policy> July 26, 2001 SWoPP 2001 PRO, Okinawa

まとめ Addistant – 機能分散プログラム開発の支援ツール アスペクト指向を導入し、分散配置コードをまとめて簡潔に記述できるようにした 実際に既存のプログラムに対して遠隔表示機能を追加する実験をおこない、有用性を確認した July 26, 2001 SWoPP 2001 PRO, Okinawa

今後の課題 現在の Addistant の実装は、2つのホスト上での分散に限られているが、この設計が3つ以上のホストにも対応できることを確認する 支援効果の定量的な測定のための測定基準を開発し、Addistant を利用する場合の効果を予測しやすくする 分散サイクリックGC への対応 July 26, 2001 SWoPP 2001 PRO, Okinawa

応答性能の実験 クリック – Window表示 クリックしてから内部ウインドウが完全に表示されるまで スタートアップホスト Sparc 440MHz GUI ホスト PentiumII 500MHz ネットワーク 10Base-T Half 100Base-TX Full July 26, 2001 SWoPP 2001 PRO, Okinawa

応答性能の実験 クリック – Window表示 クリックしてから内部ウインドウが完全に表示されるまで スタートアップホスト Sparc 440MHz GUI ホスト PentiumII 500MHz ネットワーク 10Base-T Half 100Base-TX Full July 26, 2001 SWoPP 2001 PRO, Okinawa

応答性能の測定結果 プログラム全体の変換による速度改善 応答時間(秒) (10Base-T(100Base-TX)) 通信量(キロバイト) 誤差±0.1秒 X Window Rawt Addistant 1回目 5.6(1.6) 3.2(2.6) 2.0(2.0) 2回目 5.6(1.4) 0.0(0.0) X Window Rawt Addistant 1回目 3493.57 116.20 81.88 2回目 3438.96 10.95 0.06 July 26, 2001 SWoPP 2001 PRO, Okinawa