70 of 71 people found the following review helpful
on November 28, 2004
I've read this book several times since the day it shipped and I have to say that this is an excellent book for anyone working as a developer or architect working in the Enterprise Java arena. I absolutely love this book given my bias - I guess I should start by stating my bias. EJB bashing is a favorite past time of a lot of people. I happen to love EJB's, with the exception of entity beans and think EJB's are a great way to create software solutions are remotable, loosely coupled and powerful. I will agree that EJB's are way too complicated with all the stupid artifacts that you need to create to create and deploy an EJB. Having worked with EJB's since 1999, I guess I am so used to all of nuances of EJB's, I can write up deployment descriptors in my sleep. Having said that, I approached this book with a little apprehension as I hate these EJB-sucks book that don't really offer any intelligent discussion about the shortcomings of EJB nor do they offer a viable alternative. Another assumption I brought to the book was that this was just a Spring book with a little EJB bashing thrown in for good measure.
To my pleasant surprise, Rod Johnson and Juergen Hoeller have written an awesome book. This book does not take cheap shots - Instead there is a intelligent, thought provoking discussion about the pros and cons of EJB. In fact, the first 120 pages (Chapter 1-5) are just a great breakdown of application architecture with a through treatment of EJB. I loved this section and re-read it several times and I found myself agreeing with pretty much everything in this section. I would equate this to a great meaningful discussion you would have with someone who really understood application architecture and development and you could debate the pros and cons of the many alternative approaches that exist today.
Chapter 6 starts the discussion of Lightweight Containers and the idea of Inversion of Control (IoC). This is not a chapter on Spring; rather it is an overview of Inversion of Control and strategies like Dependency Injection in the context of Spring and PicoContainer.
The next chapter offers a quick introduction to the Spring Framework. As everyone already knows, the Spring Framework is a very popular open source application framework created by Rod Johnson. The co-author Juergen Hoeller is another lead developer of Spring. The chapter is Spring is fairly light and people hoping for a in-depth Spring tutorial will be disappointed. Instead this chapter offers a rather high-level overview that will get you some basic understanding of the Spring Framework. I guess it's hard to cover Spring in 43 pages.
After the cursory introduction to Spring, the book moves into Aspect-Orientated programming (AOP) concepts. This section starts with a very introduction to AOP before jumping into AOP implementation strategies. After a brief discussion of AspectJ, AspectWerkz, and JBoss AOP, the authors move into SpringAOP. After AOP, the books moves into Transaction Management where current J2EE approaches are discussed and then contrasted with the Spring approach.
Review trimmed to comply with Amazon's review guildlines for length. For more details, check my blog at j2eegeek dot com.
51 of 52 people found the following review helpful
on July 17, 2004
Format: PaperbackVerified Purchase
Rod Johnson is doing a great service to the J2EE technical community with his books. This latest book is definitely a myth buster, that I was personally looking for.
I will tell you right away that this is not an anti-EJB book
that tries to prove you a case against EJBs. This is not a
cheap "Spring" framework promotion book either. This is a very mature expert one-on-one advice that is well worth getting.
Rod gives you a nicely rounded manual how to architect solid J2EE application using the latest and greatest practical solutions available both through the open source and JSR community. He propagates two extremly important ideas:
Lightweight containers and (simplified) Aspect Oriented Programming. Moreover, ha makes a very strong case for the application of Inversion of Control principle (IoC) in your applications. If you are not familiar with IoC: I see it pretty much as a savior to a J2EE technology. J2EE grew incredibly big, complex and fluffy in the recent years, and is at risk of being outflanked by more simplistic .NET solutions.
IoC offers "back to basics" approach where you as a good OO architect focus on the solid business domain model without poluting it with the infrastructure code. Through IoC supporting methods (such as Aspects) you then externalize the infrastructural pieces (transactions, pooling, persitence, logging, auditing,...) that make you apps run in the enterprise environement.
Rod's book gave me a very good basis for the creation of my own state-of-the-art J2EE solution and I am grateful for it. It is the best thirty-some dollars that I spent in the long time.
One more thing, this book in NOT a re-write of his previos book "J2EE Design and Development". I have both and they are not the same. I think you have to have both on your bookshelf in order to get the full treatment.
17 of 17 people found the following review helpful
on July 6, 2004
This book builds a great case for an EJB-less architecture, the arguments and points are layed out very carefully and very well. A different architecture is presented, with plenty of help on how to get the benefits of an EJB container without the pain. Unlike many other books in which the author seems to hope you will take his or her advice simply because it is in print, Johnson and Hoeller back everything up. The book flows well, and contains very few mistakes that I have noticed (and those were very minor editing slips). I hope to see more from these authors. In the meantime, I guess I can chuck all those EJB patterns books on the shelf and just put this in there...
19 of 21 people found the following review helpful
on July 29, 2004
This book is a gem. Authors cover extremely well number of subjects that J2EE application architects have to deal with every day. They do not only describe problems associated with 'classic' J2EE architectures and innapropriate use of EJB, but also present very elegant solutions to them.
Chapters 1 and 2 explain why 'EJB does not equal J2EE' and why it is not appropriate for many applications. They also cover developer productivity issues when using EJB and explain why object orientation shouldn't be sacrificed so easily. There is also a section on 'phantom requirements', that architects often introduce into the system in order to boost their own egos, even though there are no real business requirements to support that decision.
Chapter 3 compares various J2EE architectures using several widely available sample applications, while Chapter 4 covers the importance of simplicity in application architecture and design. In addition to technical reasons for unnecessary complexity in many J2EE application, authors cover something that is not addressed very often -- cultural reasons for complexity. Everyone who worked on a large project will be able to relate to at least some of the problems described and get some consolation from the fact that he's not the only one dealing with such political bs.
Chapter 5 looks at EJB in retrospective and describes where it failed, where it succeeded, what we want and what we don't want from it. It also touches on EJB 3.0 and why it will be 'too little, too late'.
Chapter 6 describes concepts of Lightweight Containers and Inversion of Control (IoC). It explains why we need containers, what their advantages over EJB are and how they enable clean separation of interface and implementation. Various IoC (or Dependency Injection) strategies are described, as well as their implications on coding style, testing and development process.
Chapter 7 introduces Spring Framework, that will be used to implement replacements for various EJB features throughout the rest of the book. It covers basic Spring concepts, such as Bean Factory, Application Context and Resources and lays a solid foundation for the rest of the book.
Chapter 8 provides an excellent introduction to Aspect Oriented Programming (AOP), describes various AOP implementation startegies and explains how AOP is implemented and used in Spring.
Chapter 9 builds on previous chapter and shows how declarative transaction management can be handled using Spring's AOP implementation. This chapter is one of the places where Spring's flexibility and configuration really shine, with authors showing how application can be scale to use JTA transactions instead of local transactions by simply modifying configuration file. Extremely cool stuff.
Chapter 10 continues to impress the reader, by showing how several different persistence technologies can be used within Spring and how much Spring simplifies their usage. It also explains why and how data access technology should be chosen at the beginning of the project based on application requirements, and why it is usually not worth the effort to design portable DAO interfaces.
Chapter 11 explains how Spring can be used to both simplify access to remote objects and to expose business interfaces as remote objects. Technologies covered are RMI, EJB, JAX-RPC and Caucho's Hessian and Burlap.
Chapter 12 addresses other EJB services, such as thread management, instance pooling and declarative security and explains why they are not always as good or necessary as people believe them to be.
Chapter 13 takes us through web tier design, explains MVC concept and shows how various popular MVC frameworks (Struts, WebWork2 and Spring web MVC) can be used in conjuction with Spring to build web applications. This chapter is probably the only one I am not completely satisfied with. While it does show how to use different frameworks with Spring, it doesn't have a single example of how data binding between web forms and command objects is defined. On the other hand, book is not about Spring web MVC, but about replacement for various EJB fetures. My opinion is that this chapter could easily be expanded into a book on its own, that would walk reader through the whole process of building a typical Spring web application (hopefully something more realistic than JPetStore sample).
Chapter 14 covers unit testing and TDD. It is one of the best introductions to TDD that I have seen and contains a number of very practical advices for different testing scenarios, including how to make application more testable, when and how to use stubs and mock objects, etc.
Chapter 15 addresses performance and scalability, again from a very practical point of view. It covers architectural choices that can significantly impact performance, application tuning, benchmarking and profiling among other things.
Chapter 16 puts many of the previous topics together and improves iBATIS JPetStore application by implementing Spring middle tier, Struts and Spring web tiers, and exposing remote services using Spring. Overall, not a very exciting application to look at, but it does show how various pieces of the puzzle fit together and how easy it is to integrate various MVC, view, persistence and remoting technologies into Spring applications.
Chapter 17 wraps things up and provides a valuable set of guidelines for architecture in general, programming style, IoC, AOP and testing.
Overall, I was very impressed with the authors' topic coverage and no-nonsense approach. I do not agree with the comment that 50% of the book is rehash of J2EE Development and Design and other 50% is in Spring Reference Guide. While this book does refer to J2EE D&D in many places, it reads more like a sequel to it, with author's updated thoughts on many topics. Things that are repeated are the ones that should probably be repeated in *every* book on J2EE architecture and design.
At the same time, this book is very different from Spring Reference Guide because it does not really focus on Spring features and APIs per se. It does cover much of Spring, but in a very different context, showing how lightweight framework such as Spring can be used to easily replace EJB features that many people think would be hard to replace.
Objection could be made that book is strongly biased towards Spring, but in reality, only Spring offers complete replacement for all the services authors describe in the book. While there are other solutions to individual problems (and authors do mention them and give credit where it's due), only Spring offers all of them as a one-stop-shop. That, and a fact that authors are leads for the Spring Framework, more than justifies use of Spring throughout the book.
17 of 19 people found the following review helpful
on August 1, 2004
Format: PaperbackVerified Purchase
My love affair with Java has lasted six years now. With enterprise architecture being the way to go, I've been reading about J2EE development using EJB for several months, trying to get my head around why simple things are made so hard using EJB. I was dreading training my developers in Java, and then having to show them EJB and figure out ways to help them be productive.
This book (and the Spring framework) are the light at the end of the tunnel. The concepts are grounded in commonly accepted best practices for application development, the arguments for the implementations chosen are sound, and the implementations themselves are simple and fast. Not to mention, the entire framework has been designed so that you can drop it at any moment and move on to the next big thing when it arrives. Try getting that out of an EJB implementation.
Spring has given me hope for enterprise Java development. If you are at all interested in simplifying your life as a Java developer and have become disillusioned or disappointed with EJB, then this book is a must have.
12 of 13 people found the following review helpful
on August 22, 2004
Format: PaperbackVerified Purchase
This is a J2EE good book for software architects and senior software engineers aspiring to be software architects.
This is the second book in a series of 3, the first being Expert One-on-One J2EE Design and Development (Programmer to Programmer) and the final being Professional Java Development with the Spring Framework.
While the promises of J2EE have been busted long ago, this book clearly articulates why and better still, suggests reasonable and sound alternatives.
I find it repetitive in most areas; some people may feel repetition drives home the message, but it just gets tedious for me.
And although the bookcover promises to be more code intensive, I find it not to be. But then again, this is a book about architectural decisions and solutions for J2EE; and not about how to program.
7 of 7 people found the following review helpful
on July 21, 2004
This is a well-written book containing a wealth of concrete information about how to implement an agile J2EE application, both in terms of general architecture, and actual technology.
For every layer in an application, the book generally discusses viable alternatives in terms of architecture and technology, and then the reader is shown workable solutions based on general architectural/design best practices. The solutions often leverage the Spring framework, but there is never a sense that the Spring approach is pushed to the exclusion of others that are equally as viable.
There is significant discussion on lightweight containers and Inversion of Control, and why these concepts, put together with other practices such as test driven development and unit testing in general, lead to an agile application and agile development process. In fact, it is in light of this discussion about agility and lightweight processes that EJBs are shown as a generally best-avoided (compared to the alternatives) technology. Other areas covered, which are relevant to the whole app, are aspect oriented programming, and performance and scalability concerns.
As a working J2EE architect for many years, this book would be, along with perhaps a text on general OO design (i.e. Applying UML and Patterns by Craig Larman), one of my first recommendations for team members embarking on a J2EE project to buy and fully understand.
I feel I must also respond to the one star review, which while admitting that the book is well written, complains about repeated material from Rod's previous book, and that the Spring information is mainly from the framework reference document. W/regards to the repeated material, I think there is plenty of new material. The book stands on its own, and stands well. A lot of things have changed in the intervening years. Aspect oriented-programming, for example, has enabled whole new approaches to doing things such as declarative transactions. W/regards to the comment about 'remaining 50% is mainly from the framework reference document', as a contributor to the Spring reference documentation, I can objectively say this is complete BS. The Spring reference documentation mostly tries to be a _reference_ doc for Spring APIs and features. This book shows you why and how you can use Spring, at the big picture level and diving down into details as necessary, in the context of discussion about best architectures, designs, and related concerns for J2EE apps.
10 of 12 people found the following review helpful
on July 26, 2005
In 2004, I may have given this book 5 stars.
At the time, most people still think ejb is
the official/standard solution for
J2EE development, and can not imagine alternatives to EJB.
Now, lots of people are convinced that
ejb is not the only solution, and may not be the best
solution for J2EE. This book spent five chapters
to explain the weakness of ejb, which may be very useful
last year, but is repetive and less useful now.
Chapter 6 is an introduction of lightweight IOC container. Then chapter 7 offers an introduction to Spring framework, and chapter 8 moves to Aspect-Oriented Programming (AOP). These three chapters explained the spring foundation very well. Other chapters are describes use of spring framework in transaction management, persistence, remoting, web design, .... which are good but not as complete as newer books like "Pro Spring".
If you are interested in Spring framework, besides "Pro Spring", you may also check "Professional Java Development with the Spring Framework", another book written by Rod Johnson and his team.
5 of 5 people found the following review helpful
on July 31, 2004
Format: PaperbackVerified Purchase
This book is a breath of fresh air. I finally feel like there's hope for this stuff.
The author is clear, logical, seems to have an all-encompassing knowledge
of J2EE technologies (so he's not just spouting propaganda for one
product) and his advice is grounded in the real world.
4 of 4 people found the following review helpful
on July 4, 2005
This is a very thoughtful, considered book about enterprise programming with Java / J2EE and some of the consequences of following the textbook / blueprint approach. I find that the subjects where I have prior experience with he is confirming or structuring stuff I have seen and in the areas that I have no experience I really trust his observations. He details the different J2EE approaches and analyses their strengths and weaknesses.
If you like Martin Fowler's books or the pragmatic writings of Andy Hunt & Dave Thomas then you should love this.