Getting Started
Uship (µship) is a lightweight microservice stack for modern applications.
Pre-requisites
-
Ensure to use java >= 11
-
(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.