Preface
I started using Grails in early 2008, about a month before the 1.0 release. Much has changed since then, but many aspects are still very much the same. Grails continues to be the fastest way to develop an application on the JVM and, as an added bonus, is a lot of fun. Grails saves you a tremendous amount of time by handling the plumbing work that you would ordinarily have to do yourself if you were using another framework, and you can save even more time by using some of the hundreds of plugins that are available. Plus, because you are targeting the JVM, the whole JVM ecosystem is available, and you can use any library that isn’t already included by Grails or a plugin.
I have always had a need to know how things work. Open source software makes that possible, because you can read the code, and it is particularly helpful when debugging since you can step into library and framework code from your IDE. But Grails adds a layer of opacity by providing so much dynamic behavior. All that magic is great when everything works, but when you have problems, it can be hard to know where to even start looking. When I started using Grails, I spent many hours exploring the internals, not only to understand how what I was seeing was possible, but also to determine whether the problems I was seeing were Grails issues or problems in my code. That experience was a large part of the motivation behind writing this book; I hope that by shining a light on some of the inner workings and motivations ...