Open Source Software Technical Articles

Want the Best of the Wazi Blogs Delivered Directly to your Inbox?

Subscribe to Wazi by Email

Your email:

Connect with Us!

Current Articles | RSS Feed RSS Feed

Open Source Application Server Comparison Matrix

  
  
  

Use this comparison matrix to learn about the differences between and relative benefits of the popular  open source application servers JBoss, Tomcat, Glassfish, and Jetty.


From the generally thin-featured offerings and questions of security of the early 2000's, the Application Server category of open source project has matured to compete squarely with their commercial counterparts. Sometimes the terms 'Application Server' and 'Web Application Framework' are used interchangeably; we've distinguished between them for our research. By Application Server here we mean 'servers of Web based applications'. You'll want to look to the Web Frameworks SweetSpot for more information on the web application frameworks developed by the open source community.


The following tables represent research completed in the fall of 2007 by OpenLogic. We went to the experts -- members of the OpenLogic Expert Community who are committers and expert users of the projects -- and asked them to answer a set of questions. Members of Tomcat, JBoss, Jetty and GlassFish responded. Use the resulting information as a tool to plan your projects.


For comprehensive information on each project compared, locate it in the OpenLogic Enterprise Exchange library by accessing the 'Browse Open Source' tab.

The five questions we asked the experts appear below. To view more detail on the projects* compared across each question, just click on the question.







For comprehensive information on each project, search the OLEX Open Source Library. For a list of the open source developers we interviewed, click here.


*While no version of the projects is specified, you can assume that the information relates to the latest version in our library at the time of the last update.

Summarized Responses


What's your project's 'sweet spot'?


This is a summary of the responses. For full detail, click here.

 

ProjectSummarized Response
GlassFish

    • Web services

    • Enterprise level support for clustering

    • Enterprise level administration console (CLI, Web based GUI and JMX)

    • Installation profiles

    • Tight integration with a wide variety of software packages


Tomcat

    • Extremely configurable and pluggable design

    • Popularity results in large user base


JBoss

    • Ease of use

    • Development environments


Jetty

    • Small size



Return to the questions list.

 

19a98812-f823-48dc-841e-bf029c63c6d7

 

What sorts of projects does this package not work as well for?


This is a summary of the responses. For full detail, click here.

 

ProjectSummarized Response
GlassFish

    • Any scenario requiring a full Java EE application server or Servlet container is good for GlassFish

    • GlassFish does not fit in a scenario requiring a container embedded


Tomcat

    • Tomcat does not fit well into fullblown J2EE applications


JBoss

    • Will fit in any scenario


Jetty

    • Scenarios requiring J2EE support beyond servlets should be avoided

    • Scenarios requiring business logic to housed in a separate EJB tier



Return to the questions list.

Of the projects we're comparing, which have you tried?


This is a summary of the responses. For full detail, click here.

 

ProjectSummarized Response
GlassFish Tomcat: liked

    • Tomcat is an optimized Servlet container with clustering capability and a very good http/https module implemented using non blocking NIO package. Tomcat is suitable if project is not going to host EJBs.


Geronimo:liked

    • Geronimo has all features that GlassFish has except that it does not provide any of those five features mentioned in question one. Although Geronimo has an administration interface, Web service support and very small level of clustering support (using Terracotta), it is far behind what GlassFish provides out of the box. Geronimo fits best in scenarios where there is no need for clustering and cluster management.


Tomcat CauchoResin: didn't like

    • Commercial.

    • Poor documentation.


Jetty: liked

    • Small and efficient, but has a smaller user base than some of the alternatives.


GlassFish: disliked

    • Worst configuration files ever

    • Hard to work with.


Geronimo: liked

    • Wraps Tomcat inside a J2EE server.


JBoss: liked

    • Same as Geronimo

    • Though I dislike the tyrant community of JBoss.


JBoss Tomcat: liked

    • Easy to install, although can be tricky to configure in some aspects.


Jetty: liked

    • A great option if what you need is a simple web container.

    • It can be embedded (which makes deployment of the project as a whole easier).

    • Very fast startup (useful during development).


GlassFish: didn't like

    • Hard to use, and very slow to start (especially when integrated with NetBeans).


Jetty Tomcat: liked

    • Excellent community support.

    • Solid Web server

    • In my experience, the development community can be somewhat unhelpful and unfriendly. However, I have seen many many excellent examples of community support in Tomcat, both from users and developers. In particular, I have always found people such as Filip Hanik to be extremely helpful.


JBoss: liked

    • Strong community.



Return to the questions list.


What is the future of this project? What's coming that will ease development?


This is a summary of the responses. For full detail, click here.

 

ProjectSummarized Response
GlassFish

    • Support for AIX

    • Faster startup

    • High availability (JMS high availability, in particular) using HADB

    • Enhancements to auto update feature


Tomcat

    • Faster and more stable


JBoss

    • No information available.


Jetty




Return to the questions list.

Myths


This is a summary of the responses. For full detail, click here.
ProjectSummarized Response
GlassFish

    • Poor performance.


Tomcat

    • Tomcat is great for development, but should not be used from production.


JBoss

    • Lack of support, and an inability to handle mission-critical projects. Neither of these are true.


Jetty

    • Jetty can only be run as part of JBoss or Geronimo.



Return to the questions list.


Complete Responses


What's your project's 'sweet spot'?


This is the full response. For a summary of the response, click here.

 

ProjectFull Response
GlassFish

    • Web services: It has a well designed and implemented Web service stack which supports the latest WS-* standards like Reliable Messaging, Secure Conversation, Trust, Security, SecurityPolicy, MetadataExchange, Atomic Transaction, Coordination, etc. The GlassFish Web services stack is fully Interoperable with the .Net framework, and has been adopted by some other big players like IBM for its JDK version 6, BEA as Web service stack for BEA application server 10, JBoss WS 2.1.0, etc.

    • Enterprise level support for clustering: GlassFish has a very well designed and implemented clustering and high availability mechanism which distinguishes it as an open source application server. GlassFish supports in-memory replication for http sessions, stateful EJB session states, single sign on states, and container states (Timer…). Although the default replication mechanism between instances is based on JXTA (in-memory replication), it is possible to use HADB (a high performance database optimized for high availability use cases)to achieve 99.99% uptime.

    • Enterprise level administration console (CLI, Web based GUI and JMX): The GlassFish administration console allows full control over application server configuration and behavior from detailed configuration of an ORB listener to monitoring and diagnosis. Web based console can be used to manage and configure a cluster and deploy application or resource to entire cluster. Per-Web service, JDBC resource, web resource, etc monitoring provide detailed statistics about that resource usage.

    • Installation profiles: GlassFish can be installed using one of several profiles: Developer, Cluster or Enterprise. Each profile has special features that make it suitable for a specific purpose.For example, the Developer profile will not carry modules that are required for clustered environments and this allows for faster database stops and starts. The Developer profile also uses an embedded broker to serve JMS requirements. It uses the JKS format rather than the CertDB used by the Enterprise profile. These and other differences between the profiles let each role in an enterprise to have an installation suited for its purpose.

    • GlassFish is tightly integrated with a wide range of software, including:

        • OpenESB - a first class JBI implementation with tens of
          binding components and service engines.

        • OpenSSO - an open source version of Sun Java Access Manager.

        • OpenDS - an open source version of the Sun Directory Server.




Tomcat Tomcat's sweet spot is it's extremely configurable and pluggable design. This means that every  component inside of Tomcat can be exchanged with one you or someone else has developed without
changing Tomcat code. This is all managed via the configuration file. This ease of use has contributed to making Tomcat the most popular servlet engine today. This popularity results in a very
large user base and access to lots of expertise. Additionally, and it's easy to find developers with the Tomcat skill set.
JBoss The biggest advantage of JBoss is ease of use. Installation is as simple as unzipping a file; deploying the application is as simple as copying a WAR/EAR. Support for expanded deployments makes development more productive.

JBoss should be considered for any Java EE project. Even if the project officially uses another application server, developers could use JBoss during development to increase productivity.
Jetty Whilst Jetty is an excellent servlet engine on any measure, it is extremely lightweight and so easy to embed into another application. We have a number of applications that require embedded HTTP servers in which we have used Jetty very successfully.

The entire Jetty codebase is only a few hundred KB, and as such it is ideal for environments where memory is a premium. For example, many devices such as routers and modems have Web
interfaces for managing the device. Jetty would be an ideal fit for this sort of deployment due to its compact footprint.

Return to the questions list.

What sorts of projects does this package not work as well for?


This is the full response. For a summary of the response, click here.

 

ProjectFull Response
GlassFish Generally speaking, GlassFish fits any type of scenario requiring a full Java EE application server or Servlet container. In older versions of GlassFish (Sun Java application servers), it was not suitable to replace a Servlet container like Tomcat or Jetty but the new Grizzly engine used in GlassFish allows it to operate as
well as Tomcat and Jetty in place of a Servlet container. In addition, it has a very easy and reliable cluster management and failover recovery which make it a wise choice.

The one scenario that current versions of GlassFish does not fit is any embedded use case where a container should be embedding in-process. For this scenario Tomcat fits well.
Tomcat Any that is no java, of course. And, fullblown J2EE applications, for this you can use JBoss, Geronimo or Glassfish, all of which run a version of Tomcat inside.
JBoss Technically speaking, I don't know any scenario into which JBoss would not fit (that doesn't mean such a scenario doesn't exist, I'm just not familiar with any).
Jetty If J2EE support beyond servlets is required, something like JBoss or Geronimo would be a better choice. It should be noted that technically speaking, neither of those are Servlet containers but instead include a Servlet container (typically Tomcat or Jetty) that is used to handle HTTP requests. Given that Jetty is only a servlet container, it does not support EJBs and other J2EE components except servlets.

Some applications may require that business logic be housed in a separate EJB tier which Jetty does not support. In these cases something like JBoss or Geronimo would be a better choice. Note that even in this case Jetty would still be an excellent choice for the HTTP/Servlet component of the application. I do not
believe there are any projects where Jetty would not be an excellent fit for the HTTP/Servlet layer if Java is a requirement.

Return to the questions list.

Of the projects included here, which have you tried? Of those, which ones did you like or dislike, and why?


This is the full response. For a summary of the response, click here.

 

ProjectFull Response
GlassFish Tomcat: liked

    • Tomcat is an optimized Servlet container with clustering capability and a very good http/https module implemented using non blocking NIO package. Tomcat is suitable if project is not going to host EJBs.


Geronimo:liked

    • Geronimo has all features that GlassFish has except that it does not provide any of those five features mentioned in question one. Although Geronimo has an administration interface, Web
      service support and very small level of clustering support (using Terracotta), it is far behind what GlassFish provides out of the box. Geronimo fits best in scenarios where there is no need for clustering and cluster management.


Tomcat CauchoResin: didn't like

    • Commercial.

    • Poor documentation.


Jetty: liked

    • Small and efficient, but has a smaller user base than some of the alternatives.


GlassFish: disliked

    • Worst configuration files ever

    • Hard to work with.


Geronimo: liked

    • Wraps Tomcat inside a J2EE server.


JBoss: liked

    • Same as Geronimo

    • Though I dislike the tyrant community of JBoss.


JBoss Tomcat: liked

    • Easy to install, although can be tricky to configure in some aspects.


Jetty: liked

    • A great option if what you need is a simple web container.

    • It can be embedded (which makes deployment of the project as a whole easier).

    • Very fast startup (useful during development).


GlassFish: didn't like

    • Hard to use, and very slow to start (especially when integrated with NetBeans).


Jetty Tomcat: liked

    • Excellent community support.

    • Solid Web server

    • In my experience, the development community can be somewhat unhelpful and unfriendly (see
      http://issues.apache.org/bugzilla/show_bug.cgi?id=37424 for an example). However, I have seen many many excellent examples of community support in Tomcat, both from users and developers. In particular, I have always found people such as Filip Hanik to be extremely helpful.


JBoss: liked

    • Strong community.



Return to the questions list.

What is the future of this project? What's coming that will ease
development?


This is the full response. For a summary of the response, click here.

 

ProjectFull Response
GlassFish The GlassFish kernel is slated for redesign in version 3. The new kernel is based on an HK2 module sub-system which makes it possible to start GlassFish in a cell phone or embed it
in-process. Other enhancements include some to performance: GlassFish will start within few seconds (less than 5) using a lazy loading mechanism for its module and sub systems.

There will be an upgrade for GlassFish in early 2008 which make it possible to use GlassFish on AIX operating system. GlassFish version 3 will support Java EE 6 profiles in addition to support for scripting languages like JRuby, PHP, JavaScript (server side). Support for these languages will be available through containers which are already implemented to some degree.

The next version will include improvements for high availability (JMS high availability, in particular) using HADB.

GlassFish has an auto update mechanism that allows administrators to create an update center with new or updated application server artifacts and update all server instance from that update center. This feature allows the update of application servers or install of new modules on the server. In next version of GlassFish, it will be possible to update deployed applications using this update center.
Tomcat Continue along the same path, it is now a commodity software, no revolutions inline but to make it better, more stable and faster.

JSR-315 is next on the list, which is servlet 3.0.
JBoss No information available.
Jetty Jetty is still under active development and a number of new features are being added to fulfill today's requirements of a servlet container, including Continuations and Async SSL.

Return to the questions list.

Are there myths about this project that you'd like to challenge?


This is the full response. For a summary of the response, click here.

 

ProjectFull Response
GlassFish The most insidious myths about GlassFish were allayed by SUN's release of the SpecJ benchmark reports. SpecJ reports debunking myths about GlassFish performance are worth looking at - here and here.
Tomcat There is one myth, and it was around for a long time: Tomcat is great for development, but should not be used from production. While this may persist in some companies, many have realized the cost benefit of Tomcat, and its maturity.
JBoss Lack of support, and an inability to handle mission-critical projects. Neither of these are true.
Jetty One is that Jetty can only be run as part of JBoss or Geronimo. This is not true, the only reason Jetty would need to run as part of JBoss or Geronimo is if EJB support is required.

Jetty doesn't have support for JNDI or LDAP integration. This is not true, JettyPlus (http://jetty.mortbay.org/jetty5/plus/index.html) has support for JTA, JNDI, JAAS and Javamail.

Return to the questions list.

Acknowledgments


OpenLogic would like to thank the following members of the OpenLogic Expert Community for their contributions to this effort and invite the community to email us if they'd like to augment, correct, update, refute or dispute any of the information included herein.

 

ProjectContributer
Glassfish Masoud Kalalil
JBoss Felipe Leme
Jetty Dmitri Colebatch
Tomcat Filip Hanik




This work is licensed under a Creative Commons Attribution 3.0 Unported License
Creative Commons License.


This work is licensed under a Creative Commons Attribution 3.0 Unported License
Creative Commons License.

Comments

Currently, there are no comments. Be the first to post one!
Post Comment
Name
 *
Email
 *
Website (optional)
Comment
 *

Allowed tags: <a> link, <b> bold, <i> italics