Drombler JStore (working title) is the emerging next generation, cross-platform application store.
Drombler JStore provides first class support for Java applications and especially targets the post-Java 11 era.
For this purpose Drombler JStore also manages the following native components:
- JRE: There are RESTful services to discover new JRE update versions and download JREs for your target platform.
- JavaFX (possibly supported in the future)
This solution targets various end-user and enterprise scenarios.
This project provides the actual backend with RESTful services.
For more information about this project and the related software components see: http://www.drombler.org/drombler-jstore
mvn clean install
Please note that the develop branch (SNAPSHOT version) of the project might depend on SNAPSHOT versions of other projects.
If you don't want to build the dependent projects as well, please make sure to define a proxy in your Maven Repository Manager to the following Maven Repository: https://oss.sonatype.org/content/repositories/snapshots/ and include it in your single group.
org.drombler.jstore.JStoreApp is a Spring Boot application.
Local Swagger: http://localhost:5000/swagger-ui.html
Staging Swagger: http://drombler-jstore-staging.us-east-1.elasticbeanstalk.com/swagger-ui.html
To interact with the Drombler JStore manually, you can use the Drombler JStore Client, a JavaFX-based desktop client (work in progress).
Drombler JStore provides a REST API with JSON payloads.
You can find the latest JSON Schemas in the GitHub project Drombler JStore protocol.
Beside applications Drombler JStore also manages some native components.
Drombler JStore applications can reference in their Application Descriptor managed native components in a platform independent way.
Managed components (applications and native components) can be downloaded and upgraded by the Drombler JStore Client Agent (work in progress), which has to be installed on the client platform.
Drombler JStore manages JREs (Java Runtime Environments).
Currently only JREs provided by Oracle are supported. In the future this project could also support other JRE vendors.
The currently supported Oracle JREs can be found here.
To search for JRE versions for a particular platform the following REST service can be used:
POST /managed-components/jre-version-search
(Please note that our staging environment is for testing purpose only!)
Here is a sample request payload:
{
"selectedJREs": [
{
"jreInfo": {
"jreVendorId": "oracle",
"javaSpecificationVersion": "11"
},
"installedImplementationVersion": "11+28"
},
{
"jreInfo": {
"jreVendorId": "oracle",
"javaSpecificationVersion": "8"
},
"installedImplementationVersion": "8u181-b13"
}
],
"systemInfo": {
"osName": "linux",
"osArch": "x64"
}
}
Please note that the installedImplementationVersion
property is optional.
Provide it if you already have a JRE installed for the provided jreVendorId
and javaSpecificationVersion
.
In this case the upgradableJREs
property of the response will only contain entries if the latest version is newer.
If you omit it then you will always get the latest version.
In the systemInfo
section you can specify the details of the platform.
The response will look something like this (please not that the specification is not final yet):
{
"upgradableJREs": [
{
"jreInfo": {
"jreVendorId": "oracle",
"javaSpecificationVersion": "11",
"customJREId": "",
"modules": []
},
"latestUpgradableJREImplementationVersion": "11.0.1+13",
"jreImplementationId": "openjdk-11.0.1_linux-x64_bin.tar.gz",
"jreImplementationFileName": "openjdk-11.0.1_linux-x64_bin.tar.gz",
"checksums": [
{
"algorithm": "sha256",
"hashValue": "7a6bb980b9c91c478421f865087ad2d69086a0583aeeb9e69204785e8e97dcfd"
}
]
},
{
"jreInfo": {
"jreVendorId": "oracle",
"javaSpecificationVersion": "8",
"customJREId": "",
"modules": []
},
"latestUpgradableJREImplementationVersion": "8u191-b12",
"jreImplementationId": "jre-8u191-linux-x64.tar.gz",
"jreImplementationFileName": "jre-8u191-linux-x64.tar.gz",
"checksums": [
{
"algorithm": "sha256",
"hashValue": "813f48192558fea793af22c96b1b708694bffe36111a33d354f312c1c1ae4bf2"
},
{
"algorithm": "md5",
"hashValue": "6f3cce9c6e35b4e53844e6cfe64781ea"
}
]
}
]
}
With the specified jreVendorId
and the returned jreImplementationId
you can then download the JRE like this:
GET /managed-components/jres/{jreVendorId}/{jreImplementationId}
(Please note that our staging environment is for testing purpose only!)
(Please note that this call is not supported by Swagger yet, but works e.g. from the Drombler JStore Client Agent.)
The call will be redirected to the according download link.
For the provided Java 11 entry in the response above the call could look like this:
If the jreImplementationId
is not a proper file name you can use the jreImplementationFileName
property to get a valid file name.
You can validate the downloaded files using the checksums
provided in the search response.
You can then use the latestUpgradableJREImplementationVersion
in the next search as the value for the property installedImplementationVersion
.