What's new with REST in Open Liberty in 2018?

It’s been a few months since you heard from us, so we wanted to check in and let you know about a few things we’ve been working on and a preview of what we’ve got in the 18.0.0.4 release of Open Liberty.

First, let’s take a look back at what we’ve done earlier this year. Over the summer, we shipped JAX-RS 2.1 in Open Liberty 18.0.0.2. This adds powerful new features like the Reactive Client, Server Sent Events, and more. If you missed it, check out our 18.0.0.2 blog post.

In September, we delivered the MicroProfile Rest Client 1.1 in Liberty 18.0.0.3. This adds asynchronous methods, URI support, better integration with CDI and a RestClientBuilderListener for third-party libraries to integrate with client instances.

While our upcoming 18.0.0.4 release won’t have any blockbuster spec implementations, we have still been hard at work. Here are some of the things we’ve been working on:

New async transport layer

We integrated the Apache HTTP Client transport layer from the CXF project. This improves asynchronous method invocations - in some performance benchmarks, we measured a 20-25% improvement in throughput (your mileage may vary).

Connection pooling enhancements

The JAX-RS client has had HTTP connection pooling for a while, but HTTPS connections were not being pooled. As more and more services require HTTPS (this is a good thing!), it can be a burden for systems to construct, tear down and reconstruct connections to the same endpoint. Starting with Liberty 18.0.0.4, HTTPS connections are now pooled.

Reactive extensions

JAX-RS 2.1 introduced the reactive client, but the spec only requires vendors to implement it using Java 8’s CompletionStage API. Other reactive frameworks can integrate with the reactive client, but that is optional in the spec. With Liberty 18.0.0.4, it is now possible to use these extensions. We’ve tested with RxJava 1 and 2 using providers from Apache CXF and Jersey, and we plan to test more. If there is a particular reactive technology that you would like to use, and it has a JAX-RS RxInvokerProvider implementation, please let us know!

Properties handling in the MicroProfile Rest Client

The RestClientBuilder and MicroProfile Config allows users to specify custom properties to the Rest Client instance. Now, you can use JAX-RS Client properties, such as:

  • com.ibm.ws.jaxrs.client.keepalive.connection - which you can set to close to prevent keeping connections alive for multiple requests

  • com.ibm.ws.jaxrs.client.connection.timeout - milliseconds to wait for the HTTP connection to be established before timing out

  • com.ibm.ws.jaxrs.client.receive.timeout - milliseconds to wait for a response from the remote service once the connection has been established

  • com.ibm.ws.jaxrs.client.proxy.host - hostname of the proxy server to use for requests from this client instance

  • com.ibm.ws.jaxrs.client.proxy.port - port number of the proxy server to use for requests from this client instance

Other bug fixes and minor enhancements

We’re constantly trying to improve the JAX-RS and MicroProfile Rest Client implementation. Sometimes we find things to fix on our own, and sometimes our users help us find bugs to fix. If you discover a bug or can think of something that we can do in Open Liberty to make it better, please let us know! The best way is probably to open an issue in GitHub, but you can also talk with us on the Open Liberty mailing list.

Thanks for checking in with us; we hope you enjoy our 18.0.0.4 release!

Share this post: