Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Ajax patterns and best practices
Nội dung xem thử
Mô tả chi tiết
Ajax Patterns and
Best Practices
■■■
Christian Gross
Gross_6161Front.fm Page i Thursday, January 26, 2006 11:54 AM
Ajax Patterns and Best Practices
Copyright © 2006 by Christian Gross
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-13 (pbk): 978-1-59059-616-6
ISBN-10 (pbk): 1-59059-616-1
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: Jonathan Hassell
Technical Reviewer: Paul Tyma
Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Jason Gilmore, Jonathan
Hassell, James Huddleston, Chris Mills, Matthew Moodie, Dominic Shakeshaft, Jim Sumser, Matt Wade
Project Manager: Beth Christmas
Copy Edit Manager: Nicole LeClerc
Copy Editor: Sharon Wilkey
Assistant Production Director: Kari Brooks-Copony
Production Editor: Ellie Fountain
Compositor: Susan Glinert
Proofreader: Elizabeth Berry
Indexer: Broccoli Information Management
Artist: Kinetic Publishing Services, LLC
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.
Gross_6161Front.fm Page ii Thursday, January 26, 2006 11:54 AM
Gross_6161Front.fm Page iv Thursday, January 26, 2006 11:54 AM
v
Contents at a Glance
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
■CHAPTER 1 Introduction to Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
■CHAPTER 2 The Nuts and Bolts of Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
■CHAPTER 3 Content Chunking Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
■CHAPTER 4 Cache Controller Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
■CHAPTER 5 Permutations Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
■CHAPTER 6 Decoupled Navigation Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
■CHAPTER 7 Representation Morphing Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
■CHAPTER 8 Persistent Communications Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . 225
■CHAPTER 9 State Navigation Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
■CHAPTER 10 Infinite Data Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
■CHAPTER 11 REST-Based Model View Controller Pattern . . . . . . . . . . . . . . . . . . 333
■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Gross_6161Front.fm Page v Thursday, January 26, 2006 11:54 AM
vii
Contents
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
■CHAPTER 1 Introduction to Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Pictures Are Worth a Thousand Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Another Ajax Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Ajax Architecture Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
It’s About the Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
It’s About the Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Comparing Ajax to Other Application Types . . . . . . . . . . . . . . . . . . . . . . . . 14
Rich-Client Local Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Rich-Client Web Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Plain-Vanilla Web Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Some Final Thoughts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
■CHAPTER 2 The Nuts and Bolts of Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Ajax for the Impatient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Understanding REST Theory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Implementing the REST Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Implementing the Ajax Application . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Putting Together Ajax and REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Understanding the Ramifications of Ajax and REST . . . . . . . . . . . . . 24
XMLHttpRequest Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Using the Factory Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Defining an XMLHttpRequest Factory. . . . . . . . . . . . . . . . . . . . . . . . . 28
Rewriting the Ajax Application to Use a Factory . . . . . . . . . . . . . . . . 29
Making Asynchronous Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Contents
Gross_6161Front.fm Page vii Thursday, January 26, 2006 11:54 AM
viii ■CONTENTS
Making Practical Use of XMLHttpRequest . . . . . . . . . . . . . . . . . . . . . . . . . 34
Implementing an Asynchronous Calling Mechanism . . . . . . . . . . . . 34
Calling Domains Other Than the Serving Domain. . . . . . . . . . . . . . . 45
Some Final Thoughts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
■CHAPTER 3 Content Chunking Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Applicability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Associated Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Implementing Order in a Web Application . . . . . . . . . . . . . . . . . . . . . 55
Defining the Content Within a Content Chunk . . . . . . . . . . . . . . . . . . 59
Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Implementing the HTML Framework Page . . . . . . . . . . . . . . . . . . . . 60
Injecting Content by Using Dynamic HTML . . . . . . . . . . . . . . . . . . . . 62
Binary, URL, and Image Chunking . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
JavaScript Chunking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Pattern Highlights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
■CHAPTER 4 Cache Controller Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Applicability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Associated Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
HTML and HTTP Cache Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
HTTP Expiration Caching Is a Bad Idea (Generally) . . . . . . . . . . . . . . 84
A Better Approach: Using HTTP Validation . . . . . . . . . . . . . . . . . . . . 84
Some Findings Regarding Server-Side Caching . . . . . . . . . . . . . . . . 86
Defining Static HTTP Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Defining Dynamic HTTP Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Implementing the Passive Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Implementing the Server Side of the HTTP Validator . . . . . . . . . . . 100
Pattern Highlights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Gross_6161Front.fm Page viii Thursday, January 26, 2006 11:54 AM
■CONTENTS ix
■CHAPTER 5 Permutations Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Applicability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Associated Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Understanding Why the Resource Is Separated
from the Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Using Cookies and HTTP Authentication
to Authorize Access Only . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Using Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
An Example Book Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Rewriting URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
An Example Shopping Cart Application . . . . . . . . . . . . . . . . . . . . . . 135
Pattern Highlights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
■CHAPTER 6 Decoupled Navigation Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Applicability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Associated Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Implementing the Action Functionality . . . . . . . . . . . . . . . . . . . . . . . 162
Defining and Implementing the Common Data Functionality . . . . 172
Implementing the Presentation Functionality . . . . . . . . . . . . . . . . . 187
Using HTML Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Pattern Highlights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
■CHAPTER 7 Representation Morphing Pattern . . . . . . . . . . . . . . . . . . . . . . . 197
Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Applicability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Associated Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Gross_6161Front.fm Page ix Thursday, January 26, 2006 11:54 AM
x ■CONTENTS
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Basic Theory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Why the Pattern Is Not an HTML Component . . . . . . . . . . . . . . . . . 205
Defining Blocks of State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Implementing the Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Implementing the Representation Reference Points. . . . . . . . . . . . 213
Some Implementation Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Pattern Highlights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
■CHAPTER 8 Persistent Communications Pattern . . . . . . . . . . . . . . . . . . . . 225
Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Applicability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Associated Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Why the Internet Is “Broken”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Implementing a Polling Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Example: A Global Status Resource . . . . . . . . . . . . . . . . . . . . . . . . . 233
Example: Presence Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Example: Server Push . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Version Numbers and Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Performance Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Pattern Highlights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
■CHAPTER 9 State Navigation Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Applicability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Associated Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Moving Toward an Ideal Solution from the User’s Perspective . . . 268
Extending the Solution for a Web Application . . . . . . . . . . . . . . . . . 272
Managing State at the Protocol Level. . . . . . . . . . . . . . . . . . . . . . . . 277
Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Processing the Requests on the Client. . . . . . . . . . . . . . . . . . . . . . . 281
Processing the Requests on the Server . . . . . . . . . . . . . . . . . . . . . . 291
Pattern Highlights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Gross_6161Front.fm Page x Thursday, January 26, 2006 11:54 AM
■CONTENTS xi
■CHAPTER 10 Infinite Data Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Applicability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Associated Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Implementing the HTML Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Implementing the Task Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Pattern Highlights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
■CHAPTER 11 REST-Based Model View Controller Pattern . . . . . . . . . . . . 333
Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Applicability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Associated Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
The Big Picture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Defining an Appropriate Resource . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Defining the Calling Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Defining the Data Format Foundation and the Extras. . . . . . . . . . . 343
Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Implementing a Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Creating a Search Engine Client Infrastructure . . . . . . . . . . . . . . . . 350
Putting All of the Pieces Together. . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Pattern Highlights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Gross_6161Front.fm Page xi Thursday, January 26, 2006 11:54 AM
Gross_6161Front.fm Page xii Thursday, January 26, 2006 11:54 AM
xiii
About the Author
■CHRISTIAN GROSS is a consultant/trainer/mentor with vast experience
in the Internet paradigm. He has worked on software development and
other solutions for many corporations, including Altova, Daimler-Benz,
Microsoft, and NatWest. Gross has written multiple books, including
Applied Software Engineering Using Apache Jakarta Commons, Open
Source for Windows Administrators, A Programmer’s Introduction to
Windows DNA, and Foundations of Object-Oriented Programming
Using .NET 2.0 Patterns. He has been a regular speaker at many
conferences, including Software Development, JAX, and BASTA, and
has been track chair at many conferences as well.
Gross_6161Front.fm Page xiii Thursday, January 26, 2006 11:54 AM
Gross_6161Front.fm Page xiv Thursday, January 26, 2006 11:54 AM
xv
About the Technical Reviewer
■PAUL TYMA is president of Outscheme, Inc., a software consultancy based in Silicon Valley.
He received his Ph.D. in Computer Engineering from Syracuse University with a research focus
in dynamic language performance. Paul is a frequent industry writer, including lead author of
the book Java Primer Plus, the “VM Roadtest” Java VM column in Java Pro magazine, and various
articles in Dr. Dobb’s Journal and Communications of the ACM.
Gross_6161Front.fm Page xv Thursday, January 26, 2006 11:54 AM
Gross_6161Front.fm Page xvi Thursday, January 26, 2006 11:54 AM