Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java における 先進的リフレクション技術

Similar presentations


Presentation on theme: "Java における 先進的リフレクション技術"— Presentation transcript:

1 Java における 先進的リフレクション技術
OpenJava, Javassist 立堀(筑波大)、千葉(東工大) Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

2 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
この話は… 構造リフレクション・システム、OpenJava と Javassist の紹介 Javassist を利用したアプリケーション Addistant の紹介 Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

3 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
構造リフレクションと プログラム変換 OpenJava と Javassist Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

4 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
手作業によるプログラムの編集 プログラムを編集して新しい(バージョンの)ソフトウェアを作る 機能の追加・変更等 元の プログラム 修正後の プログラム Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

5 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
プログラム編集作業 編集作業にはルーチンワークが 頻繁に含まれる 編集のポイント ルーチンワークによるコード編集 元の プログラム 修正後の プログラム Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

6 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
プログラム変換システム ルーチンワークをコンピュータが肩代わり メタプログラム 編集のポイント プログラム変換 システム 元の プログラム 修正後の プログラム Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

7 OpenJava と Javassist は そんなシステムです
または、構造リフレクション・システム Java 用プログラム変換のための ツール/フレームワーク メタプログラム 編集のポイントを Java で記述 Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

8 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
構造リフレクション? 構造リフレクション(structural reflection) プログラムでプログラムの構造を扱う 特に、クラスの構造(クラス・オブジェクトAPI) 例:クラスにメソッドを追加 動作リフレクション(behavioral reflection) プログラムでプログラムの動作を扱う 例:メソッド呼び出しをトラップ Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

9 構造リフレクション・システムOpenJava
プログラムのソーステキスト変換のための フレームワーク 細かい構文を気にせずに、クラスの構造レベルのプログラム編集を記述できる コンパイル時構造リフレクション 文法拡張も可能 Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

10 構造リフレクション・システムJavassist
プログラムのバイトコード変換のための ツール バイトコードの知識がなくとも、ソーステキストやクラスの構造レベルのプログラム編集を記述できる ロード時構造リフレクション 拡張クラスローダで利用できる Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

11 OpenJava と Javassist の 構造リフレクションAPI
コンパイラ書きたいですか? アセンブラ書きたいですか? クラス・オブジェクト API オブジェクト指向的なプログラム変換に適したデータ構造モデルを採用 クラスの構造レベルの抽象度を備える Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

12 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
クラス・オブジェクト API Java Reflection API と同様の手軽さで プログラムの変換を クラスクラス 標準 API java.lang.Class に相当 OJClass – OpenJava CtClass – Javassist Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

13 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
OJClass, CtClass 標準APIと同様、クラス定義を調べるためのメソッドを備える getMethod(..), getField(..), getName(), getSuperclass(), getInterfaces() さらに加工のためのメソッドを備える addMethod(..), addField(..), setName(..), setSuperclass(), addInterfaces(), … Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

14 構造リフレクションを用いた アプリケーション
動作リフレクションのベースとして 対故障性(Fault-Tolerance)を備えたプラットフォーム Design by Contract 機能分散処理 … などなど Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

15 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
構造リフレクションの アプリケーション Addistant Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

16 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
Addistant / Javassist 既存のプログラムを指示に従って分散化 GUI モジュールは あちら etc. 分散方針 Addistant Translator 元の バイトコード 分散化された バイトコード Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

17 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
シナリオ – 遠隔GUI 「クールなアプリケーション・ソフトウェアただしローカルで動く」 「遠隔地にあるパソコンからサーバホストにアクセスしてアプリを使いたい」 アプリケーション・ソフトウェアやデータの 一元一括管理 シン・クライアント Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

18 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
X, VCN による遠隔GUI Xlib ライブラリレベルで分散化 低レベルな命令が大量に ネットワークを飛び交う マウスが動いた マウスボタン押された Xlib マウスボタン離された ユーザ プログラム 線を書け Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

19 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
Addistant による遠隔GUI 既存の Java プログラムを機能モジュールで分割して分散化 例:Swingオブジェクトを遠隔ディスプレイホストで動かす ORB ライブラリ ウィンドウ内で クリックあり ユーザ プログラム ユーザ プログラム 内部ウィンドウ表示 Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

20 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
Addistant の実装 Addistant / Javassist バイトコードを変換して、複数のJVM上のコードが相互に通信しながら動作するようにする バイトコード変換器と 通信ライブラリ (ORBライブラリ) からなる Addistant Translator Javassist Addistant ORB Class Loader JVM Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

21 Javassist 利用の様子(1) プロキシ(スタブ)クラスの生成
メタプログラム CtClass org = .. ; CtClass proxy = new CtClass(); CtMethod[] m = org.getMethods(); for (i = 0; i < m.length; ++i) proxy.addMethod( … m[i] ); 同じシグネチャの メソッド追加 メソッド 呼び出し プロキシ マスタ ネットワーク通信 Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

22 Javassist 利用の様子(2) フィールド・アクセスのトラップ
メタプログラム CtMethod m = … ; CodeConverter conv = CodeConverter(); conv.replaceFieldRead( .. ); conv.replaceFieldWrite( .. ); m.instrument(conv); フィールドアクセスを スタティックメソッド 呼び出しに置き換え o.x = 1; Proxy.write_x(o, 1); Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

23 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
まとめ 構造リフレクション・システム OpenJava – ソーステキスト編集 Javassist – バイトコード編集 Javassist の利用例 Addistant – 既存プログラムの機能分散 Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,

24 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,
詳細な情報は… New 東工大 千葉研究室 OpenJava, Javassist の公式サイト 関係者のページ 論文 連絡先 など Sep. 25, 2001 The Java Technology Workshop, Reflection 2001, Kyoto, Japan,


Download ppt "Java における 先進的リフレクション技術"

Similar presentations


Ads by Google