効率的なJava Dynamic AOPシステムを実現する Just-in-Time weaver

Slides:



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

OWL-Sを用いたWebアプリケーションの検査と生成
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
Dynamic AOPと その実装手法について
Lightweight Language Weekend ls-lRシェル
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
情報伝播によるオブジェクト指向プログラム理解支援の提案
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
通信処理のカーネル内競合を 検出するアスペクト指向 カーネルレベルロガー
柳澤 佳里* 光来 健一* 千葉 滋* *東京工業大学 情報理工学研究科 数理・計算科学専攻
AspectScope によるアスペクトとクラスのつながりの視覚化
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
アスペクト指向プログラミングを用いたIDSオフロード
アスペクト指向プログラミングと Dependency Injection の融合
入出力データ型に透過な Webサービス動的実行システム 松江工業高等専門学校 情報工学科 越田高志 情報処理学会第68回全国大会
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
J2EEアプリケーションにおける アプリケーションレベルスケジューリング
柳澤 佳里 (学籍番号: 03M37311) 指導教官: 千葉 滋 東京工業大学 情報理工学研究科 数理・計算科学専攻
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone.
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
実行時情報に基づく OSカーネルのコンフィグ最小化
Javaプログラムの変更を支援する 影響波及解析システム
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
動的データ依存関係解析を用いた Javaプログラムスライス手法
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
Recoveryアドバイスをもつ アスペクト指向システム
Addistant:アスペクト指向の 分散プログラミング支援ツール
アスペクト指向言語のための 独立性の高いパッケージシステム
アプリケーション依存の先読みが可能なO/Rマッピングツール
バイトコードを単位とするJavaスライスシステムの試作
アスペクト指向言語のための 独立性の高いパッケージシステム
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
C言語を用いたマシン非依存な JITコンパイラ作成フレームワーク
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
Java における 先進的リフレクション技術
契約による クラスとアスペクト間の 影響解析
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
JAVAバイトコードにおける データ依存解析手法の提案と実装
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
「マイグレーションを支援する分散集合オブジェクト」
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
アスペクト指向プログラミングの 動的プログラムスライスへの応用
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

効率的なJava Dynamic AOPシステムを実現する Just-in-Time weaver 情報処理学会プログラミング研究会 発表資料 2003年1月23日 効率的なJava Dynamic AOPシステムを実現する Just-in-Time weaver 佐藤芳樹 千葉滋 東京工業大学大学院 情報理工学研究科 【発表のあらまし】 効率的なJava Dynamic AOPシステム  を実現する手法を提案  AOP:アスペクト指向プログラミング 提案手法を実装したWoolを説明 Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 0. AOP(Aspect-Oriented-Programming) アスペクト指向とは モジュール間にまたがる横断的関心事(crosscutting concerns)をアスペクトとしてモジュール化 Aspect searchとmatchの前後 Logger.info(…) アスペクトとプログラムを 静的に合成(weave) weaver [Book] boolean match(String key) { Logger.info(“in Article#match()”); if (match0(key)) {    Logger.info(“out Article#match()”);    return true; } else { return false; } [ BookShelf ] Book search(String key) { Logger.info(“in BookShelf#search()”); while (_booklist.hasMoreElements()) if (_booklist.next().match(key)) return book[i]; Logger.info(“out BookShelf#search()”); [ BookShelf ] Book search(String key) { while (_booklist.hasMoreElements()) if (_booklist.next().match(key)) return book[i]; } [Book] boolean match(String key) { if (match0(key))    return true;   else return false; Aspect ロギング処理をプログラム と別に記述 searchとmatchの前後 Logger.info(…) [Book] boolean match(String key) { if (match0(key)) return true; else return false; } [ BookShelf ] Book search(String key) { while (_booklist.hasMoreElements()) if (_booklist.next().match(key)) return book[i]; どこかで無限ループしてるからメソッドの出入りをロギングしてみよう!! [ BookShelf ] Book search(String key) { Logger.info(“in BookShelf#search()”); while (_booklist.hasMoreElements()) if (_booklist.next().match(key)) return book[i]; Logger.info(“out BookShelf#search()”); } [Book] boolean match(String key) { Logger.info(“in Article#match()”); if (match0(key)) {    Logger.info(“out Article#match()”);    return true; } else { return false; あちこちに散らばるコード crosscutting concern 分散、同期、セキュリティ トランザクション、etc… モジュール間にまたがる横断的関心事(crosscutting concern)をアスペクトとしてモジュール化する新たなプログラミングパラダイム Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 1. 研究の背景 Dynamic AOPとその利点 アスペクトとプログラムを実行時に合成するDAOPが注目されている 1.開発サイクルの高速化 1.down 3.restart 2.rebuild (recompile,reweave) 要求、環境に応じサービスを 動的にカスタマイズ 1.dynamic weave アプリケーションを止めずにロギングのon/off やパッチ当て 『アスペクトとプログラムを実行時に合成するDAOPが注目されている』 なぜか 分散GUIアプリケーション ・配置 ・解像度 ・ビットレート ・色数 etc… aspects 2.適応的なサービスアスペクト Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOP AOPを実現するモデル ・フィールド アクセス join-point でアドバイスを実行する 適切に定義された    コードの断片 実行フロー上のポイント ・メソッド 呼び出し ・オブジェクト 生成 ・・・ Dynamic Join Point Model (AspectJ[*1]で提案) アスペクト pointcut 場所の指定 (join-pointを指定) match() search() advice  処理の記述 『AOPはJoin-pointでアドバイスと呼ばれるコードの断片を実行するというモデルに基づく』 join-pointを指定するポイントカットとjoin-pointで実行するコードを表すアドバイスがある join-point Logger.info() *1 Xerox Corporation. “The AspectJ Programming Guide. Online Documentation”, 2001. http://www.aspectj.org/ Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOP フックによる典型的な実装 アスペクトとプログラムの合成 = 静的コード変換によるフック挿入 join-pointにあたる場所にフックを挿入 フックにより実行がインターセプトされ適切なアドバイスを実行 挿入された フックコード do_before_advice(); do_after_advice(); join point フック 『オブジェクト指向言語でAOPを実装する典型的な方法は、join-pointにあたる場所フックを挿入し フックした場所で適切なアドバイスを実行する』 pointcut 指定 Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOP 既存のJava DAOPシステム DAOPシステムを実現するためには、実行時にフックを挿入する機能が必要 動作リフレクション(演算を横取りし変更できる機能) CLOS、Smalltalk、etc 処理系の改造  可搬性を損なう 静的コード変換  低品質のコードを生成 → 次に説明 『DAOPシステムは多数存在するが、リフレクションを処理系がサポートする言語では、実行時に容易にフックを挿入できる』 Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOP 静的コード変換 すべてのjoin-pointへ静的にフックを挿入 静的にフックを挿入する場所を特定できない アドバイスを実行するかどうかをチェック チェックのための分岐、無駄なフックに よるコードサイズの肥大化 常にすべてのjoin-pointでチェック 低品質のコードを生成 長時間稼動するサーバアプリに問題 need_advice(); need_advice(); need_advice(); need_advice(); pointcutでの 指定はここだけ 『静的コード変換ですべてのjoin-pointにフックを挿入すると不必要なフックが多数埋め込まれてしまう』 need_advice(); need_advice(); need_advice(); need_advice(); need_advice(); need_advice(); need_advice(); need_advice(); Jan 23-24, 2003 PRO-2002-4, Nagoya

ジャストインタイム・フック埋め込みの提案 情報処理学会プログラミング研究会 発表資料 2003年1月23日 3. ジャストインタイム・フック埋め込み ジャストインタイム・フック埋め込みの提案 フックを挿入するためにデバッガによる手法と動的クラス書き換え手法をハイブリッド 1.デバッガによるフック挿入・実行(PROSE[*2]) フックをbreakpointとして挿入 デバッガがアドバイスを実行 2.動的クラス書き換え(我々が開発) コード変換でフックを挿入+ロード済みクラスの再定義 再定義を可能な限り遅延 『効率的なDAOPシステムを実現するために、ジャストインタイム・フック埋め込み技術を提案する』 *2 Andrei. P, Thomas. G and Gustavo. A. “Dynamic Weaving for Aspect-Oriented Programming” In AOSD’02 Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 3. ジャストインタイム・フック埋め込み デバッガによるフック挿入・実行 フックをbreakpointで挿入(PROSE[*2]) breakpointで実行をインターセプト+アドバイス実行 実行コードに無駄なフック無し JPDA(デバッガ)を使用し可搬性を損なわない breakpointセット デバッガが アドバイス実行 デバッガ デバッガ do_advice(); *2 Andrei. P, Thomas. G and Gustavo. A. “Dynamic Weaving for Aspect-Oriented Programming” In AOSD’02 Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 3. ジャストインタイム・フック埋め込み 動的クラス書き換え フックをコードに埋め込む 必要になるまで遅延し、Just-in-Timeに埋め込む 無駄なフックを挿入しない その後は高速にアドバイスを実行 HotSwap機能を使用(Sun JDK1.4 JPDA) デバッガの制御下でロード済みクラスを再定義できる機能 JVM 『アスペクトとプログラムの合成を可能な限り遅延させる。フックの挿入は必要になるときまで遅延され、プログラムに埋め込まれる』 JPDA ロード済み クラス do_advice(); do_advice(); do_advice(); do_advice(); フック入り クラス do_advice(); do_advice(); do_advice(); do_advice(); クラス再定義 Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 3. ジャストインタイム・フック埋め込み ハイブリッドした手法 二段階のフック埋め込み 初めにフックはすべてbreakpointとして挿入 選択的に動的クラス書き換え ③-1 デバッガが アドバイス実行 デバッガ デバッガ ① アスペクトがweave しjoin-pointが判明 『アスペクトとプログラムの合成を可能な限り遅延させる。フックの挿入は必要になるときまで遅延され、プログラムに埋め込まれる』 静的コード変換のような無駄なフックは含まない do_advice(); ② 指定されたすべてのjoin-pointへbreakpointをセット ③-2 動的クラス書き換え 対象プログラムが アドバイス実行 do_advice(); do_advice(); デバッグモード(-Xdebug) でHotSpot実行 do_advice(); do_advice(); Jan 23-24, 2003 PRO-2002-4, Nagoya

ハイブリッドする必要性 3. ジャストインタイム・フック埋め込み ハイブリッド システムロードに応じ効果的に 動的コード書き換え 使用頻度の高いアドバイス デバッガがアドバイス実行 → アドバイス実行がボトルネック 使用頻度の低いアドバイス 高価な動的クラス書き換え → 変換がボトルネック トレードオフ アドバイス実行時間 デバッガ 標準でデバッガがアドバイス実行 ハイブリッド システムロードに応じ効果的に 動的コード書き換え 動的クラス書き換え フック埋め込み時間 Jan 23-24, 2003 PRO-2002-4, Nagoya

JITコンパイラとの比較 3. ジャストインタイム・フック埋め込み JITコンパイラの動作との類似点・相違点 類似点 相違点 オンデマンドにコード変換 性能向上のために2種類の実行法をハイブリッド 相違点 weave後にコードのセマンティクスが変更 =>weave時にactiveなフレームへの配慮が必要  実行の途中で書き換えられるメソッドでのアドバイス  依存関係のあるアドバイス Jan 23-24, 2003 PRO-2002-4, Nagoya

実行途中で書き換えられるメソッド 3. ジャストインタイム・フック埋め込み activeフレームではデバッガがアドバイス実行 HotSwap時にactiveなフレームが参照するクラスは変更されない(JPDAの仕様) activeフレーム = 実行途中のメソッド アドバイスが実行されず一貫性が崩れる weave後に積まれる フレームは変更後の クラスを参照 do_advice(); do_advice(); Book#match0() Book#match() do_advice(); BookShelf#search() クラス定義は元のまま Jan 23-24, 2003 PRO-2002-4, Nagoya

依存関係のあるアドバイス 3. ジャストインタイム・フック埋め込み activeフレームでのデバッガのアドバイス実行の有無は手動で選択 beforeアドバイスは実行されていない afterアドバイスの実行はユーザが選択 例: searchメソッドの前後で時間を計り検索時間を測定する機能を    アスペクトで追加 before デバッガ after Book#match0() beforeが実行されてい なくてもafterのみ実行 Book#match() デバッガ BookShelf#search() after Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 3. ジャストインタイム・フック埋め込み 全体の流れ join-pointでアドバイス実行手法を選択 = 動的に切り替え → 各問題を解決 デバッガに よる実行 デバッガに よる実行 activeフレーム 選択的に 実行 ボトルネックの除去 アドバイス間 に依存関係 do_advice(); do_advice(); 『アドバイス実行手法を動的に切り替える』 埋め込まれた アドバイス実行 do_advice(); 動的クラス 書き換え do_advice(); do_advice(); do_advice(); activeフレーム アドバイスが 実行されない Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 4. Wool Woolの実装 ジャストインタイムフック埋め込みをJava用に実装したJust-in-Time weaver JPDAでbreakpointセットとクラス再定義、Javassistでバイトコード変換 クラス再定義 aspects Javassist do_advice(); do_advice(); + JVM JPDA バイトコード 変換 『提案手法をJavaに適用したweaverであるWoolを実装した。Woolはアスペクトとプログラムの合成のためのバイトコード変換に バイトコード変換ツールJavassist、クラス再定義のためにJDK1.4のJPDAを利用した。』 breakpointセット、 アドバイス実行 Wool Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 4. Wool Woolの起動法 外部プログラムから起動 => 開発サイクルの高速化 アプリケーションが起動 => サービスアスペクトの実現 % wool –weave LoggingAspect –address islisp.ysk.csg.private % wool –unweave LoggingAspect –address islisp.ysk.csg.private WlAspect pda = WlAspect.forName(“PDAAspect”); WlAspect pc = WlAspect.forName(“PCAspect”); Wool wool = Wool.connect(“somedomain”,5432); switch(client) { case PDA : wool.weave(pda); case PC : wool.weave(pc); } 『プログラム内部にアスペクトをWoolを起動するコードを記述する方法と、プログラムの外部からWoolを起動する方法がある』 Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 4. Wool アドバイス実行手法選択の記述 アスペクトプログラムからWoolを制御する機構 コンテキストに応じてアドバイス実行手法を選択 外部からweaveする場合、反映されるタイミングが不定 Woolの初期化 合成の前後 切り離しの前後 コールバックメソッドに各タイミングで Woolを制御するコードを記述する 例 public void beforeWeave(Wool wool) { if (wool.joinMethodExit()) wool.skip(); } public void afterWeave(Wool wool) { if (wool.countActiveFrame() > 0) wool.regardActiveFrame(); 『Woolは、開発者にアスペクトプログラムからweaverを制御する機能を提供する』 例1 メソッドの戻り(afterアドバイス)だけを実行しない 例2 activeフレームでアドバイスの実行をする メタな処理(実行フロー外のポイント)なのでjoin-pointでは表現しない Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 5. 性能測定 比較実験 実験環境 Arch : SunBlade1000、 CPU : UltraSPARC-III 750MHzX2、Memory : 1GB OS : Solaris8 JVM : Sun J2SDK1.4.0 HotSpotTMClient VM Wool 現在は最初のjoin-pointで必ず動的クラス書き換え 実験プログラム SpecJVM98のjess 自然数の和を求める再帰メソッド ・プログラムの実行時間と合成処理にかかる時間(Jess) ・activeフレーム処理による性能劣化(sum) Jan 23-24, 2003 PRO-2002-4, Nagoya

結果と考察(1) 5. 性能測定 目的-実行時間と合成処理にかかる時間の測定(activeフレーム処理無し) 方法-ナンバーパズル〈N〉、モンキーバナナ〈M〉    〈1〉protectedメソッド(4of146、734615回呼び出し)にnullアドバイス    〈2〉1つのメソッド(1of146、1338回呼び出し)にnullアドバイス 結果 考察   ・アドバイス実行回数が多いほど良い結果、少ないほど動的クラス書き換   えのオーバーヘッド   ・join-point抽出+変換再定義を差し引いた実行時間がAspectJに近い AspectJ デバッガ手法 Wool 総実行時間のうちわけ join-point抽出 変換再定義 実行時間 〈N〉〈1〉 8590 7388812 19638 1680 4057 13901 〈N〉〈2〉 8522 23307 11832 806 9376 〈M〉〈1〉 1063 45817 11003 5266 〈M〉〈2〉 1003 3833 3993 1507 5回計測の最小値 単位[msec] Jan 23-24, 2003 PRO-2002-4, Nagoya

結果と考察(2) 5. 性能測定 目的-デバッガでのactiveフレーム処理の性能劣化 方法-sum()実行中にnullアドバイスをweave     activeフレームの個数を変化 結果 26000 2500 考察  ・デバッガでのアドバイス実行回数が多いほど性能劣化  ・扱うactiveフレームが0の場合性能劣化がだいぶ小さい Jan 23-24, 2003 PRO-2002-4, Nagoya

まとめと課題 6. まとめ ジャストインタイム・フック埋め込みを提案し、Java用のweaverであるWoolをJavaで実装した 実行時に無駄なフックの無い良質のコードを生成 アスペクトと合成後に高速実行 weaverを柔軟に制御する機能を提供 今後の課題 追加実験(静的コード変換) 未実装機能の実装(Introduction,aroundアドバイス) パフォーマンスチューニング 動的プロファイラの実装 Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 7. 別の実装手法 別の実装手法1 アドバイス実行方式の選択を自動化 手動選択(現在) アドバイス実行方式を手動で選択できる機構 自動選択 環境(システムロードなど)に応じ適切な実行方式を選択 HotSpot技術のように動的プロファイラで実行時の傾向をプロファイリング 『提案手法を実現するためにJPDAのHotSwap機能を利用する。  JPDAを用いることでJavaの重要な利点である可搬性を損ねることなく実装することができる』 アドバイスの実行回数が閾値を超える  => 動的クラス書き換えを施す Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 7. 別の実装手法 別の実装手法2 自己反映的なOpenJITで実装 アスペクトのディレクティブでコンパイルコードを変更 動的に再コンパイル メソッド単位でアスペクトの合成 無駄なフックの挿入をより抑えられる 同様のactiveフレーム対応処理 『提案手法を実現するためにJPDAのHotSwap機能を利用する。  JPDAを用いることでJavaの重要な利点である可搬性を損ねることなく実装することができる』 さらなる高速化が期待できるが可搬性を 損なうので現実的ではない Jan 23-24, 2003 PRO-2002-4, Nagoya

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 付録 アスペクトの記述 Javaでのアスペクト記述 public class LoggingAspect extends WlAspect { WlCrosscut record = pointcut("*","BookShelf","search", "(Ljava/lang/String;)V").joinCall(); public void doit() { teach(new WlBeforeAdvice(record) { public void advice(TargetInfo tinf) { Target t = tinf.getTarget(); Logging.info(“in ” + t.className()+”#”+t.name()); } }); public void initWeave(Wool wool) throws Exception { wool.filter(" ^java.*|^sun.*“,false); ポイントカット 記述 アドバイス 記述 『Woolは実行性能の改善を目的としているため、ダイナミックジョインポイントモデルを実現するシンプルなJavaのクラスで アスペクトを記述する』 weaverの 制御記述 Jan 23-24, 2003 PRO-2002-4, Nagoya

付録 デバッガによるフック挿入・実行 do_advice(); Jan 23-24, 2003 PRO-2002-4, Nagoya

動的コード書き換え 付録 Jan 23-24, 2003 PRO-2002-4, Nagoya do_advice();

ジャストインタイム・フック埋め込み(ハイブリッド) 付録 ジャストインタイム・フック埋め込み(ハイブリッド) do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); Jan 23-24, 2003 PRO-2002-4, Nagoya