Behind the Scenes of Payara Server

Photo of Mark Wareham by Mark Wareham

You might already know that Payara Server originated out of a Glassfish fork. Glassfish being the reference implementation server of Java EE. Let's take a closer look at the components and modules that make up Payara Server.



Before we go into detail it's important to know the differences in distributions.


Payara Server is available in many distributions. In short, there is the Full Server and a Web Profile.


The web profile doesn't include all the Full EE Application Server (Payara Server Full) features, but it's usually enough to run a standard web application. These two options are then further broken down into options for multi language and embedded (handy if you want to run Payara Server programmatically).



Payara Server is made from many modules. Some of which are built by the Payara Team and community contributions. Other modules include open source libraries, or Payara forks of open source libraries that have been 'patched' to fix bugs found, that have yet to be fixed in the upstream library. A glance at the repositories and forks in our GitHub will give insight into this.


These modules are broadly categorised into Java/Jakarta EE components, server internal components, and utility connectors (for example, Authentication Mechanisms).


A look in the %payaraServerHome%/glassfish/modules will show a large list of JARs actually in use.


Jakarta EE Modules Detail


Many components have been created specifically for Glassfish as the RI (Reference Implementation) and so Payara, as a fork of Glassfish, uses many of these.


Here's a summary of some of the components and a brief description of each:



One of the more unique  EE projects. It's main use in Payara Server is to handle the transport layer.


Project Page  |  API Javadoc



The Reference implementation of the JAX-RS (Java API for RESTful Web Services) API.  You would most likely use this API if you were developing REST based web services.


Project Page   |   API Javadoc    |    JSR370



A reference implementation of the JSF (Java Server Faces) API


Project Page   |   API Javadoc    |    JSR372




An open source (reference) implementation of the CDI (Context Dependency Injection) API.


Project Page    |   API Javadoc | JSR330




New for EE8. The Java Security  API reference implementation. Designed as a replacement to unify many of the disparate security APIs each server used. Helps with portability. (See my short blog post on Soteria).


Project Page   |   API Javadoc    |    JSR375




An implementation of the JMS (Java Message Service ) API.


Project Page   |   API Javadoc   |    JSR343




As the name implies, associated with the much loved Eclipse Foundation (maker of the Eclipse IDE, and recently caretaker of Jakarta EE). This is an implementation of the JPA (Java Persistence) API. You'll likely be using this if you are working with databases.


Project Page   |   API Javadoc   |    JSR 338



Payara uses Hazelcast for it's in-memory DataGrid. If you're running a cluster, or load balancing your application across multiple instances, then you may be using, or want to read more on Hazelcast. There are a few useful Payara blog posts on this topic:




Eclipse MicroProfile

Another Eclipse project, MicroProfile is an API designed around micro services. Payara has created it's own implementation of MicroProfile.  It contains tools and utilities for things such as configuration, fault tolerance, health reporting, rest client, metrics & request tracing.


Project Page   |   Payara's MicroProfile Documentation  



Hibernate Validator

Typically when you hear Hibernate mentioned, you might think database,  but this is only related to bean validation (The JPA provider in Payara Server is EclipseLink).


Project Page   |   API Javadoc    |    JSR303




From Apache Tomcat, Catalina is the actual Servlet and JSP container.  Ever configured a web.xml? - that's configuring Catalina.




Denoting "Hundred Kilobyte Kernel", HK2 is a lightweight dependency Injection framework. HK2 is more established than weld, but whilst the two are both based around dependency injection, each have their own unique features.




Woodstock is a component library for JSF. It's use in the Payara Platform is for the admin console.




OSGi allows for "bundles" (applications or modules) to be dynamically added, loaded, started/stopped updated etc without the need for reboot. Payara Server uses this to load it's modules.



Where to Learn More

There's obviously a lot more to Payara than discussed above. It would make quite a boring and tedious blog post if I went into it all!  However if you would like to know more, please check our documentation, and browse this blog for other posts you're interested in.


You can also Download and try out Payara Server, or even Payara Micro:


 Payara Server & Payara Micro  Download Here