Download presentation
Presentation is loading. Please wait.
1
Addistant:アスペクト指向の 分散プログラミング支援ツール
立堀道昭 (筑波大) 千葉滋 (東工大) 板野肯三 (筑波大) July 26, 2001 SWoPP 2001 PRO, Okinawa
2
概要 Java による分散プログラミングの 支援ツール Addistant Addistant の特徴
特に機能分散を行うプログラム開発を対象に 言語処理系と実行系で実現 既存の Java virtual machine (JVM) を活用 Addistant の特徴 アスペクト指向の導入 拡張クラスローダによる実現 July 26, 2001 SWoPP 2001 PRO, Okinawa
3
分散プログラミングの障害 非分散のロジックに分散のためのコードが絡み合い各所にちらばっている Crosscutting concerns
低いモジュラリティ 分散プログラミングを難しくしているものの1つ 分散に関する事項がプログラム全体に四散しており、簡潔に記述できない 絡み合ったコードの保守・変更は困難 July 26, 2001 SWoPP 2001 PRO, Okinawa
4
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
5
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
6
プログラミング技法による対処の限界 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
7
提案するツール Addistant 機能分散プログラムの開発を支援 実現手段 絡み合う分散配置コードの分離 抽象化による分散配置記述の簡素化
既存の Java 仮想機械 (JVM) を利用 ソースコードの変更が不可能なクラスにも対処 July 26, 2001 SWoPP 2001 PRO, Okinawa
8
Addistant の基本設計 クラス単位のインスタンスの配置方針 クラスローダによるバイトコード変換
開発者が配置アスペクトとして宣言的記述 例: GUI のクラスはあちら、その他のユーザクラスはこちら クラスローダによるバイトコード変換 java.lang.ClassLoader のサブクラス 第三者によって提供されたソースコードのないクラスライブラリにも対応できる July 26, 2001 SWoPP 2001 PRO, Okinawa
9
ロード時のバイトコード変換 与えられた配置アスペクトに従って、 Addistant の処理系が Java プログラムを 自動的に変換
JVMにクラスをロードする前にバイトコードを書き換える バイトコード変換にはJavassist[Chiba00] を 利用 July 26, 2001 SWoPP 2001 PRO, Okinawa
10
分散配置アスペクト言語 独立したポリシーファイルに記述 クラス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
11
配置クラス指定子 配置するクラスを、あるまとまりで指定できる パッケージ、サブパッケージ サブクラス ただし、重複する場合、上方の宣言が有効
COM.xxx.file.* COM.yyy.- July 26, 2001 SWoPP 2001 PRO, Okinawa
12
現実的なシステムに向けて プロキシ・マスタ方式の限界 遠隔オブジェクト(マスタ)に対応して、手元では代理のオブジェクト(プロキシ)を用いる
Java RMI など、多くのORB で使われている方式 従来の ORB の実装法をそのまま適用は無理… メソッド 呼び出し プロキシ マスタ ネットワーク通信 July 26, 2001 SWoPP 2001 PRO, Okinawa
13
システム・クラスの存在 プロキシ・マスタ方式 クラス定義またはクラスを使う側の コードの変更が必要 システムクラスの場合バイトコード変換禁止
例:プロキシクラスを元のクラスの サブクラスとする実装法 元のクラスが final クラスのときは使えない、など July 26, 2001 SWoPP 2001 PRO, Okinawa
14
Addistant のプロキシ実装方式 クラス毎に異なる実装法で遠隔参照を実現 アスペクト言語で宣言的に指定
実装法により、変更が必要なコードの範囲が 異なる システムクラスの変更を避けるように 実装法を選択 アスペクト言語で宣言的に指定 「置き換え」、「名前変更」、 「サブクラス」、「複製」 July 26, 2001 SWoPP 2001 PRO, Okinawa
15
「置き換え」手法 (例:ユーザクラス) 対象クラスをプロキシに置き換え 元のクラスを変更できる場合
ひとつのJVM上には、プロキシかマスタのどちらか一方のみ .. Show .. Widget w = new Widget(); w.show(); Widget show() 分散化 置き換える .. Send .. Widget show() July 26, 2001 SWoPP 2001 PRO, Okinawa
16
「名前変更」手法 (例: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
17
「サブクラス」手法 (例: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
18
「複製」手法 (例:java.lang.String)
プロキシクラスは作らず、遠隔メソッド呼び出しの際、オブジェクトを移送して複製を渡す Shallow copy 変則版 - 「書き戻し複製」手法 配列オブジェクトに 用いる byte[] buf = …; istream.read(buf); July 26, 2001 SWoPP 2001 PRO, Okinawa
19
関連研究 - AOP Aspect Oriented Programming (AOP) Javaベースの AOP 言語
絡み合うコードを分けて書くように、書けるようにする、プログラミングのパラダイム 何を分けられるようにし、どのようにアスペクト言語を設計・実現するかが課題 Javaベースの AOP 言語 D [Lopes97] AspectJ [Xerox Palo Alto 97-] July 26, 2001 SWoPP 2001 PRO, Okinawa
20
D [Lopes97] 分散専用 AOP 言語 Addistant は、 アスペクト言語として相補的な役割
Java + 並列同期アスペクト + IDLアスペクト Addistant は、 Java + 分散配置アスペクト + プロキシ実装アスペクト バイトコードレベルのウィーバ(アスペクト合成器) アスペクト言語として相補的な役割 July 26, 2001 SWoPP 2001 PRO, Okinawa
21
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
22
応用例: 応答性能のよい遠隔表示 X Window 応答性能のよい遠隔表示のためには ライブラリ・レベルで分散化
応答性能悪い 応答性能のよい遠隔表示のためには プログラム全体を手で変更して分散化 速いが、開発に余分な工数が 必要 X Protocol ユーザ プログラム GUIモジュール ユーザ プログラム July 26, 2001 SWoPP 2001 PRO, Okinawa
23
X Window Xlib ライブラリレベルで分散化 低レベルな命令が大量に ネットワークを飛び交う Xlib ユーザ プログラム
マウスが動いた マウスボタン押された X Window では、ライブラリレベルで分散化を行っていて、 全自動の遠隔表示環境を実現しています。 線を書くなどの比較的低レベルな命令やイベントが大量にネットワークを行き交う。 GUI がシンプルな場合や、ネットワークの帯域とサーバのCPUリソースが潤沢に得られる場合には問題ないわけですが。 Xlib マウスボタン離された ユーザ プログラム 線を書け July 26, 2001 SWoPP 2001 PRO, Okinawa
24
適切なプログラム分割による 応答性能のよい遠隔表示
ユーザプログラムを変更 応答性能のよい遠隔表示が可能 ORB ライブラリ ORBを使って、プログラムを変更すると、 応答性能のよい遠隔表示が可能になります。 ウィンドウ内で クリックあり ユーザ プログラム ユーザ プログラム 内部ウィンドウ表示 July 26, 2001 SWoPP 2001 PRO, Okinawa
25
分散 Swing アプリケーション ポリシーファイル <policy>
<import proxy="rename" from="display"> </import> <import proxy="rename" from="application"> </import> <import proxy="subclass"> </import> <import proxy="writeBackCopy"> </import> <import proxy="replace" from="application"> </import> <import proxy="copy"> </import> </policy> July 26, 2001 SWoPP 2001 PRO, Okinawa
26
まとめ Addistant – 機能分散プログラム開発の支援ツール
アスペクト指向を導入し、分散配置コードをまとめて簡潔に記述できるようにした 実際に既存のプログラムに対して遠隔表示機能を追加する実験をおこない、有用性を確認した July 26, 2001 SWoPP 2001 PRO, Okinawa
27
今後の課題 現在の Addistant の実装は、2つのホスト上での分散に限られているが、この設計が3つ以上のホストにも対応できることを確認する 支援効果の定量的な測定のための測定基準を開発し、Addistant を利用する場合の効果を予測しやすくする 分散サイクリックGC への対応 July 26, 2001 SWoPP 2001 PRO, Okinawa
28
応答性能の実験 クリック – Window表示
クリックしてから内部ウインドウが完全に表示されるまで スタートアップホスト Sparc 440MHz GUI ホスト PentiumII 500MHz ネットワーク 10Base-T Half 100Base-TX Full July 26, 2001 SWoPP 2001 PRO, Okinawa
29
応答性能の実験 クリック – Window表示
クリックしてから内部ウインドウが完全に表示されるまで スタートアップホスト Sparc 440MHz GUI ホスト PentiumII 500MHz ネットワーク 10Base-T Half 100Base-TX Full July 26, 2001 SWoPP 2001 PRO, Okinawa
30
応答性能の測定結果 プログラム全体の変換による速度改善 応答時間(秒) (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回目 116.20 81.88 2回目 10.95 0.06 July 26, 2001 SWoPP 2001 PRO, Okinawa
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.