Summary: This is a well executed and detailed explanation of how to develop modular Java systems and applications using OSGi and Equinox. It uses the development of an easy to follow example application, called Toast, as the vehicle to explain OSGi theory and practice using Equninox. One of the main themes of the book is the whys and hows of OSGi Declarative Services. In general, it is a good book for OSGi beginners, but familiarity with Eclipse is a perquisite. Advanced developers will find it to be a good resource and example of OSGi best practices.
The writing was clear and well edited; you could tell that it had been through many revisions to get it to its current polished state. The step-by-step instructions for the examples was at the right level for me, with enough detail to get things to work without being overly long. For instance, I find that I quickly get the concept of the example, but then I like to be given the details of what to name things and exactly what else to do, so that I can concentrate on the example and keep things moving along.
Another bonus that comes with the book is an Eclipse plug-in that can be installed from the web which includes the source code of all of the examples organized by chapter. It manifests itself as a special view in Eclipse that lists all of the example code. One can use this view to populate the workspace with the example code from any chapter, or, to compare the current workspace contents to the book's example. I found this last feature to be a great help as there were several times where things were not working and I was stuck for a solution. By simply comparing my manually entered version of the example code with the chapter's reference version, I quickly found the small differences that were causing problems and was quickly on my way. This ability is the next best thing to having the authors look over your shoulder and tell you what you did wrong.
I did run into a few issues with the book. There were several times where the steps provided to produce the example code were not complete. These were minor things like a missing dependency specification or in one case a default value produced by a wizard that needed to be explicitly set to something else. Mostly, these were no problem to correct.
Basically, I wasn't disappointed, this is a good book that delivers on what it promises.