AOP Alliance (Java/J2EE AOP standards)
Motiviations
Aspect-Oriented Programming (AOP) is a programming technique
that will be able to enhance several existing middleware
environments (such as J2EE), or development environements
(e.g. JBuilder, Eclipse).
Several projects now provide AOP-related techniques such as
generic proxies, interceptors, or bytecode translators.
-
ASM: a lightweight bytecode
translator.
-
AspectJ: an AO
source-level weaver. New Language.
-
AspectWerkz: an AO
framework (bytecode-level dynamic weaver+configuration).
-
BCEL: a bytecode
translator.
-
CGLIB: high-level API for class artifact manipulation and method interception.
-
JAC: an AO middleware
(bytecode-level dynamic weaver+configuration+aspects). Framework.
-
Javassist:
a bytecode translator with a high-level API.
-
JBoss-AOP:
interception and metadata-based AO framework.
-
JMangler:
a bytecode translator with a composition framework for translations.
-
Nanning: an AO weaver (framework).
-
Prose: an AO
bytecode-level dynamic weaver (framework).
-
... and many others (email me to add a new one)
All these projects have their onw goals and
speficities. However, several common basic components are still
usefull (and sometimes required) to build a full AO system. For
instance, a component that is able to add metadata on the base
components, an interception framework, a component that is able
to perform code translation in order to advice the classes, a
weaver component, a configuration component, and so on.
To us, it would be great to be able to reuse different
components coming from different projects to build a full AO
system, and for three main reasons.
- Firstly, several components
already exist and it would be stupid to rebuild them.
- Secondly,
various implementation of the same component may be useful and be
more-or-less suited depending on the environement. For instance:
-
the program tranformation can be done at a bytecode or a
the source-code level, at compile or at run time, using an
interception or a code insertion mechanism depending on
the implementation of the component that translates the
base program,
- the weaver may be used within a
standard Java context or within an EJB context, which may
imply some implementation differencies
-
Thirdly, having common interfaces and components would help in
reusing aspects on different weaving environements... this
will greatly improve sofware reusing.
For these reasons, we think that a standarization of the
interfaces of the aspect-oriented components would be great and
will bring great simplifications for the entire AOSD community,
but also for all the communities that will to use AOP in a close
future.