Josh : バイトコードレベルでのJava用 Aspect Weaver

Slides:



Advertisements
Similar presentations
関心事指向アーキテクチャモデリング環 境 Concern-oriented Architecture Modeling Environment 九州工業大学大学院情報工学府 情報科学専攻 鵜林研究室 M1 佐藤 友紀 1.
Advertisements

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Java I 第2回 (4/18)
Dynamic AOPと その実装手法について
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
Java I 第2回 (9/22).
柳澤 佳里* 光来 健一* 千葉 滋* *東京工業大学 情報理工学研究科 数理・計算科学専攻
プログラミングIII演習 第1回目.
AspectScope によるアスペクトとクラスのつながりの視覚化
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
アスペクト指向プログラミングを用いたIDSオフロード
効率的なJava Dynamic AOPシステムを実現する Just-in-Time weaver
アスペクト指向プログラミングと Dependency Injection の融合
Flyingware : バイトコード変換による 安全なエージェントの実行
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
柳澤 佳里 (学籍番号: 03M37311) 指導教官: 千葉 滋 東京工業大学 情報理工学研究科 数理・計算科学専攻
AOP言語への 織り込みインターフェイスの導入 A Weaving-Interface for AOP Languages
コンパイラの解析 (2) GCJのデータ構造 - 1.
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
複数個のJoinpointの集合を 対象としたPointcutを 記述可能なアスペクト指向言語
数理・計算科学専攻 千葉研究室 08M37315 森田 悟史 指導教員 千葉 滋 教授
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
Javaによる Webアプリケーション入門 第6回
Java Bytecode Modification and Applet Security
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
動的データ依存関係解析を用いた Javaプログラムスライス手法
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
Recoveryアドバイスをもつ アスペクト指向システム
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
アスペクト指向を利用した永続オブジェクト・アクセスの高速化
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
Addistant:アスペクト指向の 分散プログラミング支援ツール
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
バイトコードを単位とするJavaスライスシステムの試作
アスペクト指向言語のための 独立性の高いパッケージシステム
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
Java における 先進的リフレクション技術
契約による クラスとアスペクト間の 影響解析
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
静的情報と動的情報を用いた Javaプログラムスライス計算法
分散 Java プログラムのための アスペクト指向言語
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
アスペクト指向プログラミングの 動的プログラムスライスへの応用
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

Josh : バイトコードレベルでのJava用 Aspect Weaver 中川 清志

アスペクト指向 オブジェクト指向はモジュラリティが優れているが限界もある ある種の処理は複数のオブジェクトに散らばってしまいモジュラリティが悪化する ログ処理などのシステマティックな処理 そのような処理をアスペクトとしてモジュール化するのがアスペクト指向である

例 : ログ出力 ログ出力をするタイミングを変えるような変更の度に, Car,Bikeクラスのソースコードを修正しなければならない class Bike{ void start() { Log.print(“start”); .. } class Car{ void start() { Log.print(“start”); .. }   void back() { Log.print(“back”); class Log { static void print(String msg) { System.out.println(msg); } ログ出力をするタイミングを変えるような変更の度に, Car,Bikeクラスのソースコードを修正しなければならない

AspectJ AspectJは汎用アスペクト指向言語の代表的なもの aspect LogOut{ before() : execution(void Car.start()) { Log.print(“start”); } before() : execution(void Car.stop()) { Log.print(“stop”); } … } 散らばっていたコードをアスペクトに集約できる アスペクトは,プログラムのjoin point(メソッド呼び出し,フィールド参照など)にコード断片の埋め込みを指示

AspectJの weave の欠点 Weave コンパイル時 weave java source aspect 分割コンパイルできない アスペクトを変更したらソースコードも再コンパイルしなければならない ソースコードが必要 サードパーティ製のクラスには使えない 動的ロードに不向き weaver AspectJ コンパイラ weaved source weaved bytecode compiler

本研究の提案 : Josh 欠点に対応した新コンパイラJoshを提案 java source compiler ロード時に、バイトコードレベルでweave アスペクトを変更してもソースの再コンパイルの必要がない ソースコード無しクラスにも適用できる local disk bytecode weaver  部分  コンパイラ Josh weaved bytecode aspect

部分コンパイラ 役割 : ソースコードで存在する,アスペクト内のJavaコード断片をバイトコード化 ダミークラスにコード断片を埋め込んで通常のJavacでコンパイル 埋め込み先のクラスのダミーメソッド public class Dummy { void getName() {} void dummyMethod() { Log.print(“ start”); } コード断片

Josh Weaver 役割 : アスペクトのバイトコードをロード時にJavaバイトコードに埋め込む Javassistが提供する構造リフレクションを使い実装した プログラムのバイトコードを調べてJoin-point を見つけ出す バイトコードを編集してアスペクトのバイトコード断片を埋め込む

Weave のオーバヘッドの測定 実行時間 [ミリ秒] SparcIII 750MHz J2SE 1.3.1 クラスファイルのサイズ [KByte]

まとめ AspectJ言語の新コンパイラJoshを提案 Joshの weave ロード時 バイトコードレベル 分割コンパイル可能 アスペクト変更による再コンパイルの手間を省ける ソースコードなしクラスにも適用できる サードパーティライブラリもOK 動的ロードにも対応