Architecture

HAL is a client side RIA without server side dependencies. It is a GWT application - which means it’s written almost completely in Java. GWT is used to transpile the Java code into a bunch of JavaScript, HTML and CSS files. HAL also uses external JavaScript dependencies. These dependencies are managed using NPM and bundled using Parcel. NPM and Parcel are integrated into the Maven build using the maven-frontend-plugin.

We use the model view presenter pattern and GWTP for its implementation. The main business logic resides in presenters like the DataSourcePresenter. Presenters are responsible for holding state and talk to the management interface. The views are used to hold all UI related code. They leverage the PatternFly components and are implemented using Elemento. Views register event handlers for user interaction and interact with the presenters. The model in this scenario are usually instances of ModelNode which are the result of DMR operations. They’re passed around between the presenters and views.

For more details about the different parts of the console and how they work together see building blocks.

Technical Stack

In a nutshell the console uses the following technical stack:

Maven Modules

HAL consists of many maven modules, each of which serves a specific purpose. Here’s the list of the most important modules (a-z) and a quick description:

ModuleDescription
hal-ballroomCore UI classes like Form, Dialog or Table
hal-bomBill of materials (declaration of all HAL modules)
hal-build-configBuild configuration like checkstyle rules, code formatting and licenses.
hal-code-parentParent POM for all modules with code
hal-configConfiguration classes for the environment, operation mode, current user and its roles
hal-consoleMain application containing the GWT entry point
hal-coreCore HAL API
hal-dbThin wrapper around PouchDB
hal-dmrDMR related code to execute operation, read results and work with model nodes
hal-flowExecute asynchronous tasks in order
hal-gwt-parentParent POM for all GWT related modules
hal-jsJavaScript related helper classes
hal-metaMetadata related classes to encapsulate the different parts of the resource descriptions
hal-parentParent POM for all other modules
hal-processorsAnnotation processors for code generation
hal-resourcesI18n resources, images and HTML snippets
hal-spiSPI related classes and annotations
hal-standaloneQuarkus based app to start the console in standalone mode
hal-testsuite-resourcesMaven setup to assemble classes from different modules and make them available as one dependency for the test suite
hal-theme-parentDifferent HAL themes
hal-theme-eapTheme used for JBoss EAP
hal-theme-halTheme used for the standalone mode
hal-theme-wildflyTheme used for WildFly

Dependencies

Here’s the dependency graph of the main maven modules and the main external dependencies as generated by the degraph-maven-plugin: