既存
This presentation is the property of its rightful owner.
Sponsored Links
1 / 21

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


  • 66 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Java

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

筑波大学

立堀道昭

佐々木俊幸 千葉滋 板野肯三

たつ ぼり

JSSST SPA 2001, Kyoto


Java

ソフトウェアの分散実行

GUI とアプリケーション・ロジックの分離

「PC anywhere」

「ゼロ・アドミニストレーション」

「シン・クライアント」

  • 管理コストの削減

  • 安価なクライアント環境を活用できるよう

JSSST SPA 2001, Kyoto


Java

ソフトウェアの自動分散化

  • 自動化による開発コスト削減

  • 既存の環境(全自動の遠隔表示)

    • X Window System、VNC、Rawt[IBM Haifa 98]

  • 既存の(半自動)分散化支援ツール

    • JavaRMI、HORB、ObjectSpace、…

    • Emerald[Black87]、”remotenew”[Nagaratnam96]、JavaParty[Philippen99]、…

JSSST SPA 2001, Kyoto


X window

X Window

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

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

マウスが動いた

マウスボタン押された

Xlib

マウスボタン離された

ユーザプログラム

線を書け

JSSST SPA 2001, Kyoto


Java

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

  • ユーザプログラムを変更

    • 応答性能のよい遠隔表示が可能

ORB

ライブラリ

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

ユーザプログラム

ユーザプログラム

内部ウィンドウ表示

JSSST SPA 2001, Kyoto


Java

既存の分散化手法

  • X Window

    • ライブラリ・レベルの分散化

      • 完全自動だが遅い

  • ORB

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

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

XProtocol

ユーザプログラム

GUIモジュール

ユーザプログラム

JSSST SPA 2001, Kyoto


Addistant

提案するシステムAddistant

  • より自動化されたORB

    • プログラム全体を自動変更して分散化

    • 開発者はプログラムを直接いじる必要はない

  • 現実的なシステムにむけて

    • 実用的な Swing アプリケーションにも対応

    • 既存の Java 仮想機械 (JVM) の利用

    • バイトコード変換

    • 開発者による分散化の指示の簡素化

JSSST SPA 2001, Kyoto


Addistant1

Addistant の基本設計

  • クラスローダによるバイトコード変換

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

  • クラス単位でインスタンスの配置方針を指示

    • 開発者がポリシーファイルに宣言的記述

    • 例: GUI のクラスはあちら、その他のユーザクラスはこちら

JSSST SPA 2001, Kyoto


Java

現実的なシステムに向けて

  • プロキシ・マスタ方式の限界

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

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

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

メソッド呼び出し

プロキシ

マスタ

ネットワーク通信

JSSST SPA 2001, Kyoto


Java

システム・クラスの存在

  • プロキシ・マスタ方式

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

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

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

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

JSSST SPA 2001, Kyoto


Addistant2

Addistant の方式

  • クラス毎に異なる実装法で遠隔参照を実現

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

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

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

  • XML風のポリシーファイルで宣言的に指定

    • 「置き換え」、「名前変更」、「サブクラス」、「複製」

JSSST SPA 2001, Kyoto


Java

Widget

Widget

show()

show()

.. Show ..

.. Send ..

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

  • 対象クラスをプロキシに置き換え

    • 元のクラスを変更できる場合

    • ひとつのJVM上には、プロキシかマスタのどちらか一方のみ

Widget w = new Widget();

w.show();

分散化

置き換える

JSSST SPA 2001, Kyoto


Java awt window

Widget

WidgetProxy

show()

show()

.. Show ..

.. Send ..

「名前変更」手法(例:java.awt.Window)

  • コード中に現れた対象クラス名をプロキシクラスのものに変更

    • 元のクラスを変更できない場合

    • 使っている側のコードを変更する

Widget w = new Widget();

w.show();

分散化

WidgetProxy w

= new WidgetProxy();

JSSST SPA 2001, Kyoto


Java util vector

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

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

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

    • Shallow copy

  • 変則版 - 「書き戻し複製」手法

    • 配列オブジェクトに用いる

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

JSSST SPA 2001, Kyoto


Window

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

  • クリックしてから内部ウインドウが完全に表示されるまで

    • スタートアップホスト

      • Sparc 440MHz

    • GUI ホスト

      • PentiumII 500MHz

    • ネットワーク

      • 10Base-T Half

      • 100Base-TX Full

JSSST SPA 2001, Kyoto


Window1

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

  • クリックしてから内部ウインドウが完全に表示されるまで

    • スタートアップホスト

      • Sparc 440MHz

    • GUI ホスト

      • PentiumII 500MHz

    • ネットワーク

      • 10Base-T Half

      • 100Base-TX Full

JSSST SPA 2001, Kyoto


Swing

分散 Swing アプリケーション

  • ポリシーファイル

<policy>

<importproxy="rename" from="display">

[email protected][email protected]- .. </import>

<importproxy="rename" from="application">

[email protected][InputStream|OutputStream|..]

[email protected]* </import>

<importproxy="subclass">

[email protected][AbstractCollection|..] </import>

<importproxy="writeBackCopy">

array@- </import>

<importproxy="replace" from="application">

user@- </import>

<importproxy="copy">

- </import>

</policy>

JSSST SPA 2001, Kyoto


Java

応答性能の測定結果

  • プログラム全体の変換による速度改善

    • 応答時間(秒) (10Base-T(100Base-TX))

    • 通信量(キロバイト)

JSSST SPA 2001, Kyoto


Java

まとめ

  • 透過な分散 JVM を既存の JVM を用いて構築する際に鍵となる技術

    • 既存の Java プログラムを複数のホスト上に分散させるための支援ツールAddistant を提案

  • その他の貢献

    • 分散プログラミング用の Aspect Oriented Programming ツール

    • Javassist[Chiba00] 応用のケース・スタディ

JSSST SPA 2001, Kyoto


Java

質問・提案をどうぞ

JSSST SPA 2001, Kyoto


  • Login