1 / 21

既存 Java プログラムの バイトコード変換による 機能分散

既存 Java プログラムの バイトコード変換による 機能分散. 筑波大学 立堀道昭 佐々木俊幸 千葉滋 板野肯三. たつ ぼり. ソフトウェアの分散実行. GUI とアプリケーション・ロジックの分離 「PC anywhere」 「ゼロ・アドミニストレーション」 「シン・クライアント」 管理コストの削減 安価なクライアント環境を活用できるよう. ソフトウェアの自動分散化. 自動化による開発コスト削減 既存の環境(全自動の遠隔表示) X Window System、VNC、Rawt [IBM Haifa 98] 既存の(半自動)分散化支援ツール

michel
Download Presentation

既存 Java プログラムの バイトコード変換による 機能分散

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 既存Javaプログラムのバイトコード変換による機能分散既存Javaプログラムのバイトコード変換による機能分散 筑波大学 立堀道昭 佐々木俊幸 千葉滋 板野肯三 たつ ぼり JSSST SPA 2001, Kyoto

  2. ソフトウェアの分散実行 GUI とアプリケーション・ロジックの分離 「PC anywhere」 「ゼロ・アドミニストレーション」 「シン・クライアント」 • 管理コストの削減 • 安価なクライアント環境を活用できるよう JSSST SPA 2001, Kyoto

  3. ソフトウェアの自動分散化 • 自動化による開発コスト削減 • 既存の環境(全自動の遠隔表示) • X Window System、VNC、Rawt[IBM Haifa 98] • 既存の(半自動)分散化支援ツール • JavaRMI、HORB、ObjectSpace、… • Emerald[Black87]、”remotenew”[Nagaratnam96]、JavaParty[Philippen99]、… JSSST SPA 2001, Kyoto

  4. X Window • Xlib ライブラリレベルで分散化 • 低レベルな命令が大量にネットワークを飛び交う マウスが動いた マウスボタン押された Xlib マウスボタン離された ユーザプログラム 線を書け JSSST SPA 2001, Kyoto

  5. ORBによる手動(半自動)変換 • ユーザプログラムを変更 • 応答性能のよい遠隔表示が可能 ORB ライブラリ ウィンドウ内でクリックあり ユーザプログラム ユーザプログラム 内部ウィンドウ表示 JSSST SPA 2001, Kyoto

  6. 既存の分散化手法 • X Window • ライブラリ・レベルの分散化 • 完全自動だが遅い • ORB • プログラム全体を手で分割して分散化 • 速いが、開発に余分な工数が必要 XProtocol ユーザプログラム GUIモジュール ユーザプログラム JSSST SPA 2001, Kyoto

  7. 提案するシステムAddistant • より自動化されたORB • プログラム全体を自動変更して分散化 • 開発者はプログラムを直接いじる必要はない • 現実的なシステムにむけて • 実用的な Swing アプリケーションにも対応 • 既存の Java 仮想機械 (JVM) の利用 • バイトコード変換 • 開発者による分散化の指示の簡素化 JSSST SPA 2001, Kyoto

  8. Addistant の基本設計 • クラスローダによるバイトコード変換 • バイトコード変換にはJavassist[Chiba00] を利用 • クラス単位でインスタンスの配置方針を指示 • 開発者がポリシーファイルに宣言的記述 • 例: GUI のクラスはあちら、その他のユーザクラスはこちら JSSST SPA 2001, Kyoto

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

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

  11. Addistant の方式 • クラス毎に異なる実装法で遠隔参照を実現 • 実装法により、変更が必要なコードの範囲が異なる • システムクラスの変更を避けるように実装法を選択 • “長いものには巻かれろ”法 • XML風のポリシーファイルで宣言的に指定 • 「置き換え」、「名前変更」、「サブクラス」、「複製」 JSSST SPA 2001, Kyoto

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

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

  14. 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

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

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

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

  18. 分散 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

  19. 応答性能の測定結果 • プログラム全体の変換による速度改善 • 応答時間(秒) (10Base-T(100Base-TX)) • 通信量(キロバイト) JSSST SPA 2001, Kyoto

  20. まとめ • 透過な分散 JVM を既存の JVM を用いて構築する際に鍵となる技術 • 既存の Java プログラムを複数のホスト上に分散させるための支援ツールAddistant を提案 • その他の貢献 • 分散プログラミング用の Aspect Oriented Programming ツール • Javassist[Chiba00] 応用のケース・スタディ JSSST SPA 2001, Kyoto

  21. 質問・提案をどうぞ JSSST SPA 2001, Kyoto

More Related