Debate about Great Java Application Server with Tomcat, Jboss, GlassFish, Jetty, and Liberty Profile

Original author: Oleg Shelajev
  • Transfer
Good day to all!
Well, we have another new Java Enterprise course, which means that there is something we are happy to share with you. Please do not pay particular attention to versions and dates, as the essence of this does not change much (or, if you think that is changing, then we are waiting for comments).

Introduction: Let the debate begin ...

What type of Java application server should you choose for your next project? It depends on what application you are developing, what your needs are, in which organization you work and many other factors. You can’t do without debate. Therefore, prick up your ears and listen carefully.

What makes an application server an application server, Mr. Lebowski?

What is an application server is a question that causes a lot of controversy due to the inaccuracy of the definition. Wikipedia, as an indisputable source of knowledge, says the following:
Java Platform, Enterprise Edition, abbreviated Java EE (up to version 5.0 - Java 2 Enterprise Edition or J2EE) - a set of specifications and related documentation for the Java language that describes the architecture of the server platform for medium and large tasks enterprises.
Sorry, Wikipedia, but for the purpose of this article, we don't care about pedantic descriptions and the full implementation of Java EE. We care more about the needs and desires of developers.
Most developers work on web applications and sharply use all the tricked out features of the EE specification. In fact, currently available servers with only basic functionality are the most used, as our Developer Performance Report has shown :

You can find out what excites real developers, for example:

  • Easy to download and install;
  • Real performance metrics
  • Tool support;
  • Server configuration

We will compare and compare different aspects of these servers, give marks and allocate places based on our results. And then you can ask the main questions: Which application server is the best? Do the needs of a large company employee differ from the needs of a home enthusiast developer? How to evaluate what is important for different types of people? And so on ...

The application servers that we will discuss include: Tomcat, Jetty, GlassFish, IBM WAS Liberty Profile and JBoss (also known as WildFly):

At first, we planned to include IBM WebSphere and Oracle WebLogic in this report based on the same criteria as for other application servers. But this would be unfair, since these servers are clearly aimed at large enterprises and applications in production, rather than lightweight development. However, we don’t want to completely lose sight of them, so we will devote a separate section to them :-)

Part I: Getting Started

When you first get acquainted with a new tool, things like installation, configuration, tool support and documentation can greatly affect on your experience. Part I is about getting started with each of the application servers.

In this section, all listed application servers will be compared and compared, in each of the areas they can get a maximum of 5 points in addition to our comments. And since we are completely for the developers' productivity, we’ll take Rebel for the unit of measurement :

  • Download and installation;
  • Tool support;
  • Server configuration
  • Documentation and community.

Further, in Part II, we will reveal deeper topics, like a ninja, making his way undercover.

Download and installation

The first contact is very important, it is he who gives an idea of ​​how the whole further experience can turn out!


Jetty weighs only 8MB! The process is simple:
  1. Download the installation package;
  2. Unzip the archive;
  3. Everything is ready to go!

Jetty retained its simplicity at launch: java -jar start.jar


Reason: smallest download file, maven dependency integration, unpacking installation and good startup scripts.


The experience with Tomcat is almost identical to Jetty, but version 12.8 weighs a bit more.

  1. Download the installation package;
  2. Unzip the archive;
  3. Everything is ready to go!

To start Tomcat, simply type: run bin / - very easy.


Reason: small download file, maven dependency integration, unpacking installation and good startup scripts.


JBoss AS 7.1.1.Final, released on March 9, 2012, is still the latest version of the community. Archive weighs 127MB.

  1. Download the installation package;
  2. Unzip the archive;
  3. Everything is ready to go!

RedHat simplified the launch using the bin / script, but not in those cases when you go to start a clustered environment. In the “standalone / configuration” directory, you can find several default configuration files that allow you to enable and disable clustering, choose between web and full EE profiles, so everyone can choose what they need and configure it minimally.


Reason: The largest download file, unpacking installation, slower, stand-alone startup scripts.

Liberty Profile

  1. Accept the license agreement;
  2. Download the installation package;
  3. Unzip the archive;
  4. Accept the license agreement again - seriously?
  5. Everything is ready to go!

Despite the fact that you have to accept the license agreement twice, it's not so bad, anyway, most people click “Accept” without looking :) Does anyone even read this? The download file weighs only 41.1MB, which is not so bad, considering its additional tools, which are not in the same Tomcat or Jetty.


Reason: adequate download file size, double acceptance of the license agreement, docks are needed for startup scripts :(


Two options are available: GlassFish Open Source Edition and Oracle GlassFish Server. We took the GlassFish Server Open Source Edition installation package and were surprised by its small size - only 53MB! The download package is a self-extracting archive. After downloading you need to run a large .sh “script” and, after a few steps of the graphical wizard, GlassFish is ready to use. If you are not attracted to the idea of ​​the installer, you can choose the unpacking installation option, which weighs about 30MB more. This method is accompanied by experience from three familiar steps:
  1. Download the installation package;
  2. Unzip the archive;
  3. Everything is ready to go!


Reason: There is no easy way to start the server, several installation methods, including a good unpacking method, a reasonable download file size, but still a bit big.

Download and Installation ratings: victory for Jetty and Tomcat

Tool support

Developers are dedicated not only to their servers, but also to the IDE. Therefore, server support for basic IDEs is very important so as not to force developers to use unloved platforms, or to completely miss tool support.

For many, good integration with built-in tools can be as important as good IDE integration, and sometimes even more important. The two main build tools we will look at are maven and ant.


Jetty has an Eclipse WTP pluginallowing you to run a web application directly from Eclipse. Also, check out Run Jetty Run, another Eclipse plugin.

JetBrains also has a plugin for IntelliJ , as well as NetBeans, which can be used in conjunction with the Maven plugin from Jetty.

Jetty's build tool integration is pretty good. There is integration with Ant and Maven, but, in general, integration can be carried out with any desired tool without much effort.
You can set up a development environment similar to that used in production. The maven plugin for Jetty lets you customize almost everything in the pom.xml file.
In the Maven plugin for Jetty, we rated how tiny Jetty is. Maven does not take a long time to download all the Internet.


Reason: The Eclipse plugin for earlier versions of Jetty is not the best, basic server management support.


Three major IDEs: Eclipse, IntelliJ IDEA, and Netbeans have integration support for Tomcat. This means that you can import the server into tools and deploy projects to the server. NetBeans offers a distribution package in which a Tomcat image is wrapped, which allows you to deploy it immediately after installing NetBeans: o) Eclipse also has an additional download option that allows you to download and install Tomcat from tools, which means you don’t have to do this using a browser and import.
Tomcat is tightly integrated with Ant, and most documentation includes
examples with Ant, not Maven. But, nevertheless, integration with Maven is also not bad.


Reason: Excellent IDE support, download / install via eclipse provides a positive experience.

JBoss A

project for several Eclipse plugins called jboss-tools includes JBoss Developer Studio, which has a server adapter for JBoss Servers and allows you to manage jboss from the IDE. IDEA offers the closed-source plug-in “JBoss Integration” for server management, and NetBeans has integration and the ability to manage application servers since version 7.2.1.

There is a maven plugin for managing jboss instances . Its functionality includes starting and stopping applications, deploying and re-installing applications, managing resources and executing commands through the jboss command line.


Reason: Good IDE support, basic ability to change server settings, good maven support.

Liberty Profile Liberty Profile

tools called IBM WebSphere Application Server Developer Tools for Eclipse (a product name that almost needs punctuation) are supported only by the Eclipse platform. If you are a fan of IntelliJ IDEA or NetBeans - no luck. The tools make it easy to download and install the entire server and offer rich functionality for programming models supported by Liberty Profile. They also provide rich editing support for modifying server configurations in a style similar to the deployment descriptor you probably used (or at least saw). In general, the tool is good, but only for Eclipse.

The Liberty profile also introduces the Maven plugin, which allows you to perform some actions on the server - install, start, stop, create packages and the server using predefined goals. Managing this is pretty easy:
mvn liberty:package-server -DserverHome=/path/to/server_home -DserverName=[server_name] -DpackageFile=/path/to/packaged server file location


Reason: Excellent eclipse support and flexible configuration of server configurations. Good Maven support, but not enough IDE support.


GlassFish offers plugins for all major IDEs. But the main problem is the dispersion of information about them. The plug-in for NetBeans is immediately built into the IDE, which is expected given its provider, but to install the rest you need to look for the appropriate site. Fortunately, GlassFish Tools are available on the Eclipse Marketplace for all Eclipse users - making their lives a lot easier.

IntelliJ IDEA users are also lucky, the required plugin is already in the IDE.

GlassFish offers reasonably good plugins for Maven and Antthat have the basic functionality - deploy, rewrite, start and stop the server.


Reason: Little information on where to find plugins, excellent IDE support if you managed to find these plugins (especially for NetBeans and Eclipse). Jetty

Server Configuration You can create your own XML configuration file and transfer it with the start command:

java -jar start.jar /path/to/your-jetty-conf.xml

The most impatient ones can start their instance with the JVM argument settings passed in the additional config. In addition, it is possible to transfer several configuration files to Jetty as a configuration for HTTP and HTTPS, which is very useful for exchanging config fragments within a command.

XML-based Jetty configuration - reflection-based. This means that all parameters in XML actually correspond to the fields of the Java class.

The main drawback of the reflection-based (rather scantily documented) approach is that you need to understand how Jetty works from the inside out. But hey - if you know your server well, then you will never come across anomalies, which means you won’t let the server get out of control, right?


Reason: The ability to create a Jetty config, but you need to know the Jetty internals, it often requires a reboot, the JVM arguments to overwrite the config are a nice feature, the config is small.


Configuration in Tomcat is dispersed in several files in the tomcat / conf directory, but for the most part is located in the server.xml file. This file can be modular, allowing reuse and sharing in the development team. If you want to make a small edit that you probably have to undo the next time you restart the test, the best way would be to add a system property at the start of the JVM when the system properties overwrite the xml configuration.

The default configuration file is very long, but for the most part consists of lines of comment instructions. If you look at the active xml lines, it turns out that, in fact, the file is quite small.

All changes to server.xml require you to restart the server, since configuration files are checked only at the start of the server.


Reason: A reboot is required to change the configs, dispersed between several files, easy to update, good examples in the comments.


The domain model is simple and straightforward, so re-creating your dream setup will be easy. Here's how to enable ssl connections on an arbitrary port. Locate the next part of standalone / configuration / standalone.xml and add the connector for “https” (bold line in the following table).

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
 <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
 <connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https"enable-lookups="false" secure="true"></connector>
 <virtual-server name="default-host"enable-welcome-root="true">
   <alias name="localhost"/>
   <alias name=""/>

This will enable the connector, but if you also want to change the port to which https is bound, change the “” element to the desired value. The entire default configuration is only 15KB (300 lines) xml and is in a predictable place. Large examples of clustering configs are also located there. The changes are quite static, configuration files are read at startup and not automatically reread. However, the CLI command:
[jboss-as-7.1.3.Final]$ bin/ --connect :reload
will help to resolve this issue without resorting to rebooting the server.


Reason: One file, 300 xml lines :( Easy to configure, well-structured “subsystem” of settings, CLI overloads several non-standard examples instead of restarting (manually).

Liberty Profile

There is one configuration file in Liberty Profile called server.xml. If you wish, you can add other configuration files to this file so that the configuration is logically separated or integrated inside the command.The default config is tiny, and its most interesting part is the functional manager:


The user can create his application server with the functions that he wants to run, therefore only jsp-2.2 function is initially enabled. And by the way, when changing and updating server.xml, all edits will be immediately reflected on the running server. Cool!


Reason: High-class configuration model, dynamic update that does not require a restart, small file size, simple config.


Everything you need to manage and maintain GlassFish server is located in asadmin utility. With its help, you can even manage remote servers, which is good news!
One thing that worked out especially well in asadmin is scripting. Yes, it is possible to write various scripts to manage deployments and servers. These scripts can be executed inside asadmin as a simple shell script.

Real XML fans can tweak everything in domain.xls:

<network-listener port="8800" protocol="http-listener-1" transport="tcp" name="http-listener-1" thread-pool="http-thread-pool"></network-listener>

Some configuration changes require a restart of the DAS or GlassFish server instances to take effect. Other changes are applied dynamically without restarting DAS or instances.

You can find out if a restart is required for the domain or instance in asadmin.

asadmin> list-domains
domain1 running, restart required to apply configuration changes Command list-domains executed successfully.
asadmin> list-instances pmd-i1
pmd-i1 running; requires restart
Command list-instances executed successfully

With this dynamic configuration, all changes take effect when the DAS or instance is running. The following configuration changes for the benefit of the developer do not require a restart:

  • Adding / removing additional components;
  • Add / remove resources and JDBC, JMS and connector pools (Exception: some properties of the connection pool affect applications);
  • Changing a system property that is not referenced by the option or port of the JVM;
  • Change logging levels;
  • Enable / disable resources and applications;
  • Deploy, overwhelming, anddepley applications;


Reason: The config is difficult to get, it is difficult to read the xml file, asadmin is the recommended approach, but it is difficult to deal with it without docks and experience. Jetty

Documentation and Community The


team has done a great job of improving and structuring documentation. As a result, the Jetty Documentation Hub is easy to write and easy to navigate. It has documents for different versions of Jetty. There are various mailing lists for developers. But, unfortunately, the official forum could not be found.

To get professional commercial support, you can contact a third-party company. But their list on the Jetty website is missing.


Reason: There is no list of “true experts” or companies capable of providing support.


Tomcat has excellent documentation (especially for new users), which is supported by a large community. The same community provides support for Tomcat: answers to questions, changes in code, bug fixes. Most people are happy with this approach, but if you want something more reliable, there are warranty service contracts that regularly involve Tomcat committers.


Reason: Great, vibrant community. Good documentation, easy-to-use website, community support, third-party contracts are available for more reliable support.


The JBoss community is one of the best things about the JBoss AS7. Everything works smoothly and under their wing a huge number of projects. If not all, then almost everything can be found on the forums and group discussions. If nothing else helps, the answer can be found in the documentation, it is also not bad.


Reason: Slow releases, but good docks and a large community.

GlassFish Attempting

to get through documentation, forums, and mailing lists gives you a sense of security. Active forums, a variety of mailing lists specializing in various aspects of GlassFish, and decent documentation.


Reason: good documentation, but inconvenient navigation, some documents are outdated, a large enough community, mailing lists, active forums.

Liberty Profile

The documentation, for the most part, is located on the new community site -, which is launched by the development team, so it’s more useful than it might seem at first glance. On it you can find a traditional info center with more formal documentation. For support, you can contact the rather active WASdev forum, do not forget, there you can chat with the development team. This is the best support option without warranty. If you have enough money, you can get full support from IBM, the only time it is permissible to yell at IBM and still get help: o)


Reason: High quality documentation and sample code, a small but rapidly growing community, quick answers to forum, but often too formal corporate, slow bug fixes.


The end of the first part. As always, we are waiting for your slippers and opinions in the comments or at the open door .

Also popular now: