There's been a shift in the enterprise Java community when it comes to what has commonly been referred to as an "application server."
What was an application server?
Historically, when an enterprise Java developer has talked about deploying to an application server, the idea was that they were taking an enterprise application archive (EAR file) and serving it up to an installation of WebSphere or JBoss or some other vendor’s implementation of the Java EE framework. The application server was where the JavaServer Pages got compiled, the Servlets got loaded, the Enterprise JavaBeans were managed, and the basic resources such as the Java Naming and Directory Interface (JNDI) or database connection pools were made available.
Indeed, application servers have evolved, and the deployment target has sometimes involved a unique twist on the application server of old. Portal servers, where standardized enhancements to the basic JSP and Servlet model, such as personalization effects and customization options, is an example of an application server offering more than what is available from the standard J2EE specification; but even at the heart of the portal server was the enterprise Java framework making things happen underneath.
Moving away from EJBs
But what has happened in the past few years is that frameworks such as Spring and Seam have encouraged developers to take a much simpler approach to how they develop their applications, and as such, many of the services provided by traditional application servers have gone unused. As a result, many consumers of application servers have moved away from the coupling of the term application server with the idea of a Java EE certified application server. In the Java community, an application server isn’t necessarily a server that has been certified as being Java EE compliant. So, what exactly is an ‘application server?’
The application environment
In its simplest terms, an application server is simply an environment that provides all of the runtime services that your application needs, regardless of whether that environment is fully compliant with the enterprise Java specification or not. For many, the open source Apache Tomcat Servlet engine provides all of the runtime features needed by a client. Other vendors, such as SpringSource, enhance the Tomcat experience by adding to it with performance monitoring, caching and configuration enhancements. Amazon with their BeanStalk capabilities provides a similar type of Servlet deployment environment that promises massive scalability.
And of course, other deployment requirements demand application servers that focus less on handling Web-based requests for Web-based content and instead focus on handling Web services or data components. In this space, data grids, regardless of their Java EE compliance, can provide all of the features and services required by the deployed application.
What is an application server?
So, what is an application server? Even in the Java world, the definition of the application server must go beyond simply the discussion of full Java EE compliance. As the world of enterprise deployment changes, we must be more flexible with our definitions, and accept the fact that an application server can be any environment that provides the services required to deploy, host and manage our applications at runtime.