March 15, 2020 | Download a PDF of this article
One of the questions readers might ask is: Why do I primarily review books to which I give positive reviews? The answer is found in a dictum known as Sturgeon’s Law.
Theodore Sturgeon was an American science-fiction writer, who was part of a panel at a convention in 1951 and was asked by an attendee why 90% of science fiction is garbage. He replied, “90% of everything is crud.” I view this ratio as being true of programming books as well. So, part of my job is to select books worthy of your time and describe their benefits and drawbacks, rather than spending time castigating books that aren’t worth a look. The notable exception to this rule would be a bad book written by a famous author. I would want to share that the volume was not up to the author’s usual standards. But with that exception, I do focus on the books that are worthy of your time and money.
This triage means that I generally favor books from publishers or imprints who have earned good reputations, such as O’Reilly, Manning, Pearson/Addison-Wesley, Wiley, Pragmatic Programmers, and very few others. Rarely do I include books from publishers not in the top tier; however, the volume being reviewed here, which is published by Packt, is a notable exception due in large part to the expertise of the author, David Heffelfinger, a Java Champion and established cognoscente in Java EE programming.
Heffelfinger’s book is an overview of Java EE 8. It is easy to overlook Java EE 8 because of the delay in its release and the subsequent advent of Jakarta EE. But as the recent article in this magazine elegantly explained, much of what is in Java EE 8 is applicable to Jakarta EE with only minor tweaks.
In his book, Heffelfinger goes over each of the major Java EE technologies, emphasizing the components that were introduced or substantially upgraded in Java EE 8. For example, the new CDI 2.0 implementation receives a full 20-page discussion, and the then-new JSON-B receives another 20 pages. Persistence via Java Persistence API (JPA) 2.2 is accorded 40 pages. Other topics include JavaServer Faces (JSF) 2.3, EJB 2.2, Java Message Service (JMS) 2.0, JAX-RS 2.1, Servlet 4.0, and their many related technologies, such as WebSocket.
The chapters present small standalone applications for which the majority of code is made available in the publisher’s download area. Only the illustrative snippets are shown and explained in the book. This makes for easy reading.
In addition to the constituent technologies of Java EE 8, Heffelfinger also develops a microservice implementation built on Payara Micro and discusses the issues around shoehorning Java EE into small footprints. However, he does not cover the Eclipse MicroProfile project, which had only just come into being at the time this book was published.
Heffelfinger’s writing is clear and he generally provides the information you need. However, there are some areas for concern and some occasional sloppiness. In the former category are some out-of-date recommendations in the JSF chapter, such as to urge the reader to use tables throughout. This is an old approach that has been universally replaced today by the use of CSS in HTML5.
The omission of conditional rendering is a more serious omission; even the poor man’s solution to conditional rendering, the
<c:if> tag, is never mentioned. So, insofar as JSF is concerned, readers will be not be up to date on the best practices, even though they will understand the advances in the technology itself.
There were occasional sloppy errors in the book. For example, the section on JMS mistakenly believes the acronym stands for “Java Messaging Service,” and so prints that incorrect wording as the header on all its pages. Like the other errors, this one will not interfere with the main instruction, but it is disquieting.
Overall, I found the book to be useful and a surprisingly pleasant read. It is not quite introductory enough for a Java programmer wishing for a beginner’s primer on Java EE or Jakarta EE. However, it is ideal for Java enterprise developers whose knowledge stops at an earlier release of Java EE and who want to come up to speed on what has changed since then.