Uship (µship) is a lightweight microservice stack for modern applications.

Pre-requisites

  1. Ensure to use java >= 11

  2. (Optional) Ensure to use a dependency manager such as Apache Maven/Gradle/SBT or Apache Ivy.

Tip
using SDKMan can greatly simplify the installation.

Development stack

The goal of µShip is to promote and enable JSON-RPC development at scale. For that it provides a CDI-Servlet integration module known as jsonrpc-core module.

However, µShip also provides all the underlying stack to make it functional such as:

  • An embedded Servlet container (Apache Tomcat),

  • JSON-P/JSON-B integration modules,

  • JSON-RPC API/implementation and documentation utilities,

  • A configuration module to easily inject properties.

Tip
as of today, µShip does not go further - as providing a configuration/openmetrics/opentracing/JWT integration since these ones can easily be added using CDI libraries. It will probably be tackled in a few versions but was not a pre-requisite of the project.

Deployment capabilities/integration

By using CDI standalone (a.k.a. CDI SE) and an embedded Apache Tomcat, µShip enables to deliver application as:

  • Assemblies (just use java -cp folder-with-dependencies-and-application-jars/*.jar com.app.YourMain - or reuse µShip main),

  • Docker images using jib-maven-plugin.

Tip
by using a flat classpath, µShip is perfectly compatible with java CDS which boosts a lot the startup in general, don’t hesitate to set it up if you care to start in less than a second.

Testing

Once again, by using a plain CDI base, testing is made easy and compatible with Apache OpenWebBeans tooling.

HTTP Server

Once again, by using a plain CDI base, testing is made easy and compatible with Apache OpenWebBeans tooling.

HTTP Client

UShip extends the JVM HttpClient to provide a few more features and callbacks. It also provides a Kubernetes client module which auto-setup a HttpClient from a POD.

Persistence

UShip provides a convenient JDBC light mapper.

Configuration

UShip provide a module to easily inject properties.

Spring Boot

If you want a Spring Boot JSON-RPC integration, you can reuse our jsonrpc-spring module.

Quarkus

If you want a Quarkus JSON-RPC integration, you can reuse our jsonrpc-quarkus module.

Microprofile

If you want a Microprofile JSON-RPC integration, you can reuse our jsonrpc-core module with some minimal setup.

CLI

jsonrpc-cli module enables to reuse the backend JSON-RPC programming style to write a CLI. It flattenize the objects/lists/maps in a property style to enable to pass any option to the CLI. This way you can reuse your "commands" from the command line or backend.

Go further with GraalVM

You can also make your JSON-RPC (or web) server "native" thanks GraalVM. See the related documentation to learn more about it.