Preface
So, you want to build enterprise applications?
Back in 1996, we were working on a web-based clinical data management
system for a major Boston hospital. Java 1.0.2 had recently been
released, and development tools were beginning to trickle onto the
market. The Write Once, Run Anywhere promise of Java was beguiling,
not in the least because we didn't have development
environments that mirrored the deployment environments. And here was
this object-oriented, strongly typed language with梕ven
then梐n excellent standard class library. It seemed like a
perfect fit, at least in theory. In the end, the application sprouted
several Java applets and an early, crude database-backed web site.
Replacing Perl scripts with Java code required some fancy footwork,
since none of the available web servers had any native Java
integration. Performance was questionable, maintenance was iffy, and
at a few points we found ourselves backtracking to Perl and C++. The
application itself turned into a strange amalgamation of Perl CGI
scripts, server-side Java applications (including part of a
custom-built web server), HTML, and C++ CGI programs.
Our primary problem was that the necessary infrastructure for both
developing and deploying the application just wasn't
in place. Java's support for relational databases
was primitive, and while the language has always supported certain
operations as a web client, it
wasn't until the Java Servlet API was introduced the
following year that Java gained a standard, high performance
mechanism for integrating into a web server.
These limitations meant that while we could use Java for some of our
development activities, those activities were sharply bounded. It
also meant that we couldn't take much with us as we
moved on to future projects with different environments and tool
sets, all of which behaved more or less differently.
Now, Java has found its place in the enterprise world. Performance is
competitive with any approach you care to name. The APIs that have
been added during the subsequent four iterations of the language give
Java broader native support for enterprise activities than any other
language available. From a standing start when we first tried it in
1996, Java has become the lingua franca for server-side business
programming. The cross-platform graphical user interface, which
seemed to be the most promising aspect of Java, is only now beginning
to take off in a real way, mostly in products focused on developers
and system administrators. But Java has taken off behind the scenes
for building e-commerce web sites, intranet business applications,
and mission-critical distributed computing systems. Millions of
people interact with enterprise Java every day, often without
realizing it.
Even if we'd had the full resources of the modern
Java environment available to us, success wouldn't
be guaranteed. (Actually, the application in question worked out
pretty well overall, but it's not an experience that
we'd like to repeat.) Tools can be used poorly or
inefficiently, and the sheer scope of the J2EE
environment梬hich now includes thousands of classes梞eans
that very few individual developers have built up a reservoir of
experience in every area. J2EE has created standards and made
implementation easier, but the fundamental design issues are still as
relevant as ever. We just have more ways to tackle them and more
tools to eliminate the grunt work. And, of course, a standard,
consistent, widely deployed platform to build those solutions on.
This is a book about building effective applications for enterprise
environments, using Java 2, Enterprise Edition ( J2EE). This book is
not about how to use the individual components of the J2EE
specification, although we touch upon aspects of most of the
components; a brief overview is provided below. Rather, this book is
about the patterns that underlie effective software designs.
In addition to 12 combined years of experience building Enterprise
Java systems, the authors, like the development community at large,
have been the beneficiaries of over a decade of research and writing
on object-oriented modeling, software design methodologies, and
enterprise architecture. One of the most important ideas to gain
prominence during this time is the software design
pattern: a way of describing recurring
solutions to common problems. This book is about the fusion of design
patterns and enterprise design.
|