YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

既存 Java プログラムのバイトコード変換によ

る機能分散

筑波大学

立堀道昭佐々木俊幸 千葉滋 板野肯三

たつ ぼり

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

ソフトウェアの分散実行GUI とアプリケーション・ロジックの分離

「 PC anywhere 」「ゼロ・アドミニストレーション」「シン・クライアント」

– 管理コストの削減– 安価なクライアント環境を活用できるよう

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

ソフトウェアの自動分散化 自動化による開発コスト削減

既存の環境(全自動の遠隔表示)– X Window System 、 VNC 、 Rawt[IBM Haifa

98]

既存の(半自動)分散化支援ツール– JavaRMI 、 HORB 、 ObjectSpace …、– Emerald[Black87] ”、 remotenew”[Nagaratnam9

6] 、 JavaParty[Philippen99] …、

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

X Window Xlib ライブラリレベルで分散化

– 低レベルな命令が大量にネットワークを飛び交う

線を書け

マウスが動いた

マウスボタン押された

マウスボタン離された

ユーザプログラム

Xlib

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

ORB による手動(半自動)変換

ユーザプログラムを変更– 応答性能のよい遠隔表示が可能

ユーザプログラム

内部ウィンドウ表示

ウィンドウ内でクリックあり

ORBライブラリ

ユーザプログラム

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

既存の分散化手法 X Window

– ライブラリ・レベルの分散化 完全自動だが遅い

ORB– プログラム全体を手で分割して分散化

速いが、開発に余分な工数が必要

ユーザプログラム

X Protocol

ユーザプログラム

GUI モジュール

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

提案するシステムAddistant

より自動化された ORB– プログラム全体を自動変更して分散化– 開発者はプログラムを直接いじる必要はない

現実的なシステムにむけて– 実用的な Swing アプリケーションにも対応– 既存の Java 仮想機械 (JVM) の利用– バイトコード変換– 開発者による分散化の指示の簡素化

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

Addistant の基本設計 クラスローダによるバイトコード変換

– バイトコード変換には Javassist[Chiba00] を利用

クラス単位でインスタンスの配置方針を指示– 開発者がポリシーファイルに宣言的記述– 例: GUI のクラスはあちら、その他のユーザ

クラスはこちら

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

現実的なシステムに向けて プロキシ マスタ方式の限界・

– 遠隔オブジェクト(マスタ)に対応して、手元では代理のオブジェクト(プロキシ)を用いる

– Java RMI など、多くの ORB で使われている方式

しかし、既存の ORB の実装法をそのまま適用は無理…

マスタプロキシメソッド呼び出し

ネットワーク通信

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

システム・クラスの存在 プロキシ・マスタ方式

– クラス定義またはクラスを使う側のコードの変更が必要

– システムクラスの場合バイトコード変換禁止

– 例:プロキシクラスをサブクラスとする実装法

元のクラスが final クラスのときは使えない、など

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

Addistant の方式 クラス毎に異なる実装法で遠隔参照を実現

– 実装法により、変更が必要なコードの範囲が異なる

– システムクラスの変更を避けるように実装法を選択

– “ 長いものには巻かれろ”法

XML 風のポリシーファイルで宣言的に指定– 置き換え」、「名前変更」、「

サブクラス」、 複製」「 「

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

「置き換え」手法(例:ユーザクラス)

対象クラスをプロキシに置き換え– 元のクラスを変更できる場合–ひとつの JVM上には、プロキシかマスタ

のどちらか一方のみ

Widget w = new Widget();w.show();

Widgetshow()

分散化

Widgetshow()

.. Show ..

.. Send ..

置き換える

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

「名前変更」手法(例: java.awt.Window ) コード中に現れた対象クラス名を

プロキシクラスのものに変更– 元のクラスを変更できない場合– 使っている側のコードを変更する

Widget w = new Widget();w.show();

Widgetshow()

分散化

WidgetProxy w = new WidgetProxy();

WidgetProxyshow()

.. Show ..

.. Send ..

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

「サブクラス」手法(例: java.util.Vector )

対象クラスのサブクラスとしてプロキシクラスを定義– 1つの JVM上にプロキシとマスタを混在させたい場合

Widget w = new Widget();w.show();

Widgetshow()

分散化

Widget w = new WidgetProxy();

WidgetProxyshow()

指示の場合によっては.. Send ..

.. Show ..

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

「複製」手法(例: java.lang.String )

プロキシクラスは作らず、遠隔メソッド呼び出しの際、オブジェクトを移送して複製を渡す– Shallow copy

変則版 - 「書き戻し複製」手法– 配列オブジェクトに

用いる byte[] buf = …;istream.read(buf);

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

応答性能の実験クリック – Window 表示

クリックしてから内部ウインドウが完全に表示されるまで– スタートアップホスト

Sparc 440MHz

– GUI ホスト PentiumII 500MHz

– ネットワーク 10Base-T Half 100Base-TX Full

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

応答性能の実験クリック – Window 表示

クリックしてから内部ウインドウが完全に表示されるまで– スタートアップホスト

Sparc 440MHz

– GUI ホスト PentiumII 500MHz

– ネットワーク 10Base-T Half 100Base-TX Full

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

分散 Swing アプリケーション

ポリシーファイル<policy> <import proxy="rename" from="display"> [email protected]   [email protected]   .. </import> <import proxy="rename" from="application"> [email protected].[InputStream|OutputStream|..] [email protected].* </import> <import proxy="subclass"> [email protected].[AbstractCollection|..] </import> <import proxy="writeBackCopy"> array@- </import> <import proxy="replace" from="application"> user@- </import> <import proxy="copy"> - </import></policy>

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

応答性能の測定結果 プログラム全体の変換による速度改善

– 応答時間 (秒 ) (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) 0.0(0.0)

X Window Rawt Addistant

1 回目 3493.57 116.20 81.88

2 回目 3438.96 10.95 0.06

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

まとめ 透過な分散 JVM を既存の JVM を用いて構築する際に鍵となる技術– 既存の Java プログラムを複数のホスト上に分

散させるための支援ツール Addistant を提案

その他の貢献– 分散プログラミング用の Aspect Oriented

Programming ツール– Javassist[Chiba00] 応用のケース スタディ・

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

March 21-23, 2001

JSSST SPA 2001, Kyoto

質問 提案をどうぞ・


Related Documents