Preface – Seam in Action


We can’t solve problems by using the same kind of thinking we used when we created them.

Albert Einstein

As I write this passage, I’m flying over the Atlantic Ocean on my way back from Europe to the United States for the second time in a month. This trip was to Tuscany for a meeting to discuss Seam’s future; the previous trip had been to Zurich, where I spoke about Seam at the Jazoon ‘08 conference. The first trip was especially significant to me because it marked the first time in the 30 years of my life that I’ve traveled outside of North America. I was beginning to think that day would never come, but it did, thanks to Seam. (And because my brother purchased the ticket to get me there. Thanks, Kevin!)

You might think I’m ridiculous for attributing this milestone to Seam. After all, how can a framework motivate a person to embark on an unprecedented trip? Before you call me crazy, let me explain how I got involved in Seam and how it influenced me to expand my horizons.

Around the time Seam was being developed, I was spending my days banging my head on a project built using Spring and JSF. For more than a year, I felt stuck in a rut trying to manage the application’s state, wrestling with irrelevant decisions such as whether to name a business object a Manager or a Service, and rationalizing how many layers to use and which layer should take ownership of a given task. All of these distractions held back the project and my growth. I kept looking for some way out.

The spark that attracted me to Seam is the fine-grained control it provides over JSF requests through its page descriptor. The reason I stuck with Seam (and ultimately decided to write about it) goes well beyond the voids it filled for me at the time.

Seam has clout because it follows a consistent approach without imposing arbitrary restrictions. It leverages annotations, interceptors, XHTML-based templates, and JSF components to give you the most bang for your keystroke. It provides access to objects when and where you need them and manages them so you don’t have to. It also helps establish continuity from one page request to the next. Above all, it gives you freedom to organize the application as it suits you and to choose the tools you want to use to build it: Java or Groovy, XML or annotations, JavaScript or rich widgets, built-in or custom components, and so on.

But we have a tendency to get caught up in the word framework and forget the real reason we’re writing software: to serve the needs of our users or our clients’ users. That’s the angle you have to take going into learning one of these tools.

Users don’t want to spend their days paging through endless result sets and could care less if you’re having a problem with lazy initialization exceptions in the view. They want mature software. They want advanced searches, reports in PDF or Excel, charts, emails, file uploads, dynamic graphics, wizards, workspaces, and so on. Basically, they want the stuff that’s really hard to develop, or at least harder than feeding the database through a CRUD generation tool. Seam gives you the CRUD generation tool, which gets you developing immediately, and it also provides the extra stuff.

Seam is worth knowing because it touches on nearly every aspect of Java EE. Sure, you have a lot to learn, but Seam makes every facet of the platform remarkably accessible and gets you working on the advanced parts of your application early in the project. You no longer have to dread those wild and crazy requirements that the user dreams up. Instead, you feel empowered to write applications—and you’ll get to the feature wish lists.

As an integration framework, Seam keeps a vast number of technologies close at hand and accessible. As a result, you find yourself trying out technologies you never thought you’d use, and you witness your application and skill set maturing quickly. You also start introducing new styles of interaction into your application, such as the event-observer model or something as revolutionary as Ajax Push. You get used to venturing into new territory, without having to abandon the familiar, and it affects your general attitude toward life.

That brings me back to my original statement. Seam is the driver that finally launched me out of North America. It also kick-started my writing and consulting career, got me involved in a successful open source project, and allowed me to meet interesting and talented people. How will Seam change your career? How will it change your life?

Somewhere over the Atlantic, July 2008