210 likes | 310 Views
既存 Java プログラムの バイトコード変換による 機能分散. 筑波大学 立堀道昭 佐々木俊幸 千葉滋 板野肯三. たつ ぼり. ソフトウェアの分散実行. GUI とアプリケーション・ロジックの分離 「PC anywhere」 「ゼロ・アドミニストレーション」 「シン・クライアント」 管理コストの削減 安価なクライアント環境を活用できるよう. ソフトウェアの自動分散化. 自動化による開発コスト削減 既存の環境(全自動の遠隔表示) X Window System、VNC、Rawt [IBM Haifa 98] 既存の(半自動)分散化支援ツール
E N D
既存Javaプログラムのバイトコード変換による機能分散既存Javaプログラムのバイトコード変換による機能分散 筑波大学 立堀道昭 佐々木俊幸 千葉滋 板野肯三 たつ ぼり JSSST SPA 2001, Kyoto
ソフトウェアの分散実行 GUI とアプリケーション・ロジックの分離 「PC anywhere」 「ゼロ・アドミニストレーション」 「シン・クライアント」 • 管理コストの削減 • 安価なクライアント環境を活用できるよう JSSST SPA 2001, Kyoto
ソフトウェアの自動分散化 • 自動化による開発コスト削減 • 既存の環境(全自動の遠隔表示) • X Window System、VNC、Rawt[IBM Haifa 98] • 既存の(半自動)分散化支援ツール • JavaRMI、HORB、ObjectSpace、… • Emerald[Black87]、”remotenew”[Nagaratnam96]、JavaParty[Philippen99]、… JSSST SPA 2001, Kyoto
X Window • Xlib ライブラリレベルで分散化 • 低レベルな命令が大量にネットワークを飛び交う マウスが動いた マウスボタン押された Xlib マウスボタン離された ユーザプログラム 線を書け JSSST SPA 2001, Kyoto
ORBによる手動(半自動)変換 • ユーザプログラムを変更 • 応答性能のよい遠隔表示が可能 ORB ライブラリ ウィンドウ内でクリックあり ユーザプログラム ユーザプログラム 内部ウィンドウ表示 JSSST SPA 2001, Kyoto
既存の分散化手法 • X Window • ライブラリ・レベルの分散化 • 完全自動だが遅い • ORB • プログラム全体を手で分割して分散化 • 速いが、開発に余分な工数が必要 XProtocol ユーザプログラム GUIモジュール ユーザプログラム JSSST SPA 2001, Kyoto
提案するシステムAddistant • より自動化されたORB • プログラム全体を自動変更して分散化 • 開発者はプログラムを直接いじる必要はない • 現実的なシステムにむけて • 実用的な Swing アプリケーションにも対応 • 既存の Java 仮想機械 (JVM) の利用 • バイトコード変換 • 開発者による分散化の指示の簡素化 JSSST SPA 2001, Kyoto
Addistant の基本設計 • クラスローダによるバイトコード変換 • バイトコード変換にはJavassist[Chiba00] を利用 • クラス単位でインスタンスの配置方針を指示 • 開発者がポリシーファイルに宣言的記述 • 例: GUI のクラスはあちら、その他のユーザクラスはこちら JSSST SPA 2001, Kyoto
現実的なシステムに向けて • プロキシ・マスタ方式の限界 • 遠隔オブジェクト(マスタ)に対応して、手元では代理のオブジェクト(プロキシ)を用いる • Java RMI など、多くのORB で使われている方式 しかし、既存の ORB の実装法をそのまま適用は無理… メソッド呼び出し プロキシ マスタ ネットワーク通信 JSSST SPA 2001, Kyoto
システム・クラスの存在 • プロキシ・マスタ方式 • クラス定義またはクラスを使う側のコードの変更が必要 • システムクラスの場合バイトコード変換禁止 • 例:プロキシクラスをサブクラスとする実装法 • 元のクラスが final クラスのときは使えない、など JSSST SPA 2001, Kyoto
Addistant の方式 • クラス毎に異なる実装法で遠隔参照を実現 • 実装法により、変更が必要なコードの範囲が異なる • システムクラスの変更を避けるように実装法を選択 • “長いものには巻かれろ”法 • XML風のポリシーファイルで宣言的に指定 • 「置き換え」、「名前変更」、「サブクラス」、「複製」 JSSST SPA 2001, Kyoto
Widget Widget show() show() .. Show .. .. Send .. 「置き換え」手法(例:ユーザクラス) • 対象クラスをプロキシに置き換え • 元のクラスを変更できる場合 • ひとつのJVM上には、プロキシかマスタのどちらか一方のみ Widget w = new Widget(); w.show(); 分散化 置き換える JSSST SPA 2001, Kyoto
Widget WidgetProxy show() show() .. Show .. .. Send .. 「名前変更」手法(例:java.awt.Window) • コード中に現れた対象クラス名をプロキシクラスのものに変更 • 元のクラスを変更できない場合 • 使っている側のコードを変更する Widget w = new Widget(); w.show(); 分散化 WidgetProxy w = new WidgetProxy(); JSSST SPA 2001, Kyoto
Widget WidgetProxy show() show() .. Send .. .. Show .. 「サブクラス」手法(例:java.util.Vector) • 対象クラスのサブクラスとしてプロキシクラスを定義 • 1つのJVM上にプロキシとマスタを混在させたい場合 Widget w = new Widget(); w.show(); 分散化 指示の場合によっては Widget w = new WidgetProxy(); JSSST SPA 2001, Kyoto
「複製」手法(例:java.lang.String) • プロキシクラスは作らず、遠隔メソッド呼び出しの際、オブジェクトを移送して複製を渡す • Shallow copy • 変則版 - 「書き戻し複製」手法 • 配列オブジェクトに用いる byte[] buf = …;istream.read(buf); JSSST SPA 2001, Kyoto
応答性能の実験クリック –Window表示 • クリックしてから内部ウインドウが完全に表示されるまで • スタートアップホスト • Sparc 440MHz • GUI ホスト • PentiumII 500MHz • ネットワーク • 10Base-T Half • 100Base-TX Full JSSST SPA 2001, Kyoto
応答性能の実験クリック –Window表示 • クリックしてから内部ウインドウが完全に表示されるまで • スタートアップホスト • Sparc 440MHz • GUI ホスト • PentiumII 500MHz • ネットワーク • 10Base-T Half • 100Base-TX Full JSSST SPA 2001, Kyoto
分散 Swing アプリケーション • ポリシーファイル <policy> <importproxy="rename" from="display"> subclass@java.awt.- subclass@javax.swing.- .. </import> <importproxy="rename" from="application"> exactsubclass@java.io.[InputStream|OutputStream|..] exactsubclass@javax.swing.filechooser.* </import> <importproxy="subclass"> subclass@java.util.[AbstractCollection|..] </import> <importproxy="writeBackCopy"> array@- </import> <importproxy="replace" from="application"> user@- </import> <importproxy="copy"> - </import> </policy> JSSST SPA 2001, Kyoto
応答性能の測定結果 • プログラム全体の変換による速度改善 • 応答時間(秒) (10Base-T(100Base-TX)) • 通信量(キロバイト) JSSST SPA 2001, Kyoto
まとめ • 透過な分散 JVM を既存の JVM を用いて構築する際に鍵となる技術 • 既存の Java プログラムを複数のホスト上に分散させるための支援ツールAddistant を提案 • その他の貢献 • 分散プログラミング用の Aspect Oriented Programming ツール • Javassist[Chiba00] 応用のケース・スタディ JSSST SPA 2001, Kyoto
質問・提案をどうぞ JSSST SPA 2001, Kyoto