Semantics-based Crosscutting for Message Invocations in AspectJ - PowerPoint PPT Presentation

1 / 20
About This Presentation
Title:

Semantics-based Crosscutting for Message Invocations in AspectJ

Description:

Semantics-based Crosscutting for Message Invocations in AspectJ. Karl ... Point getP2() | new())) static advice(): gets() { after { log.write('A point or line ... – PowerPoint PPT presentation

Number of Views:15
Avg rating:3.0/5.0
Slides: 21
Provided by: karllie
Learn more at: https://www2.ccs.neu.edu
Category:

less

Transcript and Presenter's Notes

Title: Semantics-based Crosscutting for Message Invocations in AspectJ


1
Semantics-based Crosscutting for Message
Invocations in AspectJ
  • Karl Lieberherr

2
Crosscuts
  • 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.

3
A 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)
4
Constraints
  • 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

5
Example 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()
6
Example 3 Count Collaboration
participant Target
Use in Bus simulation example Source --
BusRoute Target -- Person
7
Resulting 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()
8
Exercise 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 /

9
Exercise simulate collaborations/ adapters with
AspectJ
  • Expand each adapter

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)

10
Corresponding collaboration
  • collaboration Logging
  • participant DataToLog
  • expect methodToLog()
  • expect stringToPrint()
  • replace methodToLog()
  • expected(s)
  • log.write(stringToPrint()

11
Corresponding 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)

12
Using 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)

13
Instantiate through Subclassing
  • public class JWAMRemoteExceptionHandler
  • extends AbstractLogAndIgnore
  • crosscut methods()
  • RegistryServer (..)
  • RMIMessageBrokerImpl
  • private (..)

14
Adapters 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.

15
Collaborations/adapters in AspectJ
  • Works if adapter is pure crosscut E.g.
  • methodToLog() int getX(), int getY(),
    new()

16
From 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.

17
Mappings
  • 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

18
Conclusions
  • Collaborations and adapters can not be easily
    expressed in AspectJ.
  • Instantiated collaborations can be expressed in
    AspectJ.

19
How 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
Write a Comment
User Comments (0)
About PowerShow.com