Integrating DMN Validation on BC, Maven, Kogito, ...and beyond!
03 August 2021
In this post I want to highlight all the integrations of the kie-dmn-validation
module on several platforms.
What is it?
In a previous post, we have seen how the Drools DMN validation module was integrated specifically on the Kogito platform. As a short review, the kie-dmn-validation module offer several features for:
- validation of DMN model against specification XSDs
- static validation of DMN file
- e.g.: pre-compilation phase semantic validations (duplicate names, missing decision logic, etc.)
- fun-fact: static validation is performed with… Drools rules!
- compilation phase checks
- decision tables static analysis
- implements Method & Style checks
- semantic checks
- Hit Policy recommender
- Experimental features, such as the MC/DC test case generator
The pre-compilation phase, where semantic validations are performed statically by introspecting deserialised DMN models, make use of Drools rules to ensure the conformance requirements from the DMN specification itself are respected in the DMN model provided by the user.
Integration on Kie v7: Business Central and Maven (KJAR)
Speaking of Kie (v7) platforms, the DMN Validation is performed out of the box:
- When editing a DMN Model on Business Central
the Validation is performed when clicking the Save button, and when the full project is being built. - When building the KJAR-based project with Maven
the Validation is performed by thekie-maven-plugin
for any DMN model knowledge asset found in the KJAR project automatically
There is some fine-print about out of the box DMN Validation enabled features, on the Kie v7 platform:
kie-maven-plugin | DMN Editor on BC | |
VALIDATE_SCHEMA compliance with DMN xml |
Active by default | Skipped (always skipped) |
VALIDATE_MODEL semantic validation |
Active by default | Always performed |
VALIDATE_COMPILATION consistency during compilation |
Active by default | Always performed* |
ANALYZE_DECISION_TABLE decision table static analysis |
Active by default | Always performed |
* except for DMN->Java integration checks (DROOLS-5577)
The table summarises how Business Central and the kie-maven-plugin use validation features of the DMN Validation module. There is no option to customize which features to use on BC. When using a Maven build of a KJAR project with the kie-maven-plugin, you can customize which features to use; you can reference to this chapter in the documentation referring to "Configurable DMN validation in Drools" and the validateDMN
option of the kie-maven-plugin configuration.
Integration on Kogito
As mentioned in the previous post, the kie-dmn-validation module is integrated out of the box on the Kogito platform, during the code generation phase.
All DMN Validation features are enabled by default. You can customize with a configuration option whether to disable this validation integration; you can reference to this chapter in the documentation referring to "Configurable DMN validation in Kogito" and the kogito.decisions.validation
option of the Kogito application configuration.
Integration on JIT executor
The Just-in-Time (JIT) executor is an experimental module based on Kogito, Quarkus and Native Image compilation; it is meant as a foundational tool to support development-time of DMN models and other knowledge assets.
The JIT Executor provides integration of the kie-dmn-validation to perform all the DMN validation by means of an API; you can reference the documentation for more details.
You might be interested to know the JIT Executor is the underlying engine empowering the local DMN runner, described in this post.
Conclusions
As we have seen in this article, not only the kie-dmn-validation
module provides several helpful features to validate DMN model during build-time, such as semantic validation and Decision Table static analysis!
It is also a set of comprehensive capabilities which we have integrated for you on several platforms, including Kie v7 KJAR maven build, Business Central, Kogito and Kogito toolings!
Have you tried it? Let us know your feedback in the comments below!