When AOP is Used?

Download Report

Transcript When AOP is Used?

Automating Crosscutting
Modification
By Michael Kleyman
When AOP is Used?

It is usually said that aspects represent
crosscutting concerns.
 No clear definition of such a concern.
 AOP can be dangerous when overused.
Trivial Examples

Logging
 Authorization
Telecom Example

Calls, messaging etc. are the core concepts
 Represented by classes, such as Call or
Connection
 Billing is the crosscutting concern,
represented by an aspect.
 Payment calculation initiated in advices to
methods of the core classes.
When AOP is helpful, but not
used

Corporate policies do not allow use of
experimental, immature technologies
 An aspect allows rapid modification of
existing code, but the resulting program
structure is not the best possible structure
 Crosscutting modification as opposed to
crosscutting concern
Example: Object Pooling

Goal: reuse objects instead of creating new
ones
 Can be represented by a factory class.
 Introducing object pooling into existing
system is difficult.
 AspectJ allows an easy but controversial
solution
What is ACME

Convert AspectJ solution to pure Java
 Prove of concept
 Based on specific examples
 Additional examples may be covered later
Key Goals

Java code must produce exactly the same
results as the aspect code.
 Java code should not be significantly longer
than the aspect code.
 The produced code should be easily
modified and used.
Key Goals (Continued)

The generated code must look similar to
code written by a human programmer.
 Based on commonly used patterns and
idioms.
ACME vs. AspectJ Compiler

Must not support the entire language
 Must generate meaningful names (possibly
with user’s help)
 May not use some complicated structures
used in the compiler.
Workflow with ACME

Implement the required modification using
aspects
 Test the implementation
 When the result is satisfactory, run ACME
to generate pure Java code with same
functionality
Creating Singleton Class

Aspect interacts with other code through
pointcuts on functions of a single class.
 Aspect is converted to a class automatically.
 All calls that are advised by the aspect are
replaced by calls to the singleton.
 Example: object pooling.
Inlining Aspect Code

Aspect may be used to modify both
interface and behavior of an existing class.
 Involves both advises and inter-type
member declarations.
 Example: modification of the Point class.
 Example: introduction of transactions
Automatic Modification

Add the member introduced by the intertype declaration to the class
 Add a function for each advice
 Replace all calls advised by the aspect by
calls to the new functions
Aspect Hierarchies

Allow code reuse in several aspects
 Typically involve abstract pointcuts and
concrete implementation of the advices
 Transformed into hierarchies of classes
where the leaves are implemented as
singletons.
When ACME helps?

Evolution aid: test before changing the
system.
 Refactoring
 Eases adoption of aspect technology
When not?

Aspect represent crosscutting concerns
 Aspects used as a configuration tool for
different application of the system
Unsupported Language
Features

Wildcards
 Type-dependent pointcut definitions
 Implicit type casting
 Compile-time applications of aspects, such
as “declare error”
 Execution pointcuts
More on execution join points

Require replacing the implementation of
functions, not the calls to them.
 With inheritance require replacing several
functions for each advice.
 Anything but the simplest around advice
must be transformed to very complicated
code
 Very limited benefit
Case Study
ACME was applied to Shay Raz’s work on
system scaling with aspects.
 Some aspects required cosmetic changes
before processing.
 Some can not be processed because they
involve implicit type casting.
 Possible solution: rewrite the aspects,
removing abstract pointcuts from the base
aspect.

Implementation Details

Built as an Eclipse plugin
 Uses JDT library for Java source
manipulation
 There is no such library for AspectJ code
Algorithm Steps

Parse the AspectJ files
 Create new classes for “singleton” aspects.
 Add new members to existing classes
 Find advised function calls (using JDT)
 Replace these calls by calls to generated
functions