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

Slides:



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

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
USB2.0対応PICマイコンによる データ取得システムの開発
Javaのための暗黙的に型定義される構造体
班紹介 描画班一同.
Mavenによる プロジェクト管理 近畿大学理工学部 情報学科3年  小野実.
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
PHPの基礎と開発手法 Based on PHP5
アスペクト指向プログラミングと Dependency Injection の融合
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
Flyingware : バイトコード変換による 安全なエージェントの実行
既存Javaプログラムの バイトコード変換による 機能分散
望月 祐洋,由良 淳一,楠本 晶彦 {moma, yurayura,
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
安全なモバイルエージェント システム Flyingware のための 仮想ディスクの実現
アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone.
暗黙的に型付けされる構造体の Java言語への導入
統合開発環境のための アスペクト指向システム
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
.NET Framework 3.0 概要 (旧称 : WinFX)
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
Java Bytecode Modification and Applet Security
只見町 インターネット・エコミュージアムの「キーワード」検索の改善
Javaプログラムの変更を支援する 影響波及解析システム
既存Javaプログラム向け 分散化支援システムの開発
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
Addistant:アスペクト指向の 分散プログラミング支援ツール
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
MindStorms開発環境の比較・検討
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
JAVAバイトコードにおける データ依存解析手法の提案と実装
ソフトウェア工学 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
設計情報の再利用を目的とした UML図の自動推薦ツール
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
「マイグレーションを支援する分散集合オブジェクト」
アスペクト指向言語のための視点に応じた編集を可能にするツール
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
アスペクト指向プログラミングの 動的プログラムスライスへの応用
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
プログラム分散化のための アスペクト指向言語
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
統合開発環境のための プログラミング言語拡張 フレームワーク
The Personal Publication Reader: Illustrating Web Data Extraction, Personalization and Reasoning for the Semantic Web Robert Baumgartner*, Nicola Henze+,
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コードクローン解析に基づく デザインパターン適用候補の検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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,

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,

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

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

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,

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

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

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

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,

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,

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,

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

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