Download presentation
Presentation is loading. Please wait.
1
Aspect-Oriented Programming In Eclipse ® Aspect-Oriented Programming in Eclipse with AspectJ Dr Helen Hawkins and Sian January
2
Aspect-Oriented Programming in Eclipse Outline The need for Aspect-Oriented Programming (AOP) An introduction to AspectJ AspectJ Demos Adopting AOP Further information
3
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
4
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
5
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
6
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
7
Aspect-Oriented Programming in Eclipse n-to-1 and n-to-n A consequence of the 1- to-n problem Modules are no longer well defined
8
Aspect-Oriented Programming in Eclipse Code View of n-n 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”); } 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 Tangled Core Logic
9
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
10
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, …
11
Aspect-Oriented Programming in Eclipse AOP Concepts Join points Pointcuts Advice Aspects
12
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
13
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
14
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
15
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
16
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
17
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
18
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
19
Aspect-Oriented Programming in Eclipse Demos Demo 1: A Simple Figure Editor Demo 2: Web Services Invocation Framework
20
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?
21
Aspect-Oriented Programming in Eclipse Exploring Re-Use: The WSIF Story org.apache.wsif WebSphere RAS WebSphere FFDC WebSphere PMI + WSIF for Open Source Community Composition WSIF for WebSphere
22
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
23
Aspect-Oriented Programming in Eclipse Adopting AOP reward time & confidence auxiliary / infrastructure core / business AO Analysis, AO Design, AO Strategy exploration enforcement
24
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: hawkinsh@uk.ibm.com Sian January: sjanuary@uk.ibm.com
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.