The full documentation on Ensono Stacks can be found here.
To customise the namespaces and create an application for your company please visit the full documentation
-
- Simple web API: stacks-java repository
- Web API with CQRS: stacks-java-cqrs repository
- Web API with CQRS and events: stacks-java-cqrs-events repository
-
The application is currently configured to work with the Azure environment.
It uses an Azure CosmosDB database to store the example application data. So you should have access to an instance to use with the application. Note: For running on a local Windows environment you can use the Cosmos DB emulator ( CosmosDB Emulator has a known fixed key). There is no need for CosmosDB for the simple web API implementation (1.i above) as there is no persistence layer in it. For further info please follow the link.
In addition, Azure ApplicationInsights is used for logging purposes. If this is unavailable, modify the application so that it doesn't fail to startup if it can't access ApplicationInsights, and simply log to the terminal instead.
application-insights: instrumentation-key: xxxxxx enabled: false
There are two corresponding environment variables that need to be set to interact with these systems:
AZURE_COSMOSDB_KEY AZURE_APPLICATION_INSIGHTS_INSTRUMENTATION_KEY
For Unix:
Set the two environment variables as additional variables within e.g. ~/.profile or /etc/profile.For Windows:
Open the System Properties then select the Advanced tab, then click on the Environment Variables button and add the new parameters. -
Note that at a minimum Java 17 should be installed.
Move to the
<PROJECT-NAME>/java
folder, thenFor Unix:
./mvnw spring-boot:run
For Windows:
mvnw.cmd spring-boot:run
For instructions on how to customise the project for your company please look in the Scaffolding section
-
Please refer to section "Determine which root certificates have been installed" in Setting Up CosmosDB Emulator
Move to the
<PROJECT-NAME>/java
folder, then go toapplication.yml
either comment out theapplication-insights
block or setenabled
property tofalse
. Inlogback-spring.xml
comment out the application-insight section.Set
AZURE_COSMOSDB_KEY
as an environment variable and set the value to be the primary key value on the emulator.For UNIX systems do:
./mvnw spring-boot:run -Dspring-boot.run.jvmArguments='-Djavax.net.ssl.trustStore="<Location of the root cosmos db certificate>" -Djavax.net.ssl.trustStorePassword="changeit"'
And for Windows:
mvnw.cmd spring-boot:run -Dspring-boot.run.jvmArguments='-Djavax.net.ssl.trustStore="<Location of the root cosmos db certificate>" -Djavax.net.ssl.trustStorePassword="changeit"'
-
Browse to http://localhost:9000/v1/menu. This should return a valid JSON response.
The application configuration uses Swagger/OAS3 to represent the API endpoints. The Swagger UI can be viewed by directing your browser to http://localhost:9000/swagger/index.html.
All API endpoints are (optionally) protected using Auth0. There is an auth.properties
file
within the project codebase. If the following property within this file is set:
auth.isEnabled=true
then clients will need to pass an Authorization
header containing the Bearer token generated from
Auth0 as part of the endpoint request. If the value is set to false
then no authorization is
required.
If using Auth0 for authorization, Auth0 itself will need to be configured with both an API
definition and an associated Application. There are corresponding configuration values required for
the Stacks application, within the auth.properties
file, e.g.
auth0.issuer=https://ensonostacks.eu.auth0.com/
auth0.apiAudience=https://ensonostacks.eu.auth0.com/api/v2/
These parameters are used to verify that the JWT supplied in the Authorization header of a request is valid.
- Automatically generated for the project. Go to Swagger Index to view.
- Swagger Json is here: Swagger Json
- Available at: health check (This can also be configured to run on another port)
https://docs.docker.com/docker-for-windows/install/
From the <PROJECT-NAME>/java
folder, build a Docker image using e.g. the command below:
docker build --tag stacks:1.0 .
This uses the Dockerfile
in this folder to generate the Docker image.
If you have an .m2
directory in the java/
folder, the Docker build will attempt to copy the
files inside the container and use the cached versions.
Once the Docker image is created, you can then run a Docker container based on this image using e.g.
docker run -p 9000:9000 -e AZURE_APPLICATION_INSIGHTS_INSTRUMENTATION_KEY -e AZURE_COSMOSDB_KEY stacks:1.0
which passes in the two required environment variables from your own environment.