[]
Next generation of the AspectWerkz AOP framework is released
[ jonas ] 06:42, Friday, 19 March 2004

Today we released the 0.10 Release Candidate 1 of AspectWerkz. Which forms the foundation for the next generation of AspectWerkz.

AspectWerkz has gone through a lot of changes, the whole core engine has for example been thrown out and replaced by a much more flexible and performant one. The join point model is much more expressive and orthogonal we have also implemented a JIT compiler that is making AspectWerkz much more performant. On top of that we have a new implementation of true runtime weaving, which allows you to redefine your aspect model including adding new pointcuts at runtime.

Expressiveness and orthogonality

We have improved the expressiveness and orthogonality a lot.

AspectWerkz currently supports the following join points:

  • method (static and member) execution
  • method (static and member) call
  • constructor execution
  • constructor call
  • field (static and member) modification
  • field (static and member) access
  • catch clauses
  • cflow

In the latest version we have reached a high level of orthogonality:

  • All advice types (around, after and before) works with all poincut designators (except for the handler pointcut which is only possible to bind to the before advice).
  • You can compose new pointcuts by mixing any types of pointcuts.

The syntax has changed slightly, both in the XML and attribute definition. However not more than that the migration should be fairly easy. See the docs for details on the new syntax.

Performance improvements and JIT compilation

We have implemented a JIT (Just-In-Time) compiler that detects advice chains that are often executed and generates a custom class on the fly that invokes the advice chain and the target join point statically.

Here are some simple but interesting benchmarks comparing the latest distribution of AspectWerkz, JBoss and AspectJ:

The overhead of one around advice applied to a method call join point:

AspectJ 1.1.1 0.000018 ms/call
AspectWerkz 0.10 RC1 0.000097 ms/call
JBoss AOP 1.0Beta 0.000181 ms/call

The overhead of five around advice applied to a method call join point:

AspectJ 1.1.1 0.000097 ms/call
AspectWerkz 0.10 RC1 0.000163 ms/call
JBoss AOP 1.0Beta 0.000263 ms/call

Runtime weaving

In addition to the capabilities to rearrange aspects and advices at existing join points and swapping mixin implementation at runtime, we provide a unique feature of adding new pointcuts at runtime without any prior knowledge. The implementation is based on Java HotSwap and thus requires a compliant JVM.

A simple API allows to refine the aspect definition to add new pointcuts and then trigger the activation of it. Prior to pointcuts addition, your programs are guaranteed to run without any overhead since the bytecode does not gets modified prior activation. Moreover the runtime weaving does not require to have a remote JVM to control the HotSwap API since we provide a dedicated in-process module.

Download the distribution

You can download the distribution from here


Comments
Post a comment









Remember personal info?