Aspect
ドメイン特化のAO機構
ポイントカット記述子の追加 アドバイスの織り込みの拡張
アスペクトインスタンスの管理機構の拡張 拡張したウィーバ
9
ドメイン特化のジョインポイントモデルの定義
ドメイン特化のイベントと
汎用的なジョインポイントの対応関係を定義 (ジョインポイント写像の定義)
例:ページアクセスの場合
in out
in out
スクリプト実行
ページアクセスを表すジョインポイント
プログラム実行モデルに基づく ジョインポイント
Mapping 1
ドメイン特化のジョインポイントモデルの定義
ドメイン特化のイベントと
汎用的なジョインポイントの対応関係を定義 (ジョインポイント写像の定義)
例:ページアクセスの場合
10
in out
in out
スクリプト実行
ページアクセスを表すジョインポイント
Mapping 1
in out
in in out out
exitもしくはdie 関数の呼び出し Mapping 2
ドメイン特化のジョインポイントモデルの定義
ドメイン特化のイベントと
汎用的なジョインポイントの対応関係を定義 (ジョインポイント写像の定義)
例:ページアクセスの場合
in out
in out
スクリプト実行
ページアクセスを表すジョインポイント
プログラム実行モデルに基づく ジョインポイント
Mapping 1
in out
in in out out
exitもしくはdie 関数の呼び出し
スクリプト実行 Mapping 2
ドメイン特化のジョインポイントモデルの定義
ドメイン特化のイベントと
汎用的なジョインポイントの対応関係を定義 (ジョインポイント写像の定義)
例:ページアクセスの場合
ドメイン特化の処理単位に着目して ジョインポイントのグループを定義
10
ユーザ 1 ユーザ 2
Webサーバ全体の一連のページアクセス
ユーザごとの一連のページアクセス
in out
in out
スクリプト実行
ページアクセスを表すジョインポイント
Mapping 1
in out
in in out out
exitもしくはdie 関数の呼び出し Mapping 2
ドメイン特化のジョインポイントモデルの定義
ドメイン特化のイベントと
汎用的なジョインポイントの対応関係を定義 (ジョインポイント写像の定義)
例:ページアクセスの場合
ドメイン特化の処理単位に着目して ジョインポイントのグループを定義
ドメイン特化のAO機構の設計
• ドメイン特化のジョインポイントを直接選択する ポイントカット記述子の定義
• ドメイン特化のジョインポイントモデルに基づく アスペクトのインスタンス生成機構の定義
例:ページアクセスの場合
11
ドメイン特化のAO機構の設計
• ドメイン特化のジョインポイントを直接選択する ポイントカット記述子の定義
• ドメイン特化のジョインポイントモデルに基づく アスペクトのインスタンス生成機構の定義
例:ページアクセスの場合
request(url, forms, cookies, headers) url : URLのパターン
forms : フォームデータの指定 cookies: クッキーデータの指定
headers: HTTPリクエストヘッダの指定
ページアクセスを選択するポイントカット記述子
ドメイン特化のAO機構の設計
• ドメイン特化のジョインポイントを直接選択する ポイントカット記述子の定義
• ドメイン特化のジョインポイントモデルに基づく アスペクトのインスタンス生成機構の定義
例:ページアクセスの場合
request(url, forms, cookies, headers) url : URLのパターン
forms : フォームデータの指定 cookies: クッキーデータの指定
headers: HTTPリクエストヘッダの指定
ページアクセスを選択するポイントカット記述子
11
ドメイン特化のAO機構の設計
• ドメイン特化のジョインポイントを直接選択する ポイントカット記述子の定義
• ドメイン特化のジョインポイントモデルに基づく アスペクトのインスタンス生成機構の定義
例:ページアクセスの場合
request(url, forms, cookies, headers) url : URLのパターン
forms : フォームデータの指定 cookies: クッキーデータの指定
headers: HTTPリクエストヘッダの指定
ページアクセスを選択するポイントカット記述子
Webサーバ全体で1つ、各ユーザごとに 関連付けたアスペクトのインスタンス生成
Per Application
Per Session
Instance
Instance
Instance
ドメイン特化のAO機構の設計
• ドメイン特化のジョインポイントを直接選択する ポイントカット記述子の定義
• ドメイン特化のジョインポイントモデルに基づく アスペクトのインスタンス生成機構の定義
例:ページアクセスの場合
request(url, forms, cookies, headers) url : URLのパターン
forms : フォームデータの指定 cookies: クッキーデータの指定
headers: HTTPリクエストヘッダの指定
ページアクセスを選択するポイントカット記述子
Webサーバ全体で1つ、各ユーザごとに 関連付けたアスペクトのインスタンス生成
11
汎用的なAO機構の拡張
• 汎用的なAO機構のウィーバを拡張する
• AOWPフレームワーク
- アスペクト記述をPHPのクラスとして記述する
(AOPフレームワーク)
汎用的なAO機構の拡張
• 汎用的なAO機構のウィーバを拡張する
• AOWPフレームワーク
- アスペクト記述をPHPのクラスとして記述する (AOPフレームワーク)
➡ ポイントカット記述子やアスペクトの種類の追加は クラスの追加によって行う
(request, per-application, per-session)
12
汎用的なAO機構の拡張
• 汎用的なAO機構のウィーバを拡張する
• AOWPフレームワーク
- アスペクト記述をPHPのクラスとして記述する (AOPフレームワーク)
➡ ポイントカット記述子やアスペクトの種類の追加は クラスの追加によって行う
(request, per-application, per-session)
- ウィーバはPHPを用いたOOPによって実装
汎用的なAO機構の拡張
• 汎用的なAO機構のウィーバを拡張する
• AOWPフレームワーク
- アスペクト記述をPHPのクラスとして記述する (AOPフレームワーク)
➡ ポイントカット記述子やアスペクトの種類の追加は クラスの追加によって行う
(request, per-application, per-session)
- ウィーバはPHPを用いたOOPによって実装
➡ 織り込み手順はウィーバのPHP記述を変更
12
Pointcut
_isJoinPointShadow(JoinPoint) _runtimeMatch(JoinPoint)
AO機構の拡張
AO機構の為の構文の拡張
ポイントカット記述子は
Pointcutクラスのサブクラスとして定義
̲isJoinPointShadow:
引き数のジョインポイントがジョインポイント投影かを判定するメソッド
Pointcut
_isJoinPointShadow(JoinPoint) _runtimeMatch(JoinPoint)
AO機構の拡張
AO機構の為の構文の拡張
ポイントカット記述子は
Pointcutクラスのサブクラスとして定義
̲isJoinPointShadow:
引き数のジョインポイントがジョインポイント投影かを判定するメソッド
̲runtimeMatch:
実行時のジョインポイントの選択を記述するメソッド
13
RequestPointcut
_isJoinPointShadow(JoinPoint) _runtimeMatch(JoinPoint)
Pointcut
_isJoinPointShadow(JoinPoint) _runtimeMatch(JoinPoint)
AO機構の拡張
AO機構の為の構文の拡張
ポイントカット記述子は
Pointcutクラスのサブクラスとして定義
̲isJoinPointShadow:
引き数のジョインポイントがジョインポイント投影かを判定するメソッド
アスペクトのインスタンス生成方法を指定する為の 記述子はAspectクラスのサブクラスとして定義
RequestPointcut
_isJoinPointShadow(JoinPoint) _runtimeMatch(JoinPoint)
Pointcut
_isJoinPointShadow(JoinPoint) _runtimeMatch(JoinPoint)
PerSessionAspect _sessionID
_sessionTimeOut Aspect
PerApplicationAspect Aspect
AO機構の拡張
AO機構の為の構文の拡張
ポイントカット記述子は
Pointcutクラスのサブクラスとして定義
̲isJoinPointShadow:
引き数のジョインポイントがジョインポイント投影かを判定するメソッド
̲runtimeMatch:
実行時のジョインポイントの選択を記述するメソッド
アスペクトのインスタンス生成方法を指定する為の 記述子はAspectクラスのサブクラスとして定義
13
RequestPointcut
_isJoinPointShadow(JoinPoint) _runtimeMatch(JoinPoint)
ベースプログラムを解析し 抽象構文木 (AST) を生成
ASTからジョインポイントを生成
ジョインポイントが ポイントカットに
適合するか?
(ジョインポイント投影か?)
ジョインポイントと対応するASTに対して アドバイスを適用する為のAST変換を行う ASTからコードを生成する
ジョインポイントが ポイントカットで指定された
実行時の条件を満たすか?
全てのアドバイスについて
アスペクトのインスタンスを取得
アドバイスを実行
織り込み時 (コンパイル時) 実行時
全てのジョインポイントについて 全てのアドバイスについて 開始
停止
NO
YES
YES
AO機構の拡張
ウィーバの変更
NO
ベースプログラムを解析し 抽象構文木 (AST) を生成
ASTからジョインポイントを生成
ジョインポイントが ポイントカットに
適合するか?
(ジョインポイント投影か?)
全てのジョインポイントについて ジョインポイントと対応するASTに対して アドバイスを適用する為のAST変換を行う ASTからコードを生成する
ジョインポイントが ポイントカットで指定された
実行時の条件を満たすか?
全てのアドバイスについて
アスペクトのインスタンスを取得
アドバイスを実行
織り込み時 (コンパイル時) 実行時
全てのジョインポイントについて 全てのアドバイスについて 開始
停止
NO
YES
YES
AO機構の拡張
ウィーバの変更
ドメイン特化の
ポイントカット記述子の為の拡張
NO
14
ベースプログラムを解析し 抽象構文木 (AST) を生成
ASTからジョインポイントを生成
ジョインポイントが ポイントカットに
適合するか?
(ジョインポイント投影か?)
ジョインポイントと対応するASTに対して アドバイスを適用する為のAST変換を行う ASTからコードを生成する
ジョインポイントが ポイントカットで指定された
実行時の条件を満たすか?
全てのアドバイスについて
アスペクトのインスタンスを取得
アドバイスを実行
織り込み時 (コンパイル時) 実行時
全てのジョインポイントについて 全てのアドバイスについて 開始
停止
NO
YES
YES
AO機構の拡張
ウィーバの変更
ドメイン特化の
ポイントカット記述子の為の拡張
NO
ジョインポイントが ポイントカットに
適合するか?
(ジョインポイント投影か?) ジョインポイントが ポイントカットで指定された
実行時の条件を満たすか?
ジョインポイントと対応するASTに対して アドバイスを適用する為のAST変換を行う