Sample Application Architecture
Last updated
Last updated
For the hands-on workshop labs you will be provided a complete spring mvc web server application together with a corresponding spring mvc thymeleaf web client app.
Table of Contents
The server application provides a RESTful service for administering books and users (a very lightweight books library).
Use cases of this application are:
Administer books (Creating/editing/deleting books)
List available books
Borrow a book
Return a borrowed book
Administer library users
The demo client and server application both are build using the Java programming language and utilizing the Spring Framework.
The following figure shows a typical Microservice technology stack implemented by various Spring projects.
The RESTful service for books and users is build using the Spring MVC annotation model and Spring HATEOAS.
The application also contains a complete documentation for the RESTful API that is automatically generated with spring rest docs. You can find this in the directory 'build/asciidoc/html5' after performing a full gradle build or online here: REST API documentation.
The server application is already secured by basic authentication and also includes authorization using static roles.
The domain model of the server application is quite simple and just consists of Book and User models. The packages of the application are organized according to the different application layers:
api: Contains the complete RESTful service
business: The service classes (quite simple for workshop, usually these contain the business logic)
dataaccess: All domain models and repositories
In addition there more packages with supporting functions:
common: Classes that are reused in multiple other packages
config: All spring configuration classes
security: All security relevant classes, e.g. a UserDetailsService implementation
To call the provided REST API you can use curl or httpie. For details on how to call the REST API please consult the REST API documentation which also provides sample requests for curl and httpie.
There are three target user roles for this application:
LIBRARY_USER: Standard library user who can list, borrow and return his currently borrowed books
LIBRARY_CURATOR: A curator user who can add, edit or delete books
LIBRARY_ADMIN: An administrator user who can list, add or remove users
Important: We will use the following users in all subsequent labs from now on:
These users are configured for basic authentication and also later for authenticating using keycloak.
You can find the provided initial server application beneath the lab 1 folder as library-server-initial.
The client is able to fulfill most of the provided uses cases by the server application like:
View all available books in a list
Borrow available books
Return my borrowed books
Create new books
All action buttons are visible depending on user authorizations, e.g. only users with LIBRARY_USER role can see the Borrow and Return buttons. The Return
The domain model of the client application is quite simple and just consists of Book and User models. The packages of the application are organized according to the different application layers:
web: Contains the complete spring web mvc layer with all required client side resources
In addition there is one more package with supporting functions:
config: All spring configuration classes
In resources/templates you find all thymeleaf html templates. These templates use the bootstrap framework that resides in resources/static folder.
There are three target user roles for this client application:
LIBRARY_USER: Standard library user who can list, borrow and return his currently borrowed books
LIBRARY_CURATOR: A curator user who can add, edit or delete books
LIBRARY_ADMIN: An administrator user who can list, add or remove users
You can find the provided initial client application beneath the lab 2 folder as library-client-initial.
Username
Password
Role
bwayne
bruce.wayne@example.com
wayne
LIBRARY_USER
bbanner
bruce.banner@example.com
banner
LIBRARY_USER
pparker
peter.parker@example.com
parker
LIBRARY_CURATOR
ckent
clark.kent@example.com
kent
LIBRARY_ADMIN
Username
Password
Role
bwayne
bruce.wayne@example.com
wayne
LIBRARY_USER
bbanner
bruce.banner@example.com
banner
LIBRARY_USER
pparker
peter.parker@example.com
parker
LIBRARY_CURATOR
ckent
clark.kent@example.com
kent
LIBRARY_ADMIN