Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] JavaBlackBelt exam on AspectJ

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.


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 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 <simoneg@xxxxxxxxxx <mailto:simoneg@xxxxxxxxxx>>
>>     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 :
>>     The forum entry :
>>     Just to let you know,
>>     Simone
>>     --
>>     Simone Gianni
>>     CEO Semeru s.r.l.
>>     Apache Committer
>>     _______________________________________________
>>     aspectj-users mailing list
>>     aspectj-users@xxxxxxxxxxx <mailto:aspectj-users@xxxxxxxxxxx>
>> ------------------------------------------------------------------------
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@xxxxxxxxxxx

Simone Gianni
CEO Semeru s.r.l.
Apache Committer

Back to the top