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

Slides:



Advertisements
Similar presentations
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
最新ファイルの提供を保証する代理FTPサーバの開発
JPAを利用した RESTful Webサービスの開発
クラウドにおける ネストした仮想化を用いた 安全な帯域外リモート管理
ネストした仮想化を用いた VMの安全な帯域外リモート管理
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
RMI ソフトウェア特論 第6回 /
入出力データ型に透過な Webサービス動的実行システム 松江工業高等専門学校 情報工学科 越田高志 情報処理学会第68回全国大会
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
Flyingware : バイトコード変換による 安全なエージェントの実行
プログラミング演習3 第2回 GUIの復習.
サーバ負荷分散におけるOpenFlowを用いた省電力法
望月 祐洋,由良 淳一,楠本 晶彦 {moma, yurayura,
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
ソフトウェア工学 知能情報学部 新田直也.
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone.
暗黙的に型付けされる構造体の Java言語への導入
分散IDSの実行環境の分離 による安全性の向上
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
Java Bytecode Modification and Applet Security
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
インターネットにおける真に プライベートなネットワークの構築
実行時情報に基づく OSカーネルのコンフィグ最小化
プログラミング演習3 第2回 GUIの復習.
仮想メモリを用いた VMマイグレーションの高速化
各種ルータに対応する P2P通信環境に関する研究
ゲーム開発モデルの基礎.
通信機構合わせた最適化をおこなう並列化ンパイラ
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
既存Javaプログラム向け 分散化支援システムの開発
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
Addistant:アスペクト指向の 分散プログラミング支援ツール
Java における 先進的リフレクション技術
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
アルゴリズムとプログラミング (Algorithms and Programming)
マイグレーションを支援する分散集合オブジェクト
ソフトウェア工学 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
「マイグレーションを支援する分散集合オブジェクト」
アスペクト指向言語のための視点に応じた編集を可能にするツール
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
強制パススルー機構を用いた VMの安全な帯域外リモート管理
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
異種セグメント端末による 分散型仮想LAN構築機構の設計と実装
ソフトウェア工学 知能情報学部 新田直也.
コードクローン解析に基づく デザインパターン適用候補の検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
MPIを用いた 並列処理 情報論理工学研究室 06‐1‐037‐0246 杉所 拓也.
X Window System 牧之内研 博士3年 木村健一郎.
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
ソケットの拡張によるJava用分散ミドルウエアの高信頼化
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

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

ソフトウェアの分散実行 GUI とアプリケーション・ロジックの分離 「PC anywhere」 「ゼロ・アドミニストレーション」 「シン・クライアント」 管理コストの削減 安価なクライアント環境を活用できるよう 今日お話するのは「ソフトウェアの分散実行」に関することです。 一口に分散実行といっても、様々な用途がありますが、 例えば、「GUIとアプリケーション・ロジック」を分離し、分散した状況で使いたいという要求が強くあります。 (ちまたでよく使われる)キーワードでは、…などというのがこれにあたります。 これによって、管理コストを削減したり、クライアント環境が安価にすむようにすることができます。 March 21-23, 2001 JSSST SPA 2001, Kyoto

ソフトウェアの自動分散化 自動化による開発コスト削減 既存の環境(全自動の遠隔表示) 既存の(半自動)分散化支援ツール X Window System、VNC、Rawt[IBM Haifa 98] 既存の(半自動)分散化支援ツール JavaRMI、HORB、ObjectSpace、… Emerald[Black87]、”remotenew”[Nagaratnam96] 、JavaParty[Philippen99]、… さて、我々の立脚しているポイントは、このような分散化を自動化して 開発コストを減らそう、というものです。 既存の全自動分散化環境には、先ほどの遠隔GUIの場合ですと、… が有名です。 また、全自動ではなく、そのような分散化したソフトウェアの開発を支援するツールがたくさんあります。 JavaRMI …. Emerald のような …. March 21-23, 2001 JSSST SPA 2001, Kyoto

X Window Xlib ライブラリレベルで分散化 低レベルな命令が大量に ネットワークを飛び交う Xlib ユーザ プログラム マウスが動いた マウスボタン押された Xlib マウスボタン離された X Window では、ライブラリレベルで分散化を行っていて、 全自動の遠隔表示環境を実現しています。 線を書くなどの比較的低レベルな命令やイベントが大量にネットワークを行き交う。 GUI がシンプルな場合や、ネットワークの帯域とサーバのCPUリソースが潤沢に得られる場合には問題ないわけですが。 ユーザ プログラム 線を書け March 21-23, 2001 JSSST SPA 2001, Kyoto

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

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

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

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

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

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

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

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

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

「サブクラス」手法 (例:java.util.Vector) 対象クラスのサブクラスとしてプロキシクラスを定義 1つのJVM上にプロキシとマスタを 混在させたい場合 .. Show .. Widget w = new Widget(); w.show(); Widget show() 分散化 指示の場合によっては .. Send .. Widget w = new WidgetProxy(); WidgetProxy show() March 21-23, 2001 JSSST SPA 2001, Kyoto

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

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

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

分散 Swing アプリケーション ポリシーファイル <policy> <import proxy="rename" from="display"> subclass@java.awt.- subclass@javax.swing.- .. </import> <import proxy="rename" from="application"> exactsubclass@java.io.[InputStream|OutputStream|..] exactsubclass@javax.swing.filechooser.* </import> <import proxy="subclass"> subclass@java.util.[AbstractCollection|..] </import> <import proxy="writeBackCopy"> array@- </import> <import proxy="replace" from="application"> user@- </import> <import proxy="copy"> - </import> </policy> 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) X Window Rawt Addistant 1回目 3493.57 116.20 81.88 2回目 3438.96 10.95 0.06 March 21-23, 2001 JSSST SPA 2001, Kyoto

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

質問・提案をどうぞ March 21-23, 2001 JSSST SPA 2001, Kyoto