
アスペクト指向のバリエーション解説(3) page1 page2
JBoss AOPとAOPフレームワークの役目
クロノス
専務取締役 米山学
2005/1/19
第2回「AspectJから学ぶアスペクト指向の理解」の記事ではeclipse.orgの下で開発されているAspectJを取り上げ、実際にAOPを体験してもらった。今回は「JBoss AOP」を紹介しよう。その名前からも分かるとおり「JBoss AOP」はJBossプロジェクトにおいて開発されている「アスペクト指向フレームワーク」である。
|
- - PR -
では、早速JBoss AOPをダウンロードしてセットアップしてみよう。まずは、JBossのサイトから「JBoss AOP」のページを開き、「Downloads」のリンクより最新のアーカイブ(本稿執筆時「jboss-aop_1.0.0-FINAL.zip」)をダウンロードする。ダウンロードしたアーカイブを任意のディレクトリに解凍・展開すれば準備完了である。
|
では、前回と同じように簡単なサンプルプログラムを例に、JBoss AOPによるアスペクト指向プログラミングを試していこう。前回の記事で紹介した
|
|
| リスト1 Messenger.java |
|
|
| リスト2 Tester.java |
を見てほしい。ここまでは前回のサンプルコードと同じである。MessengerクラスにはString型の引数を1つ取るpirntMessage()というメソッドが定義されており、Testerクラスはそのメソッドに「JBoss AOP」という文字列を渡して呼び出す。ここに、「Hello,」を先頭に加える。
AspectJでは「アドバイス」や「ポイントカット」を定義するために、独自のキーワード「aspect」を用いた「アスペクト」を作成したが、JBoss AOPでは「インターセプタ」と呼ばれるPOJO(Plain Old Java Object)クラスを使用する。つまりAspectJのようにJavaの拡張仕様を用いるのではなく、通常のJavaのクラスを用いてアスペクトの振る舞いを記述することになる。
このインターセプタとなるクラスはorg.jboss.aop.advice.Interceptorインターフェイスを実装しなければならない。パッケージ名からも分かるとおり、アスペクト指向における「アドバイス」を記述するためのインターフェイスとなる。Interceptorには2つのメソッド「getName()」と「invoke()」が定義されており、implementsしたクラスで適切に実装しなければならない。ここでは以下のように、文字列「Hello, 」を挿入するインターセプタとなる「GreetingInterceptor」を作成する。
|
|
| リスト3 GreetingInterceptor.java |
getName()メソッドは単純に自身の名前を返すだけである。重要となるのはinvoke()メソッドであり、ここにアドバイスとなる実際の処理を記述する。またこのメソッドでは引数で受け取ったInvocationオブジェクトのinvokeNext()メソッドを呼び出して次のインターセプタを返すようにする。
詳細に関してはJBoss AOPインストール直下の「docs\aspect-framework\api」ディレクトリにAPIドキュメントが配置されているので参照していただきたい。 |
ここで読者は「ポイントカット」の定義がないことに気付いたかもしれない。AspectJではポイントカットの定義もアスペクトの中に一緒に書いてしまっていたが、JBoss AOPではXMLファイルを用いてポイントカットを定義する。具体的には「jboss-aop.xml」という次のようなファイルを用意する。
|
|
| リスト4 jboss-aop.xml |
ここでは<bind>エレメントの属性「pointcut」にポイントカットの定義を記述する。この例ではMessengerクラスのprintMessage()メソッド呼び出しをジョインポイントとするポイントカットを定義している。さらに、サブエレメントである<interceptor>のclass属性を用いてインターセプタとなるクラスを指定する。
ここまでで必要なファイルの記述が終わったら、ソースコードをコンパイルしよう。JBoss AOPのコンパイルには通常のjavacに加えて、JBoss AOPフレームワークが提供する「AOPC」コンパイラが必要となる。また、いくつかのライブラリをクラスパスに設定する必要があるため今回は次のようなbuild.xmlを用意し、Antを使ってビルドとプログラムの実行を行うことにする。
|
|
| リスト5 Ant用ビルドファイル「build.xml」 |
Antを実行すると、「Hello, 」が先頭に追加されたメッセージが表示される。
このようにJBoss AOPを用いることで、メソッド呼び出しとメソッドの実行との間に何らかの「振る舞い」を挿入することができる。ちなみにAspectJではこれをウィービングと呼んでいるが、JBoss AOPでは「メソッドインターセプション」と呼んでいる。AspectJとJBoss AOPとの一番大きな違いは、AspectJが独自のJava拡張構文を用いるのに対し、JBoss AOPではあくまでも普通のJavaクラス、いわゆるPOJOを使っている点にある。ぜひ、もう一度AspectJの実装と比べて両者の違いを確認していただきたい。
|
1/2 |
|
INDEX |
||
| アスペクト指向のバリエーション解説(3) JBoss AOPとAOPフレームワークの役目 |
||
| Page1 JBoss AOPのインストールと設定 |
||
| Page2 アスペクト指向アノテーション |
||
| IT Architect 連載記事一覧 |
アスペクト指向のバリエーション解説
この連載では「アスペクト指向とは何か?」というところから始め、AspectJやJBossAOPなどを用いたAOPの実装を紹介していく
- 第1回 アスペクト指向の基礎とさまざまな実装
- 第2回 AspectJから学ぶアスペクト指向の理解
- 第3回 JBoss AOPとAOPフレームワークの役目
- 第4回 「AspectWerkz」の利用法
- 第5回 アスペクト指向理解のまとめ
ホワイトペーパー(TechTargetジャパン)
|
|

