Top Banner
1 © 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0. March 15, 2005 Enterprise Aspect- Oriented Programming Ron Bodkin rbodkin@newxaspects.com New Aspects of Software, AspectMentor Ramnivas Laddad [email protected] Aspectivity, AspectMentor
113

Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

May 19, 2018

Download

Documents

phungdien
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

1© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Enterprise Aspect-Oriented Programming

Ron Bodkin [email protected] Aspects of Software, AspectMentor

Ramnivas Laddad [email protected], AspectMentor

Page 2: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

2© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

This talk is about...

• AOP for the Enterprise– AspectJ/AOP Foundational Example– Enterprise Java Integration

• AOP Examples– Development-Time– Infrastructure– Domain-Specific

• Conclusion

Page 3: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

3© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

The Crosscutting Problem

• Auxiliary concerns are scattered and tangled– data security– audit trail and logging– business rules– error handling

• 80% of problems come from this 20% of code– inflexibility– redundancy … inconsistency– incomprehensibility … unmaintainability– complexity

Page 4: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

4© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

The AOP Solution

• Crosscutting is natural– can’t decompose requirements in one-dimension

• The problem is a lack of support• So AOP uses aspects:

– modular support for crosscutting– language and tools support (AOP)– formalism for design, analysis, … (AOSD)

• Evolutionary step for software development:– structured objects components aspects

Page 5: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

5© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Overview: AOP Concepts

• Aspects– the unit of modularity for crosscutting concerns

• Advice– block of code executed at specified points in

the program execution• Join points

– well-defined points in the program flow

Page 6: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

6© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Overview: AOP Concepts

• Pointcuts– join point ‘queries’

• Inter-type declarations– ‘open classes’ through type extension– are also crosscutting

Page 7: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

7© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

AOP Language Structure

World

Aspect

<<use>>

captures*Pointcut

precedes

*

CrosscuttingElement

JoinPoint

exposes

*Dynamic Crosscutting

Adviceextends

0..1

Static Crosscutting

Inter-typeDeclaration

Weave-timeDeclaration

*

contains

contains*

Page 8: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

8© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

AspectJ• The leading AOP implementation for Java

– Language extension, @AspectJ annotation, and XML definition options

– Java platform compatible• Tool support

– Compiler, linker, and classloader-based weaving

– IDE support: Eclipse, JBuilder, JDeveloper, NetBeans, , IDEA (in development)

– Ant, Maven, ajdoc, Java debugger• Open source: http://eclipse.org/aspectj

Page 9: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

9© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

AspectJ Mechanisms

Song(.java source)

Song (bytecode)

Billing Policy (bytecode)

Song (modified bytecode)

Javac/ajc

BillingPolicy(.aj/.java-source)

ajc

ajc (weave)

Runtime system

• Relies on bytecode modification of aspect-affected classes• Weave can happen at compile, post-compile, or load time

Page 10: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

10© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

AspectJ 5.0 and Java 5.0

• JDK 5.0 (aka 1.5) includes metadata and generics• Metadata is complementary to AOP

– Pointcuts without explicit tags is best– But annotations useful for exceptions or inherent properties– Supplant marker interface idiom

• AspectJ 5.0 support– Pointcuts for annotations

• advice is a great way to handle annotations– Declare annotation– Pointcuts for generics– Generic pointcuts, methods, advice

Page 11: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

11© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

RB1

Example: Online Music Service

BillingService • Online music streaming • Playlists have Songs• Both Songs and

Playlists can be played by a User

*Playlist

+ play()

Song

+ play()+ showLyrics()

<<interface>>Playable

+ play()

*

Based on “Implementing Observer in .NET” example at MSDN with inspiration from the original AspectJ tutorial

Page 12: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

Slide 11

RB1 Nick TODO: update for ant integration, classloading, generics & annotationsRon Bodkin, 1/20/2005

Page 13: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

12© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Music Service Codepublic class Song implements Playable {private String name;

public Song(String name) {this.name = name;}public String getName() {return name;}

public void play() {…}public void showLyrics(){…}

}

Page 14: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

13© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Music Service Codepublic class Playlist implements Playable {private String name;private List<Playable> songs;

public Playlist(String name) {this.name = name;}public String getName() {return name;}

public void setSongs(List<Playable> songs) {this.songs = songs;

}

public void play() {for (Song song : songs) {

song.play();}

}}

Page 15: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

14© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Goal: Correctly Billing User Activity

• When using titles– Individual songs

• Including lyrics– play lists

• Should charge user account• Exact billing may vary on a number of

factors

Page 16: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

15© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Join Points key points in dynamic call graph

: Client : Playlist

playcall

play()

play()

: Song

return

play()

: Song

return

return

Song.play() call

Playlist.play()execution

Song.play() execution

Page 17: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

16© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Join Points: terminology

• Types– Method and constructor call– Method and constructor execution– Not shown:– Field get and set– Exception handler– Static and dynamic initialization

: Playlist

play()Song.play()

call

Playlist.play()execution

Page 18: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

17© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Pointcuts : Queries over Join Points

pointcut useTitle() :execution(public void Song.play()) ||execution(public void Song.showLyrics());

• This pointcut captures the method execution join points of play() and showLyrics()

Name and Parameters Execution of Song.play() method

or

Execution of Song.showLyrics() method

Page 19: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

18© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Advice

• Code that runs before, after, or instead of a join point

: Playlist

play()Song.play()

call

Playlist.play()execution

pointcut useTitle() :execution(void Song.play()) ||execution(void Song.showLyrics());

after() returning :useTitle(){

}//code to run after using a title

Page 20: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

19© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

An Aspect Billing 1

• An aspect is a special type– Like a class– That crosscuts other types– Can contain constructs like pointcuts and advice

public aspect BillingPolicy {

pointcut useTitle() :execution(public void Song.play()) ||execution(public void Song.showLyrics());

after() returning : useTitle(){BillingService.generateCharge();

}}

Page 21: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

20© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Expanding the Aspect Billing 2

public aspect BillingPolicy {

pointcut useTitle() :execution(public void Playable.play()) ||execution(public void Song.showLyrics());

after() returning : useTitle(){BillingService.generateCharge();

}}

• Aspect now applies to Playlist and any other Playables (including Song)

Page 22: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

21© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Exposing Context Billing 3

• This version exposes the currently executing object at each join point (i.e. the Playlist or Song) using this()

public aspect BillingPolicy {

pointcut useTitle(Playable playable) :this(playable) &&(execution(public void Playable.play()) ||execution(public void Song.showLyrics()));

after(Playable playable) returning :useTitle(playable){

BillingService.generateCharge(playable);}

}

Page 23: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

22© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Java Implementation Billing 1

class PlayList{private String name;private List<Songs> songs =

new ArrayList<Songs>();

public void play() {for (Song song : songs) {

song.play();}

}}

class Song{private String name;

public void play() {// play songBillingService.generateCharge();

}

public void showLyrics(){// show lyricsBillingService.generateCharge();

}}

Page 24: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

23© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Java Implementation Billing 2

class PlayList{private String name;private List<Songs> songs =

new ArrayList<Songs>();

public void play() {for (Song song : songs) {

song.play();}BillingService.generateCharge();

}}

class Song{private String name;

public void play() {// play songBillingService.generateCharge();

}

public void showLyrics(){// show lyricsBillingService.generateCharge();

}}

Page 25: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

24© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Java Implementation Billing 3

• Billing code scattered through domain objects

• No module captures intent and implementation of billing policy

• Evolution of billing behavior cumbersome– Each caller must be

changed– Easy to introduce bugs

class PlayList{private String name;private List<Songs> songs =

new ArrayList<Songs>();

public void play() {for (Song song : songs) {

song.play();}BillingService.generateCharge(this);

}}

class Song{private String name;

public void play() {// play songBillingService.generateCharge(this);

}

public void showLyrics(){// show lyricsBillingService.generateCharge(this);

}}

Page 26: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

25© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

AspectJ Implementationclass PlayList{

private String name;private List<Songs> songs =

new ArrayList<Songs>();

public void play() {for (Song song : songs) {

song.play();}

}}

class Song{private String name;

public void play() {// play song

}

public void showLyrics(){// show lyrics

}}

Page 27: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

26© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

AspectJ Implementation Billing 1

class PlayList{private String name;private List<Songs> songs =

new ArrayList<Songs>();

public void play() {for (Song song : songs) {

song.play();}

}}

class Song{private String name;

public void play() {// play song

}

public void showLyrics(){// show lyrics

}}

aspect BillingPolicy {

pointcut useTitle() :execution(public void Song.play()) ||execution(public void Song.showLyrics());

after() returning : useTitle(){

BillingService.generateCharge();}

}

Page 28: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

27© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

AspectJ Implementation Billing 2

class PlayList{private String name;private List<Songs> songs =

new ArrayList<Songs>();

public void play() {for (Song song : songs) {

song.play();}

}}

class Song{private String name;

public void play() {// play song

}

public void showLyrics(){// show lyrics

}}

aspect BillingPolicy {

pointcut useTitle() :execution(public void Playable.play()) ||execution(public void Song.showLyrics());

after() returning : useTitle() {

BillingService.generateCharge();}

}

Page 29: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

28© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

AspectJ Implementation Billing 3

class PlayList{private String name;private List<Songs> songs =

new ArrayList<Songs>();

public void play() {for (Song song : songs) {

song.play();}

}}

class Song{private String name;

public void play() {// play song

}

public void showLyrics(){// show lyrics

• Billing code centralized in BillingPolicy– Intent of billing behavior is clear– Changes to policy only affect

aspect– Modular evolution

aspect BillingPolicy {pointcut useTitle(Playable playable) :

this(playable) &&execution(public void Playable.play()) ||execution(public void Song.showLyrics());

after(Playable playable) returning :useTitle(playable) {BillingService.generateCharge(playable);

}}

}}

Page 30: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

29© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Aspects Crosscut Classes

• Aspect modularity cuts across class modularity

BillingPolicy

BillingService

*Playlist

+ play()

Song

+ play()+ showLyrics()

<<interface>>Playable

+ play()

*

Page 31: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

30© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Double Billing

• Don’t want to bill twice for songs played within the context of playing a Playlist

• Can accomplish using cflowbelowpointcuts

Page 32: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

31© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Refresher : Control Flow

: Client : Playlist

playcall

play()

play()

: Song

return

play()

: Song

return

return

Song.play() call

Playlist.play()execution

Song.play() execution

All these join points are in the control flow of the original play call

Page 33: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

32© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Using the cflowbelow() Pointcut

aspect BillingPolicy {pointcut useTitle(Playable playable) :

this(playable) &&(execution(public void Playable.play()) ||execution(public void Song.showLyrics()));

pointcut topLevelUse(Playable playable) :useTitle(playable) &&!cflowbelow(useTitle(Playable));

after(Playable playable) returning :topLevelUse(playable) {

BillingService.generateCharge(playable);}

}

• cflowbelow() selects only join points within the control flow of another join point

Not within the control flow of another use

Page 34: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

33© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

One Billing Service Per Playable

• Allows different songs to have different price models

public aspect SingleBillingPolicy {private BillService Playable.billService;public void Playable.setBillService(BillService s){

billService = s;}

pointcut useTitle(Playable playable) :<as before>

pointcut topLevelUse(Playable playable) :<as before>

after(Playable playable) returning :topLevelUse(playable){

playable.billService.generateChargeFor(playable);}

}

Public ITD method

Private … to the enclosing aspect

Page 35: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

34© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Several Services Per Playablepublic aspect GeneralBillingPolicy {

private List Playable.billServices = new ArrayList();public void Playable.addBillService(BillService s){

billServices.add(s);}

<…as before…>

after(Playable playable) returning :topLevelUse(playable){for (BillService service : playable.billServices) {

service.generateChargeFor(playable);}

}}

• One service for each copyright holder perhaps?

Page 36: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

35© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Client Code…

Song song = new Song("Yellow Submarine");BillService john = Publisher.find("ABC").getBillService();BillService ringo = Publisher.find("XYZ").getBillService();

song.addBillingService(song, john);song.addBillingService(song, ringo);

song.play();

Page 37: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

36© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

A Reusable Aspectpublic abstract aspect ObserverProtocol {

protected interface Subject{}

protected interface Observer{}

private WeakHashMap<Subject,List<Observer>> perSubjectObservers;

protected List<Observer> getObservers(Subject subject) {<retrieve from map>}

public void addObserver(Subject subject, Observer observer) { … }

public void removeObserver(Subject subject, Observer observer) { … }

protected abstract pointcut subjectChange(Subject s);

after(Subject subject): subjectChange(subject) {

for(Observer o : getObservers(subject)){

updateObserver(subject, o);

}

}

protected abstract void updateObserver(Subject subject, Observer observer);

}

Define Roles within the pattern

Page 38: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

37© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Aspect Inheritance

• Aspects can be declared abstract and extended by subaspects

• Abstract aspects can define abstract methods

• Abstract aspects can define abstract pointcuts and apply concrete advice to them– It’s up to the subaspect to concretize the

pointcut

Page 39: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

38© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Concrete Reusepublic aspect ObserverBillingPolicy extends ObserverProtocol {

declare parents : Playable extends Subject;

declare parents : BillingService implements Observer;

pointcut topLevelUse(Playable playable) :

<as before>

public pointcut subjectChange(Subject subject):

topLevelUse(Playable) && this(subject);

public void updateObserver(Subject s, Observer o){

BillingService service = (BillingService)o;

service.generateChargeFor((Playable)s);

}

}

Apply roles to participants

Override pointcut to define where a change has occurred (a top-level use)

Page 40: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

39© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Wiring Up Observers

• Last piece of puzzle• Billing Service needs to begin “watching” the

various Playables– And to perhaps stop at some point (old songs become

free?)

• Accomplished through calls to add/removeObserver on the aspect– Can be done programmatically– Or through advice– Examples during demo in next section

Page 41: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

40© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Part II. Enterprise Integration

• Build Integration• Debugging support • Library generation • Load Time Weaving• View Layer Integration

Page 42: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

41© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Compiling With Ant

• Minute-to-minute development done in IDE– Exploit integrated incremental compilation for

rapid development• Deployment builds can integrate with

Ant and Maven– Use iajc task to invoke ajc compiler– Various options to control bytecode weaving,

jar generation, source and bytecode aspects, etc.

Page 43: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

42© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Basic War Generation With Ant

• iajc similar to javac task– Source options more complex– Need aspectjrt.jar on the classpath

<target name="deployWar" description="Compiles, WARs, and deploys to local container">

<iajc source="1.5" destDir="target/classes" verbose="true" sourceroots="src">

<classpath ><pathelement path="${webLib}/aspectjrt.jar"/>

</classpath></iajc><war destfile="target/songs.war" basedir="webapp”webxml="webapp/WEB-INF/web.xml">

<classes dir="target/classes"></classes></war><copy todir="${deploy.dir}" file="target/songs.war"></copy>

</target>

Page 44: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

43© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Hot Deployment Strategy

• Many J2EE containers support exploded and/or hot redeployment

• Leverage incremental compiler to avoid time-consuming full builds

• Copy IDE output to deployment directory

<target name="dirty-deploy"><copy todir="${deploy.dir}/songs/">

<fileset dir="webapp" includes="**/*.jsp"></fileset></copy><copy todir="${deploy.dir}/songs/WEB-INF/classes">

<fileset dir="bin” /> <!-- eclipse complier output dir--></copy>

</target>

Page 45: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

44© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Demo

Page 46: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

45© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Sample Aspect: Error Logging//problem: poor error handlingpublic void problematicMethod(){try{int i = 1/0;

}catch (Exception e) {throw new RuntimeException("masks the real problem");

}}//Solution: log all too-wide handler blockspublic aspect ErrorLogger {public pointcut suspiciousHandlers(Throwable t) : (handler(Exception) || handler(Throwable))&& args(t) && scope();

before(Throwable t) : suspiciousHandlers(t){//…log error

}}

Page 47: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

46© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Aspect Library Jars

• AspectJ can create binary libraries for reuse:stored in standard jar file format

• Typically use Ant to generate output jars

• Can also use AJDT, Maven, ….• Consume output jars with Ant, AJDT, …

Page 48: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

47© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Consuming bytecode aspects<!– compile aspects into JAR --><target name="compileJar">

<iajc source="1.5" outjar="antError.jar” sourceroots="src"><classpath > // include aspectjrt.jar

</iajc><copy todir="../ObserverDemo/webapp/WEB-INF/lib" file="antError.jar”/>

</target>

<!-- modify previous target to put jar on aspectpath --><iajc source="1.5" destDir="target/classes" verbose="true"

sourceroots="src” aspectpath="${webLib}/antError.jar">

<!-- Or modify already compiled JARs-useful for logging errorsin third-party code -->

<iajc outjar="lib/struts.jar" injars=“outlib/struts.jar”aspectpath="${webLib}/antError.jar”>

• To weave a classfile more than once, use -Xreweavable

Page 49: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

48© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Load Time Integration

• AspectJ 5 has robust support for weaving classes at load-time

• Allows easy deployment of auxiliary aspects

• Configuration files customize which aspects are woven

• LTW enabled through -javaagent in JDK 5.0, custom classloader in JDK 1.4– "aj" launch script simplifies

Page 50: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

49© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Aop.xml Controls Weaving

• File placed in META-INF on classloader search path

<aspectj><aspects><!-- declare existing aspects to the weaver --><aspect name="eorrorlogging.ErrorLogger"/><!-- Can include aspects based on name patterns and

annotations. --><include within="errorLogging..* "/><exclude within="@AdvancedLogging * "/>

</aspects><weaver options="-verbose"><!-- can include or exclude affected classes on similar

criteria --><include within="org.apache.struts..* "/><include within="(!@NoWeave songplayobserver.*) AND

songplayobserver.* "/></weaver>

</aspectj>

Page 51: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

50© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Concrete Aspects in XML

• Allows for customization of infrastructure pointcuts without full-subclassing

<aspectj><aspects><aspect name="eorrorlogging.ErrorLogger"/><!-- Supposing that ErrorLogger was abstract and that

loggedErrors was an abstract pointcut --><concrete-aspect name="com.foo.SongAppLogger" extends="errorlogging.ErrorLogger"><pointcut name=“scope" expression="within(songplayobserver.Application)"/>

</concrete-aspect></aspects>…

</aspectj>

Page 52: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

51© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

View Layer Integration

• Challenge of the View Layer– “Code” in view layer not written in Java

• Templating languages (Velocity, JSP)• Component specs (JSF, Tapestry)• Often uses reflection to call methods on

application code – Pointcuts cannot detect join points outside the

"code the implementation controls"

Page 53: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

52© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

View Layer Example

• How to write advice or start a cflow on the call to playCurrentSong()?

• Or on call to setCurrentSongName()?

<jsp:useBean id="songApp" scope="session" class="songplayobserver.Application" /><c:set target="${songApp}" property="currentSongName" value="${param.song}"/>

<% songApp.playCurrentSong(); %>

Page 54: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

53© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

View Layer Options

• Weave into JSPs– Tomcat… allows pluggable JSP compilation– LTW, but are there classloader issues?– Both solutions depend on JSP->Java translation– Neither addresses c:set!

• Refactor or use existing design to rely on join points you do control– Use execution(Application.setCurrentSongName(..))

– More widely useful (tag libraries, alternative view layers)

Page 55: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

54© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Part III: Development Time Aspects

• Tracing remote calls • Architectural enforcement• Testing

Page 56: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

55© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Tracing Remote Service Callspublic abstract aspect TraceRemoteRequests {pointcut remoteCall(Object caller, Remote recipient) :

call(public * Remote+.*(..) throws RemoteException) &&this(caller) && target(recipient);

before(Object caller, Remote recipient) :remoteCall(caller, recipient) && inScope() {

logger.info("Calling "+thisJoinPoint+" from "+toTraceString(caller)+" to "+toTraceString(recipient));

}after() returning (Object result) :

remoteCall(*, *) && inScope() {logger.info("Returned "+toTraceString(result));

}after() throwing (Throwable throwable) :

remoteCall(*, *) && inScope() {logger.info("Threw "+toTraceString(throwable));

}…

Page 57: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

56© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Tracing Remote Service Calls…

public abstract pointcut scope();private pointcut inScope():

scope() &&!within(TraceRemoteRequests) && !withincode(* toString());

private String toTraceString(Object obj) { ... }

private Logger logger = Logger.getLogger(TraceRemoteRequests.class);}

Page 58: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

57© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Architectural Enforcement

• Compile time checking– declare error, declare warning

• Only for statically determinable pointcut designators– execution, initialization, staticinitalization, within, withincode, get, set, call

• Dynamic cases addressed later (in testing)• Prevent code rot and enforce consistent

policy– E.g., enforcing EJB restrictions

• Often a first step; even better is using aspects to consistently implement …

Page 59: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

58© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Use Logger, not printing

public aspect EnforceLogging {

pointcut scope():within(com.example..*) &&!within(ConsoleDebugger);

pointcut printing():get(* System.out) || get(* System.err) ||call(* printStackTrace());

declare warning: scope() && printing():"don't print, use the logger";

}

• Warn developers using System.out, System.err and printStackTrace

Page 60: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

59© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Architectural Layering

View

Persistence

Model

Controller Layer 1

Layer 2

Layer 3

Layer 4

Page 61: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

60© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Enforcing Layering:Mapping packages to layers…aspect Architecture {

pointcut inView() : within(view..*);pointcut inModel() : within(model..*);pointcut inController() : within(controller..*);pointcut inPersistence() : within(persistence..*);

Page 62: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

61© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Enforcing layering:PCD’s for external calls into layers…

pointcut viewCall(): call(* view..*(..)) && !inView();

pointcut modelCall(): call(* model..*(..)) && !inModel();

pointcut controllerCall():call(* controller..*(..)) && !inController();

pointcut persistenceCall():call(* persistence..*(..)) && !inPersistence();

pointcut jdbcCall() :call(* java.sql..*(..)) || call(* javax.sql..*(..)) ;

Page 63: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

62© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Enforcing layering:Compiler warnings for illegal calls…

declare warning : controllerCall() : "No calls into controller";

declare warning : viewCall() && !inController() : "Only controller can call view";

declare warning : modelCall() && !(inController() || inView()) : "Only view and controller can call model";

declare warning : persistenceCall() && !inModel() : "Only model can access persistence layer";

declare warning : jdbcCall() && !inPersistence() : "Persistence layer handles all db access";

}

Page 64: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

63© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Subsystem Testing: Problems

• Complex state• Complex

dependencies• Error handling• Sequence of

actions• Refactor for

testability?!

Page 65: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

64© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Subsystem Testing: Solutions

• Use mock objects to simulate some components

• Using aspects– Virtual Mocks – Fault injection– Count

automatically

1. Leverage JUnit2. Don’t compromise design for testability3. Clean mock processing

Page 66: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

65© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Testing Database Errors…

public void testDatabaseFailure() {try {

from.transfer(2.25, to);fail("no exception");

} catch (ModelException e) {// success

}}

• Account should convert a SQLException to a ModelException– How to simulate a SQLException?

Page 67: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

66© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Using Simple Virtual Mockspublic aspect AccountTestFailureInjection {

pointcut inFailureTest():cflow(execution(* *Failure(..)) && this(TestAccount));

before() throws SQLException: call(* save()) && target(DAO) && inFailureTest() {throw new SQLException("can't reach database");

}}

Page 68: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

67© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Using Aspen Library Virtual Mocks…

public void testTransfer() {from.transfer(2.25, to);

assertEquals(from.getBalance(), 7.75, TOLERANCE);assertEquals(to.getBalance(), 3.25, TOLERANCE);// verify values persistedassertEquals(1, from.getExecutions("save"));assertEquals(1, to.getExecutions("save"));assertEquals(1, transaction.getCallsTo("commit"));

// verify commit happened AFTER savesint saveFromSeq = from.getMethodSeq("save");int saveToSeq = to.getMethodSeq("save");int commitSeq = transaction.getMethodSeq("commit");assertTrue(saveFromSeq < commitSeq);assertTrue(saveToSeq < commitSeq);

}…

Page 69: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

68© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Extending Library Aspect

• Makes collaborators into virtual mock objects– Counts methods and parameters– Mock return values (even exception injection)– Method counting and mock values

• Also tracks operations on the tested class (Account)

aspect AccountVirtualMocks extends VirtualMocks {declare parents: (AccountDAO || Provider || Transaction)

implements Replaced;

declare parents: Account implements MonitoredItem;

public pointcut replacementScope():cflow(execution(public void TestAccount.test*(..)));

}

Page 70: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

69© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Part IV: Infrastructure Aspects

• Performance• Error Handling• Transaction Management

Page 71: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

70© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Performance Management

• Performance is also a crosscutting concern• AOP can help to

– Monitor performance– Identify bottlenecks (when optimizing/tuning)– Improve performance

• AOP complements:– Good system architecture– Good (improved) algorithms– Profilers

Page 72: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

71© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Monitor Performance

• Goal: capturing key system statistics like– How many requests?– How long do they take?– How much time is spent in database calls?– Which requests are slow?

• Can be used for– Real-time alerts– Management consoles– Offline analysis– Low-overhead tuning

Page 73: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

72© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Basic Request Monitoringpublic aspect MonitorRequests { void around() : monitoredRequest() {

PerfStats stats = getPerfStats(thisJoinPointStaticPart);long start = System.currentTimeMillis();

proceed();

stats.counter++;stats.time += System.currentTimeMillis()–start;

}

pointcut monitoredRequest() : execution(void HttpServlet.do*(..)) && if(enabled);

// can expose stats via JMX, dump method, getStats etc.public static class PerfStats { … }private Map<StaticPart,PerfStats> perfStatMap = //…private boolean enabled;

}

Page 74: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

73© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Refresher: percflow() aspects

• Instantiated at each join point in specified pointcut

• Keep state for length of control flow• To jump back to our first example, the

next slide shows the lifecycle of an aspect declared aspercflow(execution(public void Playlist.play()))

Page 75: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

74© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Refresher: percflow() aspects

: Playlist

play()

: Song

return

play()

: Song

return

The aspect may run at any of these join points

Aspect instantiated

Aspect eligible for garbage collection

Page 76: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

75© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Database Monitoring Per Request

public aspect MonitorDatabaseRequestspercflow(monitoredRequest() && !cflowbelow(monitoredRequest()) { void around() : monitoredRequest() {

PerfStats stats = getPerfStats(thisJoinPointStaticPart);long time = System.currentTimeMillis();

proceed();

stats.counter++;stats.databaseTime += accumulatedDatabaseTime;stats.time += System.currentTimeMillis()-time;

}…

• Captures statistics at top level request entry & exit• !cflowbelow() prevents the aspect from double

counting requests invoked by this request

Page 77: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

76© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Database Monitoring Per RequestObject around() : databaseOperation() {

long time = System.currentTimeMillis();Object ret = proceed();accumulatedDatabaseTime += System.currentTimeMillis()-time;return ret;

}

public pointcut databaseOperation() : call(* java*.sql..*(..));

private long accumulatedDatabaseTime = 0L;}

• Accumulates database time for each request

Page 78: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

77© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Identify Bottlenecks

Common stages in optimizing:• Find & eliminate top-level bottlenecks• Find & tune expensive “leaf” operations• Now your performance profile will be

many moderately expensive calls…with no “low hanging fruit”

• How do you proceed?

Page 79: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

78© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

AOP for Active Analysis

• Collect selective statistics (sum(x+y+z) when a or b is true)

• Test hypotheses … non-invasively• Like our example for monitoring database,

but tailored – e.g., track string or XML operations only for

• cflow(execution(…) && this(UpdateServlet))

or• args(list) && if(list.length > 10);

Page 80: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

79© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

AOP to Improve Performance

• Caching– Storing previously calculated values

• Prefetching– Retrieving information before it’s required

• Changing Concurrency– Altering locking or conflict detection for parallel use

• Changing query strategy– Using indexes or simpler queries in a common case

• Batching distributed requests– Sending many updates in one message

Page 81: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

80© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

A Constant Cachepublic aspect CacheTaxCalculation {

private Object Account.cachedTaxRate;

Object around(Account account) : execution(double calcTaxRate(..)) && this(account) {Object value;if (account.cachedTaxRate == null) {

value = proceed(account);account.cachedTaxRate = value;

} else {value = account.cachedTaxRate;

}

return value;}

}

• Using Object allows for null as a cached value• AspectJ auto-boxes/unboxes

Page 82: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

81© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

An Event-Based Invalidating Cachepublic aspect CacheTaxCalculation {

private Object Account.cachedTaxRate;

Object around(Account account) : // same as before…

before(Account account) : set(* Account+.*) && target(account) && !within(CacheTaxCalculation) {account.cachedTaxRate = null;

}

}

• Invalidate the cache if Account changes state– i.e. if a field within Account changes

• Could can extend to use observer (e.g., if TaxRegulationchanges)

Page 83: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

82© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

A Time-Based Invalidating Cache

public aspect CacheTaxCalculation {private Object Account.cachedTaxRate;private long Account.cacheWriteTime;private static int INVALIDATION_TIME = 5000; // 5s

Object around(Account account) : execution(double calcTaxRate(..)) && this(account) {Object value;if (!account.hasValidCache()) {

account.cachedTaxRate = proceed(account);account.cacheWriteTime = System.currentTimeMillis();

}

return account.cachedTaxRate;}

Page 84: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

83© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Checking Cache Expiry…

public boolean Account.hasValidCache() {return account.cachedTaxRate != null && account.cacheWriteTime + INVALIDATION_TIME >System.currentTimeMillis();

}}

Page 85: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

84© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

A Reusable Caching Aspect

• Example inspired by Adrian Colyer’sblog– http://www.aspectprogrammer.org/blogs/adria

n/2004/06/implementing_ca.html• Two parts:

– abstract aspect– concrete reuse

Page 86: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

85© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Abstract Caching Aspectpublic abstract aspect BaseCache {

private Map cache = new WeakHashMap();public void invalidate(Object key) { … }

abstract pointcut cachedOperation(Object key);

Object around(Object key) : cachedOperation(key) {Object value;if (cache.containsKey(key)) {

value = cache.get(key);} else {value = proceed(key);cache.put(key,value);

}return value;

}}

Page 87: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

86© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Concrete Reusepublic aspect CacheTaxCalculation extends BaseCache {

pointcut cachedOperation(Object key) :execution(double calcTaxRate(..)) && this(Account) && this(key);

// invalidate as before…

}

• Abstract aspect could be further extended to add an “invalidation”pointcut

Page 88: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

87© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Monitoring Example: RUBiS

Page 89: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

88© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

AOP Performance Studies

• Micro-benchmarks– AOP Benchmark from AspectWerkz– abc compiler benchmarks– AspectJ internal benchmark suite– Haupt & Mezini: micro-measurements

• System Benchmarks– Hugunin & Hilsdale: XSLTMark tracing

• 22% slower when tuned for basic policy• 24% faster with static field optimization

– Zhang & Jacobsen: ORBacus refactoring• 8% slower with all aspects included• 6% faster without unnecessary aspects

Page 90: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

89© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Performance Results Summary

• AspectJ (& AspectWerkz) performance usually close (within 5%) of hand-written alternatives– Typical advice overhead 10-80 ns/invocation– If it’s important, test and tune

• Small caveats– Pre-AspectJ 1.5: no pertypewithin– Pre-AspectJ 1.2: thisJoinPoint eager creation issue– Pre-AspectJ 1.2: cflow– Use of inefficient methods (e.g., Class.getName())

overhead

– Generally performance issues can be resolvalso enables better optimization)

– Build times significantly slower

ed (and AOP

Page 91: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

90© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Error Handling Challenges

• Confusing/wrong exception handling

• Swallowing exceptions

• Repetitious logic• Inconsistent

exception types• Added as an

afterthought• Hard to change

• Failing to log errors• Logging errors too

many times• Presenting error

information to users• Determining root causes• Capturing context• User support (what

really went wrong?)

Page 92: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

91© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Sample Error Handling Policy

• Handle exceptions– correctly and consistently– at well-defined points

• Log exceptions – once, when first resolved– with appropriate context information

• Convert exception types– soften (most) checked exceptions– at defined layers (tiers)– distinguish fatal from possible to retry?

Page 93: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

92© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Data Access Error Handlingaspect DataAccessErrorHandling {

pointcut dataAccessCall() :within(persistence..*) &&call(* *(..) throws SQLException);

declare soft: SQLException: dataAccessCall();

after(DAO obj) throwing (SQLException e) :dataAccessCall() && this(obj) {

RuntimeException pe = null;if (e.getErrorCode() == ..) {

pe = new NoRemoveInUseException(e);} else {

pe = new PersistenceException(e);}pe.setCurrent(obj);throw pe;

}…

}

Page 94: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

93© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Model Error Handlingaspect ModelErrorHandling {

pointcut layerEntry() : execution(public * model..*(..));

pointcut layerBoundary() :layerEntry() && !cflowbelow(layerEntry());

after() throwing (PersistenceException e):layerBoundary() {

logger.error("database error for "+e.getContext(), e);// code to force transaction rollbackthrow new ModelException(e); // does exception conversion

}

after(Object cause) throwing (PersistenceException e):execution(* model..*(..)) && this(cause) {

// capture context from calling codeif (e.getCaller() == null) {

e.setCaller(cause);e.setArgs(thisJoinPoint.getArgs());logger.debug("caller :"+caller);// iterate over args and log

}}

}

Page 95: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

94© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

UI Error Handlingaspect UIErrorHandling {pointcut actionMethod(ActionMapping mapping) :

execution(ActionForward Action+.execute(..)) &&args(mapping, ..);

ActionForward around(ActionMapping mapping) :actionMethod(mapping) {

try {return proceed(mapping);

} catch (NoRemoveInUseException e) {errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("error.noremoveinuse",((BusinessObj)e.getContext()).getName(),((BusinessObj)e.getContext()).getKey()));

return mapping.getInputForward();} catch (ModelException e) {

return handleError(e, mapping);}

Page 96: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

95© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

UI Error Handling (cont.)…

catch (InvocationTargetException e) {logger.error("populating form ", e);return handleError(e, mapping);

}catch (Throwable t) {

logger.error("unknown throwable ", t);return handleError(t, mapping);

}}

ActionForward handleError(Exception e, ActionMapping mapping) {session.setAttribute(Constants.MESSAGE_TEXT,

translate(e.getMessage()));session.setAttribute(Constants.EXCEPTION, e);return mapping.findForward(Constants.ERROR_PAGE);

}}

Page 97: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

96© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Simple Transaction Management

public aspect TxnManagement {protected pointcut txnalPoint() :

execution(public * *(..)) && this(org.sample.model..*);// could also use annotation to define pointcut…private pointcut topLevelTxn():

txnalPoint() && !cflowbelow(txnalPoint());

Object around() : topLevelTxn() {Object returnValue = null;try {

returnValue = proceed();txn.commit();

} catch (ModelException ex) {txn.rollback();throw ex;

}return returnValue;

}}

Page 98: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

97© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Part V: Business Logic Aspects

•Account Suspension•Other Business Aspects

Page 99: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

98© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Account Suspension

• Example business aspect• Rule: no business transaction may be

performed on any suspended account– Many different types of accounts– Attempts should fail and give an error– The UI should not offer unavailable

operations…just as with security rules

Page 100: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

99© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Telecom Example

ConsumerAcct

+ doNotCall()…

SME_Acct

+ analyze()…

*Service

+ placeCall()+ addFeature()

Account

+ bill()+ cancel()…

1

Mobile

+ setVoicemail()…

Local

+ conference()…

Page 101: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

100© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Simple Implementationpublic aspect AccountSuspension {

private boolean Account.suspended = false;public void Account.setSuspended() { … }public boolean Account.isSuspended() { … }

pointcut suspendedAccountBusinessTxn(Account account):this(account) && if(account.suspended) &&execution(* *(..)) && BPM.inBusinessTransaction();

before(Account account) :suspendedAccountBusinessTxn(account) {

// record attempted accessthrow new SuspendedAccountException("…");

}// exceptions caught by UI/interaction tier

}

Page 102: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

101© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

public aspect ServiceSuspension {

Simple Implementation

pointcut suspendedServiceBusinessTxn(Service service):if(service.getAccount().isSuspended) &&this(service) && execution(* *(..)) &&BPM.inBusinessTransaction();

before(Service service) :suspendedServiceBusinessTxn(service) {

// record attempted access to service.getAccount()throw new SuspendedAccountException("…");

}}

Page 103: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

102© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Interesting Questions

• Defining business transactional operations: use of annotations or stable properties?

• Restore (or close) suspended account: is this a business transaction? Pointcut exception?

• Allowing non-transactional operations on suspended: not common in practice?

• Proactive checking for suspension in UI– Challenge: avoiding redundant rules while decoupling– Some UI designs/frameworks can simplify– Use of annotations may facilitate (possibly with declare

annotation)– Topic for research in expressive pointcuts…

Page 104: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

103© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Business Aspects

• Many other possibilities– Account limits– Account authorization– Metering (extending our online music store)– Publishing business events– Detecting business exceptions (real-time monitoring)– Feature management

• for specific partners/customers etc.– Object history/versioning

• As many business aspects as business objects

Page 105: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

104© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Part VI: Conclusion …•The state of AOP•Standards and Libraries•Design With Aspects•Adoption

Page 106: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

105© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

The State of Play

Cricket: a sport that lasts for 5 days,

and you stop for tea!

What is the state of enterprise AOP?• Lots of players:

– AspectJ 5• Power & tools integration of AspectJ• Load-time weaving & easy adoption

of AspectWerkz• IBM & BEA support• also abc: optimizing AspectJ compiler

– JBossAOP: “Transparent middleware”. Aspects bundled for you (TX, caching, etc)

– Spring: Out of the box aspects (TX, persistence, security, etc), AspectJ integration

– Other projects: AspectC++, AOPHP, Dynaop, Nanning, etc.

Slide concept courtesy Dion Almaer

Page 107: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

106© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Standards• What, when, and how to standardize:

tough questions– AOP Alliance: Standard interfaces for interceptors– Groovy precedent for alternative languages on JVM– Sun is conservative (e.g. generics was JSR-14)

• The What– Can we agree on a pointcut language?

• Implementations are converging… and sharing the same notions

– Can we standardize on aspect .class file formats?• Would allow sharing pointcut definitions• Could even share aspect libraries among AO implementations

– Standard extensions?

Slide concept courtesy Dion Almaer

Page 108: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

107© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Reusable Aspect Libraries

• Aspen (from aTrack sample AspectJ project)– Persistence & Transactions– Session management– Controller logic

• AspectWerkz libraries• Spring AOP libraries• JBoss AOP libraries• AspectJ 5 library base• Eclipse AspectJ sample app• Contract4J• Can we combine?

Page 109: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

108© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Early Aspects

• Analysis– Adjectives & adverbs not nouns (Colyer)

• Build on OO methods that work– Refactoring aspects is natural (Laddad,

Monteiro, …)– Good OO design helps AO– TDD (aUnit tool in progress)

• UML extensions– Naïve/Stereotypes, Theme/UML, Jacobson,

Page 110: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

109© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Design Aspects

• Focus on ARC: aspect, responsibilities, collaborators

• Pointcuts are key: describe stable properties (e.g., whenever state changes), not using today’s AOP pointcut languages nor using enumeration

• Advice: @name to describe what not how• ITD’s: design like state/methods for class

Page 111: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

110© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Smooth Adoption Curve

benefit

• enforcement• testing• debugging

• timing• caching

• performance

• error handling• management

• feature management

• security• domain aspects• persistence

• beyond OO• AOP redefines

services, middleware

development time

infrastructure businesslogic

enterpriselibraries

AOarchitecture

time & confidence

• reusable libraries• aspects and

classes for:developmentinfrastructurebusiness logic

Page 112: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

111© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Conclusion

• AOP is rapidly gaining adoption in the enterprise

• An incremental adoption strategy is available• Books: AspectJ in Action, Eclipse AspectJ,

AspectJ Cookbook, Mastering AspectJ, …• These slides at

http://www.newaspects.com/presentations• Training, consulting, and support available

Page 113: Enterprise Aspect- Oriented Programming - EclipseCon …€¦ ·  · 2017-12-06© 2002-2005 New Aspects of Software, IBM, ... March 15, 2005 Made available under the EPL v1.0. Enterprise

112© 2002-2005 New Aspects of Software, IBM, Nicholas Lesiecki, Ramnivas Laddad. Made available under the EPL v1.0.March 15, 2005

Thank You

Thanks to our fellow AspectMentors for concepts in and feedback on this presentation, and to Ron’s former colleagues on the AspectJ team at PARC for teaching him some effective ways to teach AOP.

Ron Bodkin [email protected] Aspects of Software, AspectMentor

Ramnivas Laddad [email protected], AspectMentor