[
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