There is no application server

We have recently posted data about application server market share we gathered from the free Plumbr deployments. And it resonated well – via different channels we got hundreds of comments and opinions on how to interpret the data. But one of the arguments in its different forms was constantly being made through every channel. Whether it took the form of “Tomcat is not an application server” or “This data is irrelevant as it is not focused on real application servers such as Weblogic or WebSphere”, it just kept surfacing. It made us wonder – why does Java community have so different opinion about what actually is an application server. So we decided to shed some light upon the issue. Looking into the most obvious source – namely Wikipedia – and things did not look too bad:
 

An application server can be either a software framework that provides a generalized approach to creating an application-server implementation, without regard to what the application functions are, or the server portion of a specific implementation instance. In either case, the server’s function is dedicated to the efficient execution of procedures (programs, routines, scripts) for supporting its applied applications.

So far, so good. Apparently anything can be an application server based on the Wikipedia definition. But when we tried to find an official definition for a Java EE application server, things got a bit more interesting.

If you dig under the hood of the Java EE specification, you discover that neither Sun back in the days nor Oracle is using the term “Application server” in the official specifications. Instead, the term “Container” is used throughout the materials. The containers must support different specifications, such as JMS, JTA, JSP to warrant that the applications are portable across different implementations.

Next important fact – until Java EE 5 the only way Sun/Oracle acknowledged your product to be officially Java EE compliant was to implement the whole specification. This led to large and monolithic “enterprise grade” products, such as the infamous Websphere and Weblogic in mid-2000’s. As a result, more and more people flocked away from the close-to-impossible to use beasts and started using something a bit more humane such as Tomcat or Jetty. Surprisingly the vendors of those products could not care less for the official specification, but instead focused on providing good tools for the job at hand. So the specification committee finally surrendered and broke down the specification.

This breakdown in Java EE 6 is known as Java EE profiles. Java EE 6 specification makes it possible for container vendors to choose whether they wish to implement a subset of the specification to get Web Profile certification or aim for the Full Profile and implement all the specifications. The specifications mandatory in corresponding profiles are described in the following table:

Full Java EE 6.0 implementation
Web Profile
Servlet 3.0JSP 2.2EL 2.2EJB 3.1JMS 1.1JavaMail 1.1
JSR-45 1.0JSTL 1.2JSRF 2.0Connector 1.6WebServices 1.3JAX-RPC 1.1
Common Annotations 1.1EJB 3.1 LiteJTA 1.1JAX-WS 2.2JAX-RS 1.1JAXB 2.2
JPA 2.0Bean Validation 1.0Managed Beans 1.0JAXR 1.0Java EE Management 1.1Java EE Deployment 1.2
Interceptors 1.0JSR 299 1.0Dependency Injection 1.0JACC 1.4JASPIC 1.0WebServicesMetadata 2.1

So if you desire to build your very own full Java EE implementation, you’d better be provide implementations to all the 30 acronyms in this list. As this is by no means cheap or easy task, then at the time of posting this article, only the following application servers were officially certified by Oracle on Java EE 6:

Full Profile
Oracle Glassfish 3
IBM WebShpere 8
IBM WebSphere CE 3
Oracle Weblogic
JBoss AS 7
Apache Geronimo 3
Hitachi uCosminexus Application Server 9
Fujitsu Interstage Application Server 10
TMAX JEUS 7
Web Profile
Oracle Glassfish 3
Caucho Resin 4
Apache TomEE 1
JBoss AS 7
Apache Geronimo 3
Sap NetWeaver
JOnAS

 
 

If we now compare this list against the most popular application servers, we find that 66% of our user base is happily running on products such as Tomcat and Jetty which are nowhere in sight in the officially certified container list. But we still think both of them make an excellent and easy to use platform for your applications. So – formally there is no such thing as Java EE Application Server. Instead of this we have Java EE containers, which if the vendor desires can apply for official certification in any of the profiles. And you can definitely have your own cute application server implementing just Servlet specification and leaving out everything else. You are just not eligible to official certification in this case.
 

Reference: There is no application server from our JCG partner Nikita Salnikov-Tarnovski at the Plumbr Blog blog.
Related Whitepaper:

Functional Programming in Java: Harnessing the Power of Java 8 Lambda Expressions

Get ready to program in a whole new way!

Functional Programming in Java will help you quickly get on top of the new, essential Java 8 language features and the functional style that will change and improve your code. This short, targeted book will help you make the paradigm shift from the old imperative way to a less error-prone, more elegant, and concise coding style that’s also a breeze to parallelize. You’ll explore the syntax and semantics of lambda expressions, method and constructor references, and functional interfaces. You’ll design and write applications better using the new standards in Java 8 and the JDK.

Get it Now!  

3 Responses to "There is no application server"

  1. Well, this just is against facts. About 10+ different application servers are certified. You also have proprietary stuff (even if it’s free) like Tomcat and Spring, for which the devs didn’t bother to follow the stuff that was agreed upon outside of their very own pet project. TomEE is your best counter-example: some people found that adopting Java EE 6 Web Profile was better than implementing out-of-nowhere API’s. I know this Tomcat/Jetty stuff works, but those containers, by definition, aren’t Java EE application servers – which exist.

    • Ivo Mägi says:

      If you went through the article then what we are trying to state here is that – there is no official definition to a Java EE application server. Pretty much anything can be called an application server.

  2. Nice article – thanks for it.

    This (i.e. what the “application server” really means) is a very common disambiguation. Some time ago I’ve tried to answer some doubts on SO. Perhaps someone might find it useful in this discussion (http://stackoverflow.com/questions/9495041/does-ejb-container-reside-in-all-application-servers-ejb-container-in-depth/9496155#9496155)

    cheers!

Leave a Reply


× six = 36



Java Code Geeks and all content copyright © 2010-2014, Exelixis Media Ltd | Terms of Use | Privacy Policy
All trademarks and registered trademarks appearing on Java Code Geeks are the property of their respective owners.
Java is a trademark or registered trademark of Oracle Corporation in the United States and other countries.
Java Code Geeks is not connected to Oracle Corporation and is not sponsored by Oracle Corporation.

Sign up for our Newsletter

20,709 insiders are already enjoying weekly updates and complimentary whitepapers! Join them now to gain exclusive access to the latest news in the Java world, as well as insights about Android, Scala, Groovy and other related technologies.

As an extra bonus, by joining you will get our brand new e-books, published by Java Code Geeks and their JCG partners for your reading pleasure! Enter your info and stay on top of things,

  • Fresh trends
  • Cases and examples
  • Research and insights
  • Two complimentary e-books