In this installment of our series, we're going to take a look at the last of what I think of as the more traditional, app-server-based/-spawned implementations, TomEE . TomEE is a fully Java EE-enabled distribution of the venerable workhorse Tomcat, and comes with support for creating MicroProfile applications, so let's see what that looks like.
Having looked at Thorntail last time, we'll take a look at OpenLiberty this time. OpenLiberty is the open source project under which, as I understand the state of things, IBM's WebSphere Liberty is developed. In this installment, we'll give its MicroProfile support a quick spin.
In the last installment , we talked about Payara Micro. In this, we're going to look at Thorntail . Thorntail, née WildFly Swarm, is based on WildFly from Red Hat and is said to be "just enough app-server". Much like Payara Micro, Thorntail exposes a battle-tested application server platform, stripped down for microservices usage. Let's a take a look at what it takes to deploy our application on Thorntail.
Payara Micro is a MicroProfile implementation from the good folks at Payara, based on Payara Server, which is itself based on GlassFish. Whew! If you're familiar with either GlassFish or Payara, you should feel right at home with Payara Micro.
To start our investigation, we need an application to work with. Part of the problem with getting started applications is making sure that your example is complicated enough to be interesting, but not so complicated that the greater message is lost in the details of the app. MicroProfile 2.0 is made up of a number of components:
-
MicroProfile Config 1.3
-
MicroProfile Fault Tolerance 1.1
-
MicroProfile Health Check 1.0
-
MicroProfile JWT Authentication 1.1
-
MicroProfile Metrics 1.1
-
MicroProfile OpenAPI 1.0
-
MicroProfile OpenTracing 1.1
-
MicroProfile Rest Client 1.1
-
CDI 2.0
-
Common Annotations 1.3
-
JAX-RS 2.1
-
JSON-B 1.0
-
JSON-P 1.1
To include all of those in this would probably be a bit too much technical weight for a getting started effort, so, for this example, I've leaned (probably too far) toward simple. Our application will have a single JAX-RS resource, into which is injected a single CDI bean. The point is to have a working REST endpoint, with an inject "service layer", to show a MicroProfile in action, allowing us to verify that our basic environment is configured and working correctly. From there you are free to load on all the complexity you find you need. That's exactly what I'll be doing in a separate project. :)