This post originated from an RSS feed registered with Java Buzz
by Talip Ozturk.
Original Post: AOP Requirements
Feed Title: Shared Memory
Feed URL: http://sedoparking.com/search/registrar.php?domain=®istrar=sedopark
Feed Description: about java, jini, javaspaces, programming, aop and a little bit of me and life.
I am currently trying to pick the best AOP implementation available for my new project. I like Nanning. It is very simple, and I like simple things. I also like AspectWerkz. I think it is quite comprehensive but things that I don't like about AspectWerkz are
1. You have start your application with 'aspectwerkz' executable. I like to be able to run/debug my application from my IDEA. There must be another way of running it.
2. If you have introductions (I cannot think of AOP without introductions), then you have to run a weaver (ClassFileMetaDataCompiler). I cannot imagine running this thing every time I change/add introduction.
3. I don't see any documentation on configuring the system via a configuration API. There is only XML configuration available.
4. It is not as simple and clean as Nanning.
Unfortunately I cannot convince myself to use AspectWerkz or Nanning. they both are almost there but not quite. I felt the same thing for Eclipse. Eclipse is good, very good. It is almost there but when IntelliJ IDEA is another choice then IDEA would be my ideal IDE. AOP is still new. Good things are happening but I am so impatient to wait for my favorite one. AspectJ? AspectJ might be the most complete AOP solution in terms of implementing every aspect of AOP but it is not practicable with its new lingo and concepts so to me it is not an option.
My requirements for AOP framework.
1. Rich set of pattern matching. good examples AspectJ, AspectWerkz
2. Usage of asterisk (*) in configuration. This little thing makes configuration super easy. Good example is AspectWerkz. Here is an example
3. Minimum XML configuration. good example AspectWerkz, bad example JBossAOP
4. Support for run-time attributes.
5. On runtime, I should be able to add/remove
* introduction or advise of an aspect
* an aspect with its all advice and introductions
to/from an aspected object.
6. Support for configuration API. good example Nanning
7. Dynamic Proxy support. Support for POJOs is good but not required.
8. I should still be able to develop on my IDE. Plain java solution. Good example Nanning, bad example AspectJ
9. Being able to declare the scope (jvm, thread, instance, singleton) of an Advice. good example AspectWerkz, JBossAOP.
10. API for managing, inspecting AOPfied system. good example Nanning