semantics based crosscutting for message invocations in aspectj
Download
Skip this Video
Download Presentation
Semantics-based Crosscutting for Message Invocations in AspectJ

Loading in 2 Seconds...

play fullscreen
1 / 20

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


  • 77 Views
  • Uploaded on

Semantics-based Crosscutting for Message Invocations in AspectJ. Karl Lieberherr. Crosscuts. Crosscuts are defined in terms of key events in the execution of Java programs. We focus on message invocations.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Semantics-based Crosscutting for Message Invocations in AspectJ' - drew


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
crosscuts
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.
a simple aspect
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”);

}

}

constraints
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
example 3 count collaboration
Example 3: Count Collaboration
  • collaboration Counting {
    • participantSource{
    • expectTraversalGraph getT();
    • // newTraversalGraph(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();
example 3 count collaboration1
Example 3: Count Collaboration
    • participantTarget{}
  • }

Use in Bus simulation example:

Source -- BusRoute

Target -- Person

resulting java program
Resulting Java Program
  • classBusRoute{
    • // newTraversalGraph(classGraph,
    • // 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();
exercise simulate traversal visitor style in aspectj
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 */ }}

exercise simulate collaborations adapters with aspectj
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”);

}

}

}

corresponding collaboration
Corresponding collaboration

collaboration Logging {

participant DataToLog {

expect methodToLog();

expect stringToPrint();

replace methodToLog(){

expected(s);

log.write(stringToPrint();}}}

corresponding adapter
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”);}}}

using abstract crosscuts for reusability of aspects
Using Abstract Crosscuts for Reusability of Aspects

abstractpublicclass AbstractLogAndIgnore {

abstractcrosscut methods();

staticadvice methods() {

catch {RemoteException e) {

ErrorLog.print(“remote call failed in:”

+ thisMethodName + “:” + e);

}

}

}

instantiate through subclassing
Instantiate through Subclassing

publicclass JWAMRemoteExceptionHandler

extends AbstractLogAndIgnore{

crosscut methods():

RegistryServer & * *(..) |

RMIMessageBrokerImpl &

private * * (..);

}

adapters versus abstract crosscuts
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.
collaborations adapters in aspectj
Collaborations/adapters in AspectJ
  • Works if adapter is pure crosscut: E.g.:

methodToLog() = {int getX(), int getY(), new()}

from aspectj to collaborations adapters
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.
mappings
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
conclusions
Conclusions
  • Collaborations and adapters can not be easily expressed in AspectJ.
  • Instantiated collaborations can be expressed in AspectJ.
how does aspectj help in implementing collaborations adapters
How does AspectJ help in implementing collaborations/adapters?
  • Implements wildcards
  • Implements advices (around), Implements replace
  • What if AspectJ work stops? Source code available?
slide20
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
ad