50756 FRONT.fm Page i Friday, August 12, 2005 6:56 PM Foundations of AOP for J2EE Development Renaud Pawlak, Lionel Seinturier, and Jean-Philippe Retaillé 50756 FRONT.fm Page ii Friday, August 12, 2005 6:56 PM Foundations of AOP for J2EE Development Copyright © 2005 by Renaud Pawlak, Lionel Seinturier, and Jean-Philippe Retaillé All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher. ISBN: 1-59059-507-6 Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1 Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. Lead Editor: Steve Anglin Technical Reviewer: Houman Younessi Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Tony Davis, Jason Gilmore, Jonathan Hassell, Chris Mills, Dominic Shakeshaft, Jim Sumser Associate Publisher: Grace Wong Translator: Chelsea Creekmore Project Manager: Sofia Marchant Copy Edit Manager: Nicole LeClerc Copy Editors: Linda Harmony, Ami Knox, Nicole LeClerc Assistant Production Director: Kari Brooks-Copony Production Editor: Katie Stence Compositor and Artist: Wordstop Technologies Pvt. Ltd., Chennai Proofreader: Elizabeth Berry Indexer: John Collin Interior Designer: Van Winkle Design Group Cover Designer: Kurt Krames Manufacturing Director: Tom Debolski Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or visit http://www.springeronline.com. For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA 94710. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit http://www.apress.com. The information in this book is distributed on an “as is” basis, without warranty. Although every precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work. The source code for this book is available to readers at http://www.apress.com in the Source Code section. 50756 FRONT.fm Page iii Friday, August 12, 2005 6:56 PM To our families and friends 50756 FRONT.fm Page iv Friday, August 12, 2005 6:56 PM 50756 FRONT.fm Page v Friday, August 12, 2005 6:56 PM Contents at a Glance Foreword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xv About the Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xvii About the Technical Reviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi ■ CHAPTER 1 Introducing AOP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 ■ CHAPTER 2 The Concepts of AOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 ■ CHAPTER 3 AspectJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23 ■ CHAPTER 4 Java Aspect Components. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 ■ CHAPTER 5 JBoss AOP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 ■ CHAPTER 6 Spring AOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113 ■ CHAPTER 7 AOP Tools Comparison. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 ■ CHAPTER 8 Design Patterns and AOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 ■ CHAPTER 9 Quality of Service and AOP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171 ■ CHAPTER 10 Presentation of the Sample Application . . . . . . . . . . . . . . . . . . . . . . . 205 ■ CHAPTER 11 Using AOP within the Sample Application’s Business Tier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 ■ CHAPTER 12 Using AOP in the Sample Application’s Presentation and Client Tiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 ■ INDEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 v 50756 FRONT.fm Page vi Friday, August 12, 2005 6:56 PM 50756 FRONT.fm Page vii Friday, August 12, 2005 6:56 PM CCoonntteennttss Foreword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xv About the Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xvii About the Technical Reviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi ■ CHAPTER 1 Introducing AOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Looking at Programming Paradigms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 The Origins of AOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 OOP: A Promising Paradigm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 The Limitations of OOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 The Case of Crosscutting Functionalities . . . . . . . . . . . . . . . . . . . . . . . 4 The Case of Code Scattering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 The Benefits of AOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 ■ CHAPTER 2 The Concepts of AOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 The Concept of an Aspect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Code Scattering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 A New Dimension in Modularity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Aspect Weaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Joinpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Different Types of Joinpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Pointcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Advice Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Different Types of Advice Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 The Introduction Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Aspect Composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Weaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 vii 6aca86c9b287d09628f16d0839d54ded 50756 FRONT.fm Page viii Friday, August 12, 2005 6:56 PM viii ■ CONTENTS ■ CHAPTER 3 AspectJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 A First Application with AspectJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 The Order-Management Application . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 A First Trace Aspect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 A First Pointcut Descriptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 A First Piece of Advice Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Compiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Running . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Pointcut Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Wildcards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Joinpoint Introspection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Defining Joinpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Pointcut Parameterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Summary of Pointcut Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Advice Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 The Code of an Advice Code Block . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 The Different Types of Advice Code . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Advice Code and Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 The Introduction Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Fields, Methods, and Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Inherited Classes and Implemented Interfaces . . . . . . . . . . . . . . . . . 48 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Advanced Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 The Abstract Aspect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Aspect Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Aspect Instantiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Aspect Ordering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 The Privileged Aspect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Declaring Warnings and Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Load-Time Weaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 New Features in AspectJ 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Working with Annotations in Aspects . . . . . . . . . . . . . . . . . . . . . . . . . 53 Defining Aspects with Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Aspect Instantiation in AspectJ 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Other Java 5 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 50756 FRONT.fm Page ix Friday, August 12, 2005 6:56 PM ■ CONTENTS ix ■ CHAPTER 4 Java Aspect Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Creating a First JAC Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Creating a First Aspect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Compiling a JAC Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Running a JAC Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Creating Pointcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Pointcut Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Associating a Wrapper with a Pointcut . . . . . . . . . . . . . . . . . . . . . . . . 71 Creating Wrappers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Joinpoint Introspection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Wrapper Chains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Configuring Aspects and JAC Applications . . . . . . . . . . . . . . . . . . . . . . . . . 75 Configuring Aspects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Configuring JAC Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Using the Introduction Feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Role Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Exception Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Using the JAC Aspects Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Using the User-Interface Aspects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Using the Persistence and Transaction Aspects . . . . . . . . . . . . . . . . 83 Using the Distribution Aspects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Using Other Aspects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Programming in UMLAF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Advanced Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Aspect Instantiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Aspect Ordering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 RTTI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Object Naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Run Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 ■ CHAPTER 5 JBoss AOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Using JBoss AOP: An Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 A First Trace Aspect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 A First Pointcut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 A First Interceptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Compiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Running . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Description: