Reactive Aspects

's'いるのかどうか不明だけど・・・


アスペクトの持つ特徴として、一つ有益かもしれないものとして、アスペクトの機能(アドバイス)を 実行時に オンやオフにするものがあると思う。思う、っていうのは、実用的な状況が明確にイメージできないからだけど、考えてみる価値はありそうな気がする。


そのような特徴は、残念ながら AspectJ では実装するのが難しい。少なくとも、crosscut じゃない解決策を成し遂げるのは難しい。なんで僕がそんなことを言い切れるのかっていうと:

AspectJ Tip: Activation
http://www.ncfreak.com/asato/doc/aspectj-activation.html

AspectJ Tip: Deployment
http://www.ncfreak.com/asato/doc/aspectj-deployment.html

を書いたから。


Caesar では、AspectJアスペクトよりも、よりダイナミックなアスペクトのデプロイ方法も備えている:


deploy( new MyAspect() ) {
myObj.method();
}
deploy に囲まれた部分だけアスペクトのアドバイスはオンになる。もちろん、AspectJ みたいに実行時からアドバイスがオンになっているようなアスペクトの書き方もできる。Caesar のサンプルコードをぱっと眺めたいひとは:

Caesar メモ
http://www.ncfreak.com/asato/doc/caesar.html

しかし、deploy のみで、アスペクト機能のオン・オフを実現するのは、やや制限を感じる。Object Teams では、deploy 文に加えて、アスペクト(Object Teams の用語では「チーム」)インスタンスごとに、機能をオンやオフにするメソッド(activate と deactivate)が自動的に定義される。Object Teams のサンプルコードをばっと眺めたい人は:

Object Teams 入門
http://www.ncfreak.com/asato/doc/ot.html

残念なのは、Object Teams は、AspectJ や Caesar と違って(or AspectJ や Caesar みたいな)JPI (Join Point Interception)を扱えない点(詳しいことは未調査)。



さて、ここからが本題だけど(といってもたいした内容じゃないけど)、もし、AspectJ に、アスペクトインスタンスに対してそのアドバイスをオンやオフにするようなメソッド(activate や deactivate)が定義されていたとすると、どんなことが可能になるだろう。


一つは、なんらかのイベントに反応して、自動的にアスペクトがオンやオフになるようなケース。実際にどんな状況が考えられるだろう?


reactive っていう言葉が、適切かどうか不明だけど、雰囲気はそんな感じ。