This is my first book review for Java Developer's Journal. As coauthor of a competing book, I figured I'd be very critical of the author's writing and the book's content. I must admit I'm pleasantly surprised; this is a really good book and, in many ways, better than the book I coauthored.
One of my biggest pet peeves is to walk into a bookstore and see overpriced 1,000-plus page books that are essentially a regurgitation of the manual. Even worse is to see these large books essentially reprint free documentation and expect consumers to pay for it. This book does none of that. Its page count is a healthy 220 pages and it's written in a very easy-to-read style. I went to Amazon to see how competing books are priced, and this is the least expensive. I recommend that everyone interested in JMS pick up a copy.
This book is not written by two guys who got paid by a publisher to rewrite their interpretation of the existing specifications. The two authors, Richard Monson-Haefel and David Chappell, are known in the industry and were actually part of the organizations that contributed to the JMS specification. This gives them great insight about the real intent of JMS. They do a fine job of explaining concepts and subtleties of many of the APIs. One good example is their explanation of when and when not to use the TopicRequestor object.
If you have no prior knowledge of JMS and its purpose, the first chapter gives a complete description of the Java messaging paradigm. Chapter 2 gets into a tutorial about the JMS APIs.
Chapters 3 through 6 cover publish and subscribe messaging, point-to-point messaging, guaranteeing messaging, transactions, acknowledgment, and failures.
Chapter 7 is my favorite, as many books on the market target only developers. This chapter is also useful for architects who need to figure out the right way to design, develop, and deploy Java-based messaging solutions. It covers just the right amount of information on performance, security, and when multicasting versus hub and spoke is appropriate.
Chapter 8 goes into detail on J2EE, EJB and JMS, and describes how JMS can be used with MessageDrivenBeans. I haven't seen this covered in any other book to-date. I suspect that using JMS with EJBs will be a popular method in the future for application development.
No book review would be complete without pointing out a couple of flaws. First, JMS in its next revision will support XML messaging. There are actually several competing standards in progress that could be used with JMS. Maybe a mention of the Java API for parsing (JAXP) and the Java API for XML messaging (JAXM) would have been appropriate. The authors only mention that the future may bring an XMLMessage type, but today stick with the TextMessage type. I found this curious because one of the authors, David Chappell, works for Progress and their product, SonicMQ, actually has XML support built in. I'm not really sure if the author was keeping himself honest in this regard, since he does plug his product elsewhere in the book in subtle ways.
My only other thought is that in Chapter 9, the authors list the different JMS providers but make no mention of a very popular Message Queue product, Microsoft's MSMQ. All of us Java types have a bias toward Microsoft, but they really do have a good product that's worth considering as part of your solution.
Overall, this book is a good source for those who want to know the ins and outs of utilizing message-oriented middleware using JMS. Java Message Service does an admirable job of providing examples that are adaptable to many situations. The authors made the topic understandable. On a scale of 1 to 10, I give this book a 9.5. Java Message Service is an excellent book and an essential item for your library.
James McGovern is a senior technical architect for Enherent Corporation in their software development center in Windsor,
Connecticut, where his focus is on strategy and architecture for high-profile e-business Web sites. He is also a coauthor of several Java-related books.