At IDR Solutions we make use of a Open Source Java Application Server called Glassfish to run our free PDF to HTML5 Converter. I have wondered what the alternatives were to Glassfish and decided to do some research into other Open Source Java and JavaEE Application Servers.
Join me as I guide you through my Top 10 Open Source Java and JavaEE Application Servers.
What is an Application Server?
Firstly what is an Application Server? An application server can often be described as a software framework that resides in the middle tier of a server centric architecture.
The application server can often be viewed as part of a three-tier application, which are a graphical user interface (GUI) server, an application (business logic) server, and a database and transaction server and provide services for security and state maintenance, along with data access and persistence.
For Web applications, an application server will be running in the same environment as its web server(s), and application servers are there to support the construction of dynamic pages and implement services like clustering, fail-over, and load-balancing, so developers can focus on implementing the business logic.
At IDRsolutions we like to describe it to non-technical users as a magic door. It allows you to write code to run on a server and code on a client and allow them to talk to each other. It all just works and handles all the complexity transparently for you.
So now we have established what an Application server is, we will now take a look at the available Java Application Servers.
GlassFish is an open-source application server project originally started by Sun Microsystems for the Java EE platform and now part of the Oracle Corporation. It is available under a dual-license: the Common Development and Distribution License (CDDL) and the GNU General Public License (GPL) with the classpath exception. Oracle no longer provides commercial support for GlassFish Server but several organisations have filled that space, most notably Payara who are co-sponsors for NetBeans Day UK.
GlassFish is often considered as the reference implementation of Java EE and so supports Enterprise JavaBeans (a managed, server-side component architecture for modular construction of enterprise applications), JPA (Java Persistence API ), JavaServer Faces, JMS (Java Message Service), RMI (Java Remote Method Invocation), JavaServer Pages, servlets and more. Glassfish allows you to to create enterprise applications that are portable and scalable, and that integrate with legacy technologies. Optional components can also be installed for additional services.
It is built upon a modular kernel powered by OSGi, and runs straight on top of the Apache Felix implementation. It is also capable of running with Equinox OSGi or Knopflerfish OSGi runtimes. HK2 abstracts the OSGi module system to provide components, which can also be viewed as services and injected into the run time and uses a derivative of Apache Tomcat as the servlet container for serving Web content, with an added component called Grizzly which uses Java New I/O (NIO) for scalability and speed. We have previous covered how to set up Glassfish on a Linux Server.
The JBoss Enterprise Application Platform which is also known as JBoss EAP is a open-source (available under the GNU Lesser General Public License) Java EE-based application server runtime platform used for building, deploying, and hosting highly transactional Java applications and services. It is also available as a subscription-based server. The JBoss Enterprise Application Platform is part of a wider portfolio of software known as the JBoss Enterprise Middleware portfolio.
JBoss works cross-platform and is usable on any operating system that supports Java. Its key features includes support for the Java EE and Web Services standards, Enterprise Java Beans (EJB),Java persistence using Hibernate, Object request broker (ORB) using JacORB for interoperability with CORBA objects,the JBoss Seam framework, including Java annotations, JavaServer Faces (JSF), including RichFaces, Web application services, including Apache Tomcat for JavaServer Pages (JSP) and Java Servlets
JBoss included Security services, including Java Authentication and Authorization Service (JAAS) and pluggable authentication modules (PAM) and additional Web Services and interoperability, including JAX-RPC, JAX-WS, many WS-* standards, and MTOM/XOP
There is also additional Integration and messaging services, management and service oriented architecture and Java management extensions and additional monitoring features are available.
WildFly, was better known as JBoss AS is an application server created by JBoss, but now under continuous development by Red Hat. WildFly is written in Java, and implements the Java Platform, Enterprise Edition (Java EE) specification separately/standalone from the JBoss Enterprise Application Platform. Being Java based means it can run multiple platforms.
WildFly is free and open-source software, and available under the GNU Lesser General Public License (LGPL), version 2.1. Wild Fly is currently in 8.2.0 Final and 9.0.0Beta2 Release.
Some of the functionality and features included in WildFly is Clustering, Deployment API, Distributed caching (using Infinispan, a standalone project) ,Distributed deployment, Enterprise JavaBeans versions 3 and 2.1, Failover (including Web and EJB sessions), persistence programming, Java Authentication and Authorization Service (JAAS), Java EE Connector Architecture (JCA) integration, Java Management Extensions, Java Message Service (JMS) integration, Java Naming and Directory Interface (JNDI), Java Transaction API (JTA), Java Authorization Contract for Containers, (JACC) integration JavaMail, Java Server Faces 1.2 (Mojarra)Java Server Pages (JSP) / Java Servlet 2.1/2.5
Wildfly also supports web services like JAX-WSJDBCLoad balancing, and includes a Management API, a OSGi frameworkRMI-IIOP and can be executed in two server modes: a traditional, single JVM, standalone mode, and a multi-JVM option, Domain mode, which synchronizes configuration across any number of processes and hosts.
Apache Tomcat is an open source software implementation of the Java Servlet and JavaServer Pages technologies and was developed in an open and participatory environment and released under the Apache License version 2 and developed by the Apache Software Foundation (ASF). Apache Tomcat implements several Java EE specifications including Java Servlet, JavaServer Pages (JSP), Java EL, and WebSocket, and provides a “pure Java” HTTP web server environment for Java code to run in.
Apache TomEE is the Java Enterprise Edition of Apache Tomcat which combines several Java enterprise projects which include the Apache OpenEJB, Apache OpenWebBeans, Apache OpenJPA, Apache MyFaces.
Apache TomEE Web Profile can deliver Servlets, JSP, JSF, JTA, JPA, CDI, Bean Validation and EJB Lite and also delivers JAX-RS (RESTfull Services) plus EJB Full, Java EE Connector Architecture, JMS (Java Message Service) and JAX-WS (Web Services) and includes Mojarra and EclipseLink support.
Apache Geronimo is an open source application server developed by the Apache Software Foundation and distributed under the Apache license. Apache Geronimo is compatible with the Java Enterprise Edition (Java EE) 6 specification supports various technologies such as JMS, Enterprise JavaBeans, Connectors, servlets, JSP, JSF, Unified Expression Language and JavaMail. Developers can create applications that are both portable and scalable, and that integrate well with legacy technologies. It should be noted that development of Apache Geronimo has now largely been ceased although not completely.
Jetty is a Java based HTTP (Web) server and Java Servlet container and is developed as a free and open source project as part of the Eclipse Foundation (originally it was developed as an independent open source project). The web server is relatively popular and is used in products such as Apache ActiveMQ, Alfresco, Apache Geronimo, Apache Maven, Apache Spark, Google App Engine, Eclipse, Twitter’s Streaming API and also supports the latest Java Servlet API (with JSP support) as well as AJP, JASPI, JMX, JNDI, OSGi, SPDY and WebSocket.
JOnAS is an open-sourced implementation of the Java EE application server specification, released under the LGPL open-source license and developed and hosted by the ObjectWeb consortium (ObjectWeb is a non-profit European consortium, founded by INRIA, Groupe Bull, and France Télécom).
JOnAS provides a fully compliant EJB container through EasyBeans and is available with an embedded Tomcat or Jetty web container which is 1.6 JVM supported, and can run on numerous operating systems including Linux, Windows, AIX, and many Posix platforms.
Version 5 of JOnAS is fully based on the OSGi framework; using either Apache Felix, Eclipse Equinox or Knopflerfish meaning JOnAS components are packaged as bundles,and contains tools for creating, deploying and monitoring JOnAS clusters; it also includes self-management features too.
Resin is a web server and Java application server created by Caucho Technology. Resin is available under a GPL license and a commercial license. The Commercial licensed version Resin Pro is available for enterprise and production environments. Resin supports the Java EE standard as well as a mod_php/PHP like engine known as Quercus. Resin is also one of the oldest application and web servers as it predates Apache Tomcat as it was released in 1999.
Resin Pro includes features such as built-in caching and features such as clustering support, advanced administration, and more but the Resin Open Source version is used without these features so will not be covered here,
In terms of the app server, it is Java EE Web Profile certified, with support for Java CDI and Transaction support. The Web Server aspect includes support for Static files/JSP/Servlet/JSF, URL rewriting, Proxy caching, Gzip compression, SSL, Virtual Hosts, Comet/Server push, and WebSockets.
Blazix is a fully featured Java application server and web server (serving HTML files and images in addition to the standard application server workload.) Currently Blazix provides Servlet 2.3, JSP 1.2, EJB 1.1 and JMS 1.0.2. It also implements HTTP/1.1 and is written entirely in Java, and can be used cross-platform. It can be used as a full web server all by itself, especially in high volume traffic.
Some of the features included are support for no-single-point-of-failure clustering for load balancing and failover, live EJB and Web archive deployments and updates, Secure Socket Layer web services, transaction management, security. Blazix provides all these features in a 2-megabyte download which is good if you’re looking for something small.
Hopefully you found this guide to Application Servers useful, let us know what your favourite Java and JavaEE Application Server.
We now have a series of articles on what is new in Java 9:
- An Introduction to Java 9
- Java 9 Modularity Explained in 5 minutes
- Java 9 jlink explained in 5 minutes
- Why HTTP/2 Client in Java 9 is important
- How HTML5 Javadocs in Java 9 will make your life easier