Top Banner
March 21-23 , 2001 JSSST SPA 2001, Kyoto 既既 Java 既既既既既既 既既既既既既既既既既既 既既既既 既既既既 既既既既 既既既既既 既既既 既既既既 既既 既既
21

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

Jan 21, 2016

Download

Documents

Michel Canales

既存 Java プログラムの バイトコード変換による 機能分散. 筑波大学 立堀道昭 佐々木俊幸 千葉滋 板野肯三. たつ ぼり. ソフトウェアの分散実行. GUI とアプリケーション・ロジックの分離 「PC anywhere」 「ゼロ・アドミニストレーション」 「シン・クライアント」 管理コストの削減 安価なクライアント環境を活用できるよう. ソフトウェアの自動分散化. 自動化による開発コスト削減 既存の環境(全自動の遠隔表示) X Window System、VNC、Rawt [IBM Haifa 98] 既存の(半自動)分散化支援ツール - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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

質問 提案をどうぞ・