
Foreword
The most challenging part of being a developer on the Seam project isn’t writing the code—it’s trying to explain Seam to new users. There’s a large gap that a Seam neophyte must cross to really “get” what Seam is about. The problem isn’t that Seam is overly complex, or that it requires an esoteric skill set. Seam puts together a number of ideas that are unfamiliar to mainstream Java developers. Many of those ideas challenge the common wisdom of enterprise Java development.
To start with, Seam fills a gap not many Java developers realize exists. We are so accustomed to working with a half dozen disintegrated technologies that a truly integrated application framework seems foreign to us. This disintegration is most painfully clear at the persistence layer. Where ineffective caching and lazy instantiation issues plague most applications, Seam actually gets it right. When you consider that the creators of Seam were the brains behind Hibernate, that’s not hard to believe!
Then you’ve got Seam’s dynamic bidirection injection (bijection), which is radically different from the static injection offered by the popular dependency injection frameworks. And we haven’t even mentioned the clever stateful components in a world where the prevailing technologies force all applications into a multilayered stateless architecture regardless of whether that architecture suits the application being developed.