The history of software engineering is, in effect, the history of abstraction. As complexity
rises, we respond by raising the level of abstraction in our programming languages and in our
methods. Thus, we have seen the move from C to Java, from structured methods to
object-oriented design, and from classes to design patterns to architectural frameworks.
J2EE, the Java 2 Platform, Enterprise Edition, is such a framework. J2EE is a comprehensive
platform for deploying complex systems. It raises the level of abstraction for the
development team by offering a set of mechanisms (JSP, Enterprise JavaBeans, servlets) and
services (JDBC, JNDI, JMS, and RMI to name a few), enabling the team to focus on its core
business value instead of building infrastructure.
As good as J2EE is, however, there is a large semantic gap between what J2EE provides and
what must be crafted for the business. Bridging that gap can only be achieved given a strong,
foundational understanding of J2EE together with a sound architecture for the
domain-specific system. The Unified Modeling Language (UML) comes into play here, for the
UML is essentially the language of blueprints for software. Visualizing, specifying,
constructing, and documenting the key elements of a system are essential as complexity
rises, and this is the very reason for the UML’s existence.