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.
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.
A reference implementation of the JSF (Java Server Faces) API
An open source (reference) implementation of the CDI (Context Dependency Injection) API.
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).
An implementation of the JMS (Java Message Service ) API.
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.
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
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.
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).
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: