Eclipse: The universal tools platform
Download
Report
Transcript Eclipse: The universal tools platform
®
Aspect-Oriented Programming In Eclipse
Aspect-Oriented Programming in Eclipse
with AspectJ
Dr Helen Hawkins and Sian January
Aspect-Oriented Programming in Eclipse
Outline
The need for Aspect-Oriented Programming (AOP)
An introduction to AspectJ
AspectJ Demos
Adopting AOP
Further information
Aspect-Oriented Programming in Eclipse
The 1-to-1 idea: Good modularity
One requirement in your design maps to one module in your
implementation
For example – Chess Piece, Chess Board, Player
Clear, simple, direct mapping
Modules are
easy to add
easy to remove
easy to maintain
Aspect-Oriented Programming in Eclipse
The 1-to-1 idea: Good modularity
Socket Creation in Apache Tomcat
Red shows the relevant lines of code
Nicely fits into one package – 3 classes
Aspect-Oriented Programming in Eclipse
When things go wrong…
Logging in Tomcat
Scattered and tangled throughout all the packages
Bad Modularity – 1-to-n mapping
Aspect-Oriented Programming in Eclipse
The trouble with 1-to-n
Redundant code
Same fragment of code in many places
e.g. trace.entry(); trace.exit();
Difficult to understand
Mapping from the requirement is unclear
Structure is not explicit
Difficult to change
Have to find all the code involved
And be sure to change it consistently
And be sure not to break it by accident
Aspect-Oriented Programming in Eclipse
n-to-1 and n-to-n
A consequence of the 1to-n problem
Modules are no longer
well defined
Aspect-Oriented Programming in Eclipse
Code View of n-n
Tangled
try {
if (!removed)
entityBean.ejbPassivate();
setState( POOLED );
} catch (RemoteException ex ) {
FFDCEngine.processException(
ex,”EBean.passivate()”,”237”,
this);
destroy();
throw ex;
} finally {
if (!removed &&
statisticsCollector != null) {
statisticsCollector.
recordPassivation();
}
removed = false;
beanPool.put( this );
if (Logger.isEnabled) {
Logger.exit(tc,”passivate”);
}
}
Core Logic
try {
if (!removed)
entityBean.ejbPassivate();
setState( POOLED );
} catch (RemoteException ex ) {
destroy();
throw ex;
} finally {
removed = false;
beanPool.put( this );
}
Example: Code to handle
EJB Entity bean passivation
Aspect-Oriented Programming in Eclipse
Aspect-Oriented Software Development …
Recognises crosscutting concerns:
Are inherent in any complex system
Have a clear purpose
Have a natural structure
Captures crosscutting concerns explicitly:
In a modular way
With linguistic and tool support
Aspect-Oriented Programming in Eclipse
AspectJ
An aspect oriented programming (AOP) language
Java language extension
Divides system into
core concerns (classes)
crosscutting concerns (aspects)
Broad IDE support
Eclipse, Emacs, JBuilder, NetBeans, …
Aspect-Oriented Programming in Eclipse
AOP Concepts
Join points
Pointcuts
Advice
Aspects
Aspect-Oriented Programming in Eclipse
Join Points
Events in the execution of a program
Types of Join Points:
Method & Constructor call
Method & Constructor execution
•
advice execution
Field get & set
Exception handler execution
Static & dynamic initialization
Aspect-Oriented Programming in Eclipse
What’s a Pointcut?
Pointcut
Picks out join points in a particular system
e.g. call of method ‘foo()’, set of field ‘x’, constructor for
object ‘Fred’
Can also expose context from the matched join point
Aspect-Oriented Programming in Eclipse
Types of Pointcuts
Event based - well defined execution points, e.g.
method calls, executions
field gets / sets
exception handling
object and class initialisation
Scoping - only select join points within a certain scope, e.g.
within a set of packages,
within the implementation of a method,
in the control flow of some event (e.g. downstream of an unsecured call)
Context matching - expose context at the join point, e.g.
identity of the caller or target object
exception being handled
value being put into a field
Aspect-Oriented Programming in Eclipse
What’s Advice?
Java code to execute when conditions of a pointcut
are met.
Can be parameterized to process context exposed by
the pointcut
Aspect-Oriented Programming in Eclipse
Types of Advice
before()
Executes before the join point
after() throwing/returning
Executes after the join point, execution can be made
conditional on how join point exits (i.e. with/without
exception)
around()
Executes ‘instead of’ the join point – has a choice about
whether to invoke the original logic
Aspect-Oriented Programming in Eclipse
What is an Aspect?
Aspects are...
At the design level … concerns that crosscut
At the implementation level … a programming construct
Aspect = pointcut + advice
Aspect-Oriented Programming in Eclipse
Demos – AJDT
AspectJ Development Tools (AJDT) for Eclipse
Open Source
Developed in Hursley
Partnership with AspectJ team
http://www.eclipse.org/ajdt
Aspect-Oriented Programming in Eclipse
Demos
Demo 1: A Simple Figure Editor
Demo 2: Web Services Invocation Framework
Aspect-Oriented Programming in Eclipse
Web Services Invocation Framework (WSIF)
Middleware component
Simple Java API for invoking web services, no matter
how or where they are provided
Released to Apache
But IBM wants a version tightly coupled to IBM’s normal
‘qualities of service’
•
IBM tracing/monitoring/management
How do we manage this?
Aspect-Oriented Programming in Eclipse
Exploring Re-Use: The WSIF Story
WSIF for Open
Source Community
org.apache.wsif
+
WebSphere RAS
WebSphere FFDC
WebSphere PMI
Composition
WSIF for
WebSphere
Aspect-Oriented Programming in Eclipse
Applications of AOP
Problem determination
Logging, FFDC, performance monitoring
Architectural rule enforcement
Contracts, encapsulation, separation (no “up calls”)
Other concerns
Security, transactions, persistence, caching/pooling, locking
Open source integration
Aspect-Oriented Programming in Eclipse
Adopting AOP
reward
auxiliary /
exploration
enforcement infrastructure
core /
business
AO Analysis,
AO Design,
AO Strategy
time & confidence
Aspect-Oriented Programming in Eclipse
Further information
AspectJ home page: http://www.eclipse.org/aspectj
AJDT home page: http://www.eclipse.org/ajdt
Pick up a book …
Email us:
Helen Hawkins: [email protected]
Sian January: [email protected]