Enterprise Java has been defined by two players: Spring on one side and Java Enterprise Edition on the other. The Java EE set of specifications was developed in the Java Community Process under the stewardship of Oracle. The current Java EE 8 was released in September 2017; the prior version came out in 2013.
Between those releases, the industry saw a lot of change, most notably containers, the ubiquitous use of JSON, HTTP/2, and microservices architectures. Unfortunately there was not much related activity around Java EE; but users of the many Java EE-compliant servers demanded adoption of those new technologies and paradigms.
As a result, a group of vendors and community members founded MicroProfile to develop new specifications for using Java EE in microservice architectures that could be added into future versions of Java EE.
The first release of MicroProfile, in summer 2016, included three existing standards to serve as a baseline. At the end of 2016, MicroProfile joined the Eclipse Foundation (which explains Eclipse in the name) to leverage Eclipse’s strong governance and intellectual property expertise.
In 2017, there were two additional releases, and the next one is right around the corner. MicroProfile aims to release an update roughly every three months with specific content in a time-boxed way. Releases consist of a series of specifications, each developed at its own pace, and the umbrella release contains all of the specifications’ current versions.
What’s in the box?
Sweets for my sweet, sugar for my honey.
Well, luckily not, as too much sugar is bad for your health. But the individual specifications do have some pretty tasty content. Development of new specifications started after the first release.
The specifications that make up MicroProfile 1.2, which was released at JavaOne 2017, are:
- Metrics: Deals with telemetry data and how it is exposed in a uniform way. This includes data from the underlying Java virtual machine as well as data from applications.
- Health: Reports whether a service is healthy. This is important for schedulers like Kubernetes to determine if an application (container) should be killed and a new one started.
- Config: Provides a uniform way of relaying configuration data into the application independent of the configuration source.
- Fault tolerance: Includes mechanisms to make microservices resilient to failures in the network or other services they rely on, such as defining timeouts for calls to remote services, retrying policies in case of failure, and setting fallback methods.
- JWT propagation: JSON Web Token (JWT) is a token-based authentication/authorization system that allows to authenticate, authorize, and verify identities based on a security token. JWT propagation defines the interoperability and container integration requirements for JWT for use with Java EE style role-based access control.
The just-released MicroProfile 1.3 includes updates to some of the above and adds the following new specifications:
- OpenTracing: A mechanism for distributed tracing of calls across a series of microservices.
- OpenAPI: A way to document data models and REST APIs so they can be read by machines and automatically build client code from this documentation. OpenAPI was derived from the Swagger specification.
- REST client: A type-safe REST client that builds on the standard JAX-RS client to do more heavy lifting so consumer code can rely on strongly typed data and method invocations.
Upcoming releases are expected to pick up some APIs and new API versions from Java EE 8, such as JSON-B 1.0, JSON-P 1.1, CDI 2.0, and JAX-RS 2.1.
Where can I learn more?
How can I get involved?
The main communication channel is the MicroProfile discussion group. All specifications have a GitHub repository under the Eclipse organization, so they are using GitHub issues and pull requests. Also, each specification usually has a Gitter discussion group.
If you have an idea for a new MicroProfile specification, join the discussion group, present your idea, and hack away. Once others support your idea, a new repository will be created, and the more formal process can begin.