Title: Semantics-based Crosscutting for Message Invocations in AspectJ
1Semantics-based Crosscutting for Message
Invocations in AspectJ
2Crosscuts
- Crosscuts are defined in terms of key events in
the execution of Java programs. - We focus on message invocations.
- A message is used to refer to the combination of
a method name, its result type and the types of
its parameters.
3A simple aspect
crosscut gets() (Point (int getX()
int getY() new())) (Line (Point
getP1() Point getP2()
new())) static advice() gets() after
log.write(A point or line was accessed
or constructed)
4Constraints
- There are classes Point and Line.
- Point has getX() and getY() and a constructor
without parameters - Line has getP1() and getP2() and a constructor
without parameters
5Example 3 Count Collaboration
collaboration Counting participant
Source expect TraversalGraph getT()
// new TraversalGraph(classGraph, //
new Strategy(from Source to Target)) public
int count () // traversal/visitor weaving
getT().traverse(this, new Visitor() int r
public void before(Target host) r
public void start() r 0 ) //
ClassGraph classGraph new ClassGraph()
6Example 3 Count Collaboration
participant Target
Use in Bus simulation example Source --
BusRoute Target -- Person
7Resulting Java Program
class BusRoute // new TraversalGraph(classGr
aph, // new Strategy(from BusRoute via
BusStop to Person)) public int count
(TraversalGraph getT) getT.traverse(this,
new Visitor() int r public void
before(Person host) r public void
start() r 0 ) // ClassGraph
classGraph new ClassGraph()
8Exercise simulate traversal-visitor style in
AspectJ
- Write traversal methods tr1 manually.
- For each visitor entry write crosscut and
advice - crosscut forTarget_tr1(Target h)
- h void tr1()
- static advice(Target h)
- forTarget_tr1(h)
- after / use h /
9Exercise simulate collaborations/ adapters with
AspectJ
class Logging crosscut gets() (Point
(int getX() int getY() new()))
(Line (Point getP1()
Point getP2() new())) static advice()
gets() after log.write(A point or line
was accessed or constructed)
10Corresponding collaboration
- collaboration Logging
- participant DataToLog
- expect methodToLog()
- expect stringToPrint()
- replace methodToLog()
- expected(s)
- log.write(stringToPrint()
-
11Corresponding adapter
- adapter LoggingUse
- Point is Logging.DataToLog
- with
- methodToLog() int getX(), int getY(),
new() - stringToPrint()
- return(Point accessed or
constructed) - Line is Logging.DataToLog
- with
- methodToLog() Point getP1(), Point
getP2(), new() - stringToPrint()
- return(Line accessed or
constructed)
12Using Abstract Crosscuts for Reusability of
Aspects
- abstract public class AbstractLogAndIgnore
- abstract crosscut methods()
- static advice methods()
- catch RemoteException e)
- ErrorLog.print(remote call failed in
- thisMethodName e)
-
-
13Instantiate through Subclassing
- public class JWAMRemoteExceptionHandler
- extends AbstractLogAndIgnore
- crosscut methods()
- RegistryServer (..)
- RMIMessageBrokerImpl
- private (..)
14Adapters versus Abstract Crosscuts
- With crosscut refinement we can only specify the
details of crosscuts. - With adapters we can do more specify crosscut
details and implement the expected methods. - But we can also introduce implementations of
abstract methods through subclassing. Does not
work Method of aspect not participant.
15Collaborations/adapters in AspectJ
- Works if adapter is pure crosscut E.g.
- methodToLog() int getX(), int getY(),
new() -
16From AspectJ to collaborations/adapters
- Static advices go into collaborations (replaced
methods) - Crosscuts go into adapters
- What do we do about crosscut signatures? We can
have arguments in replaced methods.
17Mappings
- One participant to several classes
- AspectJ mention classes in crosscut
- CA X,Y,Z is Collab.P or multiple X is ...
- One method to several methods
- AspectJ enumerate them or use wildcards
- CA enumerate them or use wildcards
18Conclusions
- Collaborations and adapters can not be easily
expressed in AspectJ. - Instantiated collaborations can be expressed in
AspectJ.
19How does AspectJ help in implementing
collaborations/adapters?
- Implements wildcards
- Implements advices (around), Implements replace
- What if AspectJ work stops? Source code available?
20- Adaptive software consists of three parts
- succinct constraints C on customizers
- initial behavior specications expressed in terms
of C - behavior enhancements expressed in terms of C