'll get right to the punch line: The choice between implementing real-world server-side solutions in Java vs. alternate technologies is not a foregone conclusion. More often than not, the concrete APIs and services offered by the Java 2 Standard Edition
and Java 2 Enterprise Edition
platforms meet or exceed the competition, but in several key areas related to server development, the tools available on these popular platforms are weak.
When a project's requirements coincide with Java's server-side weaknesses, the resultant Java solution can be difficult to build, non-portable, and hard to maintain. This is why my overall grade for using Java to build the various real-world servers businesses demand is only a B-.
This assessment of Java's advantages and disadvantages regarding server-side development breaks along three somewhat orthogonal axes. I examine the platform's facilities imbuing Java solutions with key server attributes: scalability, extensibility, throughput, security, manageability, and code-base maintainability. Java provides wonderful support for some of these attributes, but for others it falls far short of ideal in terms of convenience and support.
J2SE has several advantages for real-world services. An analysis of Java's performance against its competition indicates that its platform independence, binary standards for code distribution, and J2SE's inherent stability combine to give the Java platform portability advantages that far outweigh the competition. In fact, projects whose requirements coincide with these strengths simply can't be built on alternate platforms (at least, not without exponentially more effort).
Examining non-technical areas and focusing on project management, the J2SE and J2EE platforms enjoy a large base of developers, decent tool sets, and wide industry support. From a project-management perspective, Java is in a league whose only other member is the suite of tools and technologies soon to be offered by Microsoft Corp.those of the Visual Studio .NET platform.
With that in mind, let's now get to the bottom of the strengths and weaknesses of Java as an enterprise server technology.
|J2SE Report Card
||J2EE Report Card
||Reliance on blocking I/O libraries limits potential. Java 2 v1.4 non-blocking APIs should help.
||Frameworks target scalability well. Complex component models and weaknesses inherited from J2SE can hamstring implementations.
||Late-linking plus platform-independent binary class definitionsawesome!
||Open component model definitions are great! Need more guidance on patterns and usage.
||See blocking I/O comments above; interpretive nature of Java degrades performance vs. platform-specific compilation.
||Very nice framework; lower marks for poor documentation of advanced techniques and capabilities.
||Portable security descriptors are nice, but lack expressivenesscan't handle complex security portably. No integration with J2SE security.
||No facilities provided; very recent JMX shows promise, but lots of work still to be done.
||No portable solution provided. (See J2SE comments in this area as well.)
||Single, simple language and stable platformlove it! Deployment can be hazardous, but Java Web Start plus third-party tools fill most gaps.
||Complex component models, lack of usage patterns and portability difficulties inhibit code-base and deployment maintenance efforts.