
- •brief contents
- •contents
- •foreword
- •preface
- •acknowledgments
- •about this book
- •Roadmap
- •Code conventions and downloads
- •Author Online
- •About the author
- •about the cover illustration
- •1 Why add Groovy to Java?
- •1.1 Issues with Java
- •1.1.1 Is static typing a bug or a feature?
- •1.1.2 Methods must be in a class, even if you don’t need or want one
- •1.1.3 Java is overly verbose
- •1.1.4 Groovy makes testing Java much easier
- •1.1.5 Groovy tools simplify your build
- •1.2 Groovy features that help Java
- •1.3 Java use cases and how Groovy helps
- •1.3.1 Spring framework support for Groovy
- •1.3.2 Simplified database access
- •1.3.3 Building and accessing web services
- •1.3.4 Web application enhancements
- •1.4 Summary
- •2 Groovy by example
- •2.1 Hello, Groovy
- •2.2 Accessing Google Chart Tools
- •2.2.1 Assembling the URL with query string
- •2.2.2 Transmitting the URL
- •2.2.3 Creating a UI with SwingBuilder
- •2.3 Groovy Baseball
- •2.3.1 Database data and Plain Old Groovy Objects
- •2.3.2 Parsing XML
- •2.3.3 HTML builders and groovlets
- •2.4 Summary
- •3 Code-level integration
- •3.1 Integrating Java with other languages
- •3.2 Executing Groovy scripts from Java
- •3.2.1 Using JSR223 scripting for the Java Platform API
- •3.2.2 Working with the Groovy Eval class
- •3.2.3 Working with the GroovyShell class
- •3.2.4 Calling Groovy from Java the easy way
- •3.2.5 Calling Java from Groovy
- •3.3 Summary
- •4 Using Groovy features in Java
- •4.1 Treating POJOs like POGOs
- •4.2 Implementing operator overloading in Java
- •4.3 Making Java library classes better: the Groovy JDK
- •4.4 Cool AST transformations
- •4.4.1 Delegating to contained objects
- •4.4.2 Creating immutable objects
- •4.4.3 Creating singletons
- •4.5 Working with XML
- •4.6 Working with JSON data
- •4.7 Summary
- •5 Build processes
- •5.1 The build challenge
- •5.2 The Java approach, part 1: Ant
- •5.3 Making Ant Groovy
- •5.3.1 The <groovy> Ant task
- •5.3.2 The <groovyc> Ant task
- •5.3.3 Writing your build in Groovy with AntBuilder
- •5.3.4 Custom build scripts with Gant
- •5.3.5 Ant summary
- •5.4 The Java approach, part 2: Maven
- •5.4.2 The GMaven project
- •5.4.3 Maven summary
- •5.5 Grapes and @Grab
- •5.6 The Gradle build system
- •5.6.1 Basic Gradle builds
- •5.6.2 Interesting configurations
- •5.7 Summary
- •6 Testing Groovy and Java projects
- •6.1 Working with JUnit
- •6.1.1 A Java test for the Groovy implementation
- •6.1.2 A Groovy test for the Java implementation
- •6.1.3 A GroovyTestCase test for a Java implementation
- •6.2 Testing scripts written in Groovy
- •6.2.1 Useful subclasses of GroovyTestCase: GroovyShellTestCase
- •6.2.2 Useful subclasses of GroovyTestCase: GroovyLogTestCase
- •6.3 Testing classes in isolation
- •6.3.1 Coerced closures
- •6.3.2 The Expando class
- •6.3.3 StubFor and MockFor
- •6.4 The future of testing: Spock
- •6.4.1 The Search for Spock
- •6.4.2 Test well, and prosper
- •6.4.4 The trouble with tribbles
- •6.4.5 Other Spock capabilities
- •6.5 Summary
- •7 The Spring framework
- •7.1 A Spring application
- •7.2 Refreshable beans
- •7.3 Spring AOP with Groovy beans
- •7.4 Inline scripted beans
- •7.5 Groovy with JavaConfig
- •7.6 Building beans with the Grails BeanBuilder
- •7.7 Summary
- •8 Database access
- •8.1 The Java approach, part 1: JDBC
- •8.2 The Groovy approach, part 1: groovy.sql.Sql
- •8.3 The Java approach, part 2: Hibernate and JPA
- •8.4 The Groovy approach, part 2: Groovy and GORM
- •8.4.1 Groovy simplifications
- •8.5 Groovy and NoSQL databases
- •8.5.1 Populating Groovy vampires
- •8.5.2 Querying and mapping MongoDB data
- •8.6 Summary
- •9 RESTful web services
- •9.1 The REST architecture
- •9.3 Implementing JAX-RS with Groovy
- •9.4 RESTful Clients
- •9.5 Hypermedia
- •9.5.1 A simple example: Rotten Tomatoes
- •9.5.2 Adding transitional links
- •9.5.3 Adding structural links
- •9.5.4 Using a JsonBuilder to control the output
- •9.6 Other Groovy approaches
- •9.6.1 Groovlets
- •9.6.2 Ratpack
- •9.6.3 Grails and REST
- •9.7 Summary
- •10 Building and testing web applications
- •10.1 Groovy servlets and ServletCategory
- •10.2 Easy server-side development with groovlets
- •10.2.1 A “Hello, World!” groovlet
- •10.2.2 Implicit variables in groovlets
- •10.3.2 Integration testing with Gradle
- •10.3.3 Automating Jetty in the Gradle build
- •10.4 Grails: the Groovy “killer app”
- •10.4.1 The quest for the holy Grails
- •10.5 Summary
- •A.1 Installing a JDK
- •A.2 Installing Groovy
- •A.3 Testing your installation
- •A.4 IDE support
- •A.5 Installing other projects in the Groovy ecosystem
- •B.1 Scripts and the traditional example
- •B.2 Variables, numbers, and strings
- •B.2.1 Numbers
- •B.2.2 Strings and Groovy strings
- •B.3 Plain Old Groovy Objects
- •B.4 Collections
- •B.4.1 Ranges
- •B.4.2 Lists
- •B.4.3 Maps
- •B.5 Closures
- •B.6 Loops and conditionals
- •B.6.1 Loops
- •B.6.2 Conditionals
- •B.6.3 Elvis
- •B.6.4 Safe de-reference
- •B.7 File I/O
- •B.8.1 Parsing and slurping XML
- •B.8.2 Generating XML
- •B.8.3 Validation
- •B.9 JSON support
- •B.9.1 Slurping JSON
- •B.9.2 Building JSON
- •index
- •Symbols

acknowledgments
To paraphrase the great American poet Jerry Garcia, what a long, strange trip this has been! Making Java Groovy has consumed several years of my life, a fact that leaves me both horrified and endlessly amused. What I do know for sure, is that even though I’m the sole author, I never could have done it alone.
In late 2006, I attended a user group presentation11 by Jason Rudolph on Grails that changed my life. He started me on my way into the wonderful world of Groovy. The fact that Dierk König et al. had written the fantastic Groovy in Action (Manning, 2007) sealed the deal.
I owe a great debt of gratitude to Dierk König, Guillaume Laforge,12 Paul King,13 and the other members of the Groovy core team for teaching me how much fun it can be to code in Groovy, through their writings, examples, and, at times, direct assistance. I want to express my heart-felt appreciation to Guillaume for contributing the foreword to my book.
Many members of the Grails team have been just as kind and helpful, and I want to specifically mention Graeme Rocher, Jeff Brown, Peter Ledbrook, and Burt Beckwith. This is a common theme in the Groovy world: I’ve never met so many incredibly
11I think it was the Spring User Group in Philadelphia. Seriously, support your local Java/Groovy/Grails user groups. They’re a great source of knowledge, networking, and experience.
12Note the lowercase f. He’s not Geordi, although I do occasionally call him Bill.
13Because he and I have PhDs and work with Groovy, we’re groovydocs together. Russel Winder is one, too.
xix
www.it-ebooks.info

xx |
ACKNOWLEDGMENTS |
humble, brilliant14 people in my life. Andres Almiray also fits into that category, and I feel privileged to know him and his wife Ixchel Ruiz.
I’ve been very happy to learn from other developers involved in Groovy projects in one form or another, including Dean Iverson, Cédric Champeau, Dave Klein (and the rest of the Klein group), Hans Dockter, Peter Niederwieser, Marco Vermeulen, Hamlet D’Arcy, Luke Daley, Bobby Warner, Colin Harrington, Jim Shingler, Danno Ferrin, Scott Davis, Glen Smith, Adam Murdoch, Chris Judd, Tim Yates, Marc Palmer, Rob Fletcher, Andrew Eisenberg, Russel Winder, and the indefatigable Hubert A. Klein Ikkink.
Over the past few years, I’ve become an active participant on the No Fluff Just Stuff Conference Tour15 and will always be grateful to Jay Zimmerman for giving me that opportunity. My list of NFJS colleagues and friends has to start with Nate Schutta for a variety of technical and non-technical reasons, but I’m always happy to learn from (and just hang out with) Venkat Subramaniam, Ken Sipe, Matt Stine, Brian Sletten, Mark Richards, Pratik Patel, Matthew McCullough, Tim Berglund, Neal Ford, Peter Bell, Craig Walls, Brian Sam-Bodden, Andy Painter, Paul Rayner, Daniel Hinojosa, Doug Hawkins, Jim Harmon, Stuart Halloway, Raju Gandhi, Jeremy Deane, and David Bock.
As friends and allies, I want to mention Mike Kimsal (editor of GroovyMag), Shawn Hartsock, Steve Heckler, Nat Dunn, Will Provost, and especially Chris Stone, who has been a friend and accomplice for much longer that than either of us care to admit. I also need to single out Sandra Hartdagen for special attention. She contributed both perspective and wisdom on a regular basis.
I want to thank the people at Manning for all their assistance as well. Cynthia Kane is everything I ever wanted in an editor. She continually came up with insightful suggestions that fix problems in ways that never would have occurred to me. I also want to mention Dan Robb, who has been a good friend longer than he has been at Manning. My copyeditor, Melinda Rankin, was not only efficient and effective; she even got my science fiction references. Thanks also to everyone at Manning who worked on my book behind the scenes.
Thanks to the following reviewers who read the manuscript at different stages of its development for their helpful insights and comments: Al Scherer, Benjamin Muschko, Bill Fly, Brandon Harper, Dan Alford, Dan Sline, Dave Klein, Domingo Torres, George Jempty, Gorden Dickens, Greg Helton, Hien Luu, Joshua White, Marina Chernyavska, Martin Senne, Michael Smolyak, Oleksandr Alesinskyy, Sean Reilly, Stephen Harrison, Tariq Ahmed, Tim Vold, and Tom Fulton.
I need to make a special reference to Valentin Crettaz, who did a full technical proofread shortly before the book went into production. His review gave me a “Michael Corleone in The Godfather: Part III” moment,16 and his feedback and sug-
14Given my academic background, trust me, I know what brilliant looks like.
15That’s http://nofluffjuststuff.com, coming soon to a city near you.
16“Just when I thought I was out, they pull me back in!”
www.it-ebooks.info

ACKNOWLEDGMENTS |
xxi |
gestions made the book so much better I almost don’t recognize it. He is simply the best there is.
I am most grateful to my wife Ginger for her unending support and endurance throughout the entire grueling writing process.17 My son Xander tolerated my absences and lame geek humor with only a moderate number of eye rolls. Honestly, if I could have been the rock star every kid dreams of being, he’s the model I would have followed. I love you both with all my heart.
17For example, one day I was reading my email and noticed there was a monthly list of recommended books from Amazon.com. I wondered idly out loud how I could get my book on that list, when from the kitchen I suddenly heard a rather exasperated, “Write it!” burst forth. Sigh.
www.it-ebooks.info