The J2EE Platform
Sun Microsystems' Java 2 Enterprise Edition (J2EE) is a set of specifications and a platform for building enterprise-level applications. Sun produces a reference implementation of the J2EE specifications, which other organizations are then free to improve uponalthough these revised implementations must pass a series of compliance tests to be considered J2EE-compliant. These specifications and technologies have been widely adopted in the industry by organizations including IBM, BEA Systems, Oracle, HP, Iona, and others; each of these companies in turn develops products that comply with the J2EE specifications, thus enabling an organization to mix best-of-breed products from multiple vendors. Most of these products fit in a category called J2EE application servers.
Note that a vendor is not obligated to support the entire J2EE API; some vendors produce niche products that support only a subset of the J2EE API. An example is Sonic Software, which produces a messaging platform that supports the Java Message Service (JMS), a subset of the entire J2EE specification. The most notable exception to the J2EE standard is Microsoft, which is producing its own web services platform, .NET. However, as we'll see, through web services, J2EE systems can now integrate with nonJ2EE systems.
Changes to the J2EE specifications are handled through a collaborative effort called the Java Community Process, to ensure portability and compliance to the standards. Since its launch, more than 200 companies have contributed to various specifications in the J2EE standards. A change to or addition of a new feature is initiated by a Java Specification Request (JSR); in fact, many of the technologies related to web services are currently in various stages of acceptance and are tracked by different JSRs.
The main goal of J2EE is to produce a platform for building portable, scalable, secure, and robust enterprise-level applications. J2EE is a large framework of related Java classes designed to handle many of the lower-level details necessary for facilitating the creation of such applications.
The underlying implementation language of J2EE (as its name implies) is Java. Many of the aforementioned goals (portability, scalability, security, and robustness) are inherently present in the Java language already:
Portability: Java is portable through the use of the Java Virtual Machine.
Scalability: Scalability is defined in two arenas: development and deployment. Because it's object-oriented, Java applications tend to be more manageable than those written in procedural languages. There's nothing inherent in the Java language to handle deployment scalability, however, although many of the products we'll be discussing address this issue.
Security: Java applications execute in a security sandbox and typically cannot modify system resources (such as the system clock).
Robustness: Java includes a well-defined set of exception-handling mechanisms to handle exceptions during runtime.