Specs, RIs, APIs - What Does it all Mean?

Photo of Mark Wareham by Mark Wareham

There are many acronyms in the Java world. Here's a list of some commonly used acronyms and what they mean.


JCP - Java Community Process

The Java Community Process is simply the process by which Java EE was developed. It's an open process that anyone can apply to become a part of. To find out more about the JCP, visit their website: https://www.jcp.org


JSR - Java Specification Request

A JSR, or often called a 'Spec', is the description of how a certain part of the Java language should behave. It's not code, but a plain English technical document. Each JSR has a number of Spec leads and experts associated with it (In fact, Payara's Arjan Tijms is in the expert group on a few JSRs). The public can also help out during certain stages of a JSR. Once complete, it is said to be 'final'. Each JSR has an ID number, and you will sometimes see parts of the Java language being referred to by that number. (For example, JSR 919 is JavaMail).


API - Application Programming Interface

An API is what's born out of a Spec/JSR. It's the code that developers interact with in their applications. You're most likely already familiar with the Javadoc of a few APIs.


RI - Reference Implementation

An implementation is, well, an implementation of the API. It's the code that does the work. Having these two layers of code allow developers to switch between implementations easily without changing their code, as they have coded to an API, rather than an implementation.

The Reference Implementation is the implementation that proves that the spec can be executed. A working product. You will often see this in the Application Server world. Glassfish is the Reference Application Server (which uses a collection of RIs). Other Vendors often create their own implementations of various APIs.


TCK - Technology Compatibility Kit

A TCK is basically the test suite for an implementation. It confirms the implementation meets the specification.


Eclipse and Jakarta EE (formerly Java EE)

Since the Eclipse Foundation has taken over from Oracle on Java EE, the process is changing (and the name changed to Jakarta EE). It is still early days. Some things that we do know is that there is no longer a special designation of RIs, just compatible Implementations. There must be a compatible implementation available before a spec can be released. What is meant by that, is an implementation (by any vendor) that meets the specification by passing the TCK.


Eclipse Foundation are not developing the specifications themselves, that's still down to the community.

To find out more about the Jakarta EE project you can see the Jakarta EE website https://jakarta.ee

It's important to note that Java SE is not moving away from the JCP, just Jakarta EE.


How Does it all Relate to Payara?

Payara Server is a fork of Glassfish, the original Reference Implementation App Server. The fork was made about four years ago, so whilst the Payara Platform uses a lot of the same code as Glassfish, we've made thousand of improvements and changes since then.


Payara is also involved in the Jakarta EE project. We're contributing in many different ways.

If you'd like to download the open source Payara Server, or the microservices-ready version, Payara Micro, then please visit our downloads page:


 Payara Server & Payara Micro  Download Here