Let's go on with this : AspectJ (and AOP in general) needs visibility. Here I try to organize the AspectJ knowledge in a basic module, an advanced one, and an expert one.
The basic should cover what is barely necessary to write simple logging, profiling or security checking aspects, and to use abstract aspects written by others and packaged in aspect libraries, while at the same time assert a minimal theoretical knowledge of AOP in general and of AspectJ implementation. The advanced one should cover more hard topics, like execution flow, conditionals, aspect lifecycles, static and dynamic parts of thisJoinPoint and related performance issues, advicing of constructors and related issues. The expert one will cover mostly theory, like techniques for reimplementing common patterns in an AOP fashion, and everything else that only Andy, Matthew and a few other people on this mailing list will be able to master in its full potential (so, I'm not the right person to write it :) ). It could eventually also cover how AspectJ integrates with EJBs or OSGi containers. So, a basic exam should be enough to participate in an AOP project or add small AOP parts to an existing application, while the advanced one is the minimum required to write fully functional aspects that can be brought to production. The expert one should also be from a higher point of view, and more suitable to researchers, architects or directors that need to drive the development more than actually write code. The sum of the basic and advanced exam should cover everything present in the Semantics Appendix, except for very rare Every exam is subdivided in sections. For each section a number of questions may be specified, giving a "weight" to each part. I'm trying to organize them to mirror my own experience while learning AspectJ myself, but feel free to suggest any kind of modification to this preliminary plan. I'm pretty sure I'm forgetting some important features or issues that should be there, so please comment on it. Simone Exam title : "AspectJ basic exam" This exams evaluates the ability of the candidate to operate with AspectJ aspects, write simple aspects and use aspects libraries. It will not cover more advanced features. Section 1 : "Understanding AOP" Covers the understanding of the AOP basics : - Know what a cross cutting concern is - Understand the advantages of using aspect oriented programming - Differentiate and identify various basic joinpoints (call, execution, get and set) Section 2 : "Programming AspectJ theory" Covers theoretical basic knowledge of AspectJ : - Understand advices (before, after and around) - The weaving process (includes load time weaving and compile time weaving, classes exposed to the weaver) Section 3 : "Basic AspectJ grammar" Covers basic knowledge of AspectJ grammar : - .aj files and correlation to .java files - Definition of an aspect - Definition of simple pointcuts (call, execution, get and set - class and member patterns) - Definition of advices (before, after and around) - Usage of AspectJ specific java extensions (proceed(), thisJoinPoint) Section 4 : "More about AspectJ aspects" Covers more advanced topics about aspects in general : - Privileged aspects - Writing abstract and generic aspects - Using aspect libraries and extending abstract aspects - Pointcuts combination Section 5 : "Parameters" Covers extraction of parameters from pointcuts and usage of parameters in advices : - The args() - The this() and target() - Using parameters in advices Section 6 : "Basic Intertype declarations" Covers how AspectJ can be used to add methods and fields to existing classes - Adding a field to an existing class, and using it inside the aspect - Adding a method to an existing class - Adding an annotation to an existing class or method - Declaring a parent interface to an existing class -- End of exam Exam title : "AspectJ advanced exam" This exam evaluates the ability of the candidate to use advances AspectJ features, like conditianls, execution flows, aspect lifecycles etc.. and understand performance issues related Section 1 : "More pointcuts" Covers the usage of additional, more advanced pointcuts : - The if() pointcut - The handler() pointcut - The within and withincode pointcuts Section 2 : "Advicing constructors" - The initialization pointcut - The constructor pattern - Understand implications of a "before" advice on a constructor - Understand implications of an "around" advice on a constructor Section 3 : "Control flow" Covers understanding and usage of control flow conditional pointcuts - The control flow - The cflow pointcut - The cflowbelow pointcut Section 4 : "Aspect lifecycle" Covers the aspect default lifecycle and possible modifications to it - The default singleton lifecycle - Using perthis and pertarget - Using percflow and percflowbelow Section 5 : "Performance impacts" Asserts knowledge about performance impacts of : - Conditional pointcuts - Different lifecycles - Lazy thisJoinPoint - Benefits of thisJoinPointStaticPart Section 6 : "Precedence" Covers what gets executed before and what after, among different aspects and different advices in the same aspect - Precedence between different type of advices (before/after and around) - Precedence between same types of advices in the same aspect - Precedence between aspects - The "declare precedence" Section 7 : "More Intertype Declarations" Covers more advanced forms of intertype decalarations - Declaring default interface implementation - Declaring a different parent, limitations and implications - Softening exceptions - Declaring errors and warnings Section 8 : "Basic AspectJ internals" Covers the public exposed part of the AspectJ API accessible from thisJoinPoint and thisJoinPointStaticPart -- End of exam Exam title : "AspectJ expert exam" I need an expert to write this :) Simone Simone Gianni wrote: > Hi Andy, > nice to hear you are interested. I just posted on the Java Black Belt > forum about your approval. > > If I understood correctly how it works, we should first think about exam > objectives, that is define what a person that passes this exam must be > able to do and what not, choose a number of topics like "Basic > understanding of joinpoints" "Understanding advice parameters" and so > on, together with a brief explanation of what must be covered by each > section, like "This section covers the most common joinpoint types, it's > objectives are * Understand and identify call() and execution() > joinpoints * Understand and identify get() and set() joinpoints * Be > able to use join points composition" .. etc... > > Any idea? > > Simone > > Andy Clement wrote: > >> Hi Simone, >> >> I'm sure I can help with this, and find some other volunteers that >> will help come up with questions. So if you want to tell them to >> create the template we can look to create some suitable questions. >> Just going through bugzilla over the last few years would yield a few >> common pitfalls and questions ;) >> >> cheers, >> Andy. >> >> 2008/8/11 Simone Gianni <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> >> >> Hi all, >> I'm getting addicted to JavaBlackBelt. It is a site where there >> are some >> exams you can take, earn "knowledge points", and show your friends >> (and >> the world) what a cool programmer you are. >> >> Today I noticed that there was no AOP or AspectJ exam, not even >> planned. >> So I asked in the forum, and someone is answering that they'd like to >> have it. >> >> Since exams are built by the community (meaning that people write the >> questions, other will vote if they like them, and those who are >> eligible >> find their place in the exam test) it would be nice if someone is >> interested to answer back in the forum, so that the JavaBlackBelt >> administrator will eventually create a draft for the exam, and then >> contribute questions if and when the exam will be created. >> >> The java black belt site : http://www.javablackbelt.com/ >> The forum entry : >> http://www.javablackbelt.com/forum/posts/list/112.page#469 >> >> Just to let you know, >> Simone >> >> -- >> Simone Gianni >> http://www.simonegianni.it/ >> CEO Semeru s.r.l. >> Apache Committer >> >> _______________________________________________ >> aspectj-users mailing list >> [email protected] <mailto:[email protected]> >> https://dev.eclipse.org/mailman/listinfo/aspectj-users >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> aspectj-users mailing list >> [email protected] >> https://dev.eclipse.org/mailman/listinfo/aspectj-users >> >> > > > -- Simone Gianni http://www.simonegianni.it/ CEO Semeru s.r.l. Apache Committer _______________________________________________ aspectj-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/aspectj-users
