Behind the Scenes of Payara Server
Published on 04 Apr 2019
by Mark WarehamYou 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.
Distributions
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).
Modules
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:
Grizzly
One of the more unique EE projects. It's main use in Payara Server is to handle the transport layer.
Jersey
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
Mojarra
A reference implementation of the JSF (Java Server Faces) API
Project Page | API Javadoc | JSR372
Weld
An open source (reference) implementation of the CDI (Context Dependency Injection) API.
Project Page | API Javadoc | JSR330
Soteria
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
OpenMQ
An implementation of the JMS (Java Message Service ) API.
Project Page | API Javadoc | JSR343
EclipseLink
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
Hazelcast
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:
- Dynamic clustering and failover on Payara Server with Hazelcast
- Session Replication on Payara Server with Hazelcast
- Domain Data Grid in Payara Server 5
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
Catalina
From Apache Tomcat, Catalina is the actual Servlet and JSP container. Ever configured a web.xml? - that's configuring Catalina.
HK2
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
Woodstock is a component library for JSF. It's use in the Payara Platform is for the admin console.
OSGi
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: