This is an automated email from the ASF dual-hosted git repository.
fjtiradosarti pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-examples.git
The following commit(s) were added to refs/heads/main by this push:
new 72ec5092d [Fix #3465]Adding Sonataflow DMN example (#1906)
72ec5092d is described below
commit 72ec5092d17029a20dca6dedc88ec54d8ae52452
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Mon Apr 22 12:02:16 2024 +0200
[Fix #3465]Adding Sonataflow DMN example (#1906)
* [Fix #3465]Adding Sonataflow DMN example
* Update
serverless-workflow-examples/serverless-workflow-dmn-quarkus/README.md
Co-authored-by: Gonzalo Muñoz <[email protected]>
---------
Co-authored-by: Gonzalo Muñoz <[email protected]>
---
serverless-workflow-examples/pom.xml | 1 +
.../serverless-workflow-dmn-quarkus/README.md | 115 +++++++++++
.../serverless-workflow-dmn-quarkus/pom.xml | 182 ++++++++++++++++
.../src/main/resources/Traffic Violation.dmn | 230 +++++++++++++++++++++
.../src/main/resources/application.properties | 29 +++
.../src/main/resources/traffic violation.sw.json | 24 +++
.../org/kie/kogito/examples/DMNGreetRestIT.java | 53 +++++
7 files changed, 634 insertions(+)
diff --git a/serverless-workflow-examples/pom.xml
b/serverless-workflow-examples/pom.xml
index 4fac574db..962cbd298 100644
--- a/serverless-workflow-examples/pom.xml
+++ b/serverless-workflow-examples/pom.xml
@@ -53,6 +53,7 @@
<module>serverless-workflow-custom-type</module>
<module>serverless-workflow-data-index-persistence-addon-quarkus</module>
<module>serverless-workflow-data-index-quarkus</module>
+ <module>serverless-workflow-dmn-quarkus</module>
<module>serverless-workflow-error-quarkus</module>
<module>serverless-workflow-events-quarkus</module>
<module>serverless-workflow-expression-quarkus</module>
diff --git
a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/README.md
b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/README.md
new file mode 100644
index 000000000..73a37c047
--- /dev/null
+++ b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/README.md
@@ -0,0 +1,115 @@
+# Kogito Serverless Workflow - DMN Example
+
+## Description
+
+This example contains a simple workflow service that use DMN.
+The services are described using JSON format as defined in the
+[CNCF Serverless Workflow
specification](https://github.com/serverlessworkflow/specification).
+
+The workflow expects as JSON input containing driver details and a traffic
violation
+(see details in the [Submit a request](#Submit-a-request) section).
+
+The workflow uses that input to execute a decision file which evaluates if the
driver should be suspended or not.
+
+## Installing and Running
+
+### Prerequisites
+
+You will need:
+ - Java 17+ installed
+ - Environment variable JAVA_HOME set accordingly
+ - Maven 3.9.6+ installed
+
+When using native image compilation, you will also need:
+ - [GraalVm](https://www.graalvm.org/downloads/) 19.3.1+ installed
+ - Environment variable GRAALVM_HOME set accordingly
+ - Note that GraalVM native image compilation typically requires other
packages (glibc-devel, zlib-devel and gcc) to be installed too. You also need
'native-image' installed in GraalVM (using 'gu install native-image'). Please
refer to [GraalVM installation
documentation](https://www.graalvm.org/docs/reference-manual/aot-compilation/#prerequisites)
for more details.
+
+### Compile and Run in Local Dev Mode
+
+```sh
+mvn clean package quarkus:dev
+```
+
+### Compile and Run in JVM mode
+
+```sh
+mvn clean package
+java -jar target/quarkus-app/quarkus-run.jar
+```
+
+or on windows
+
+```sh
+mvn clean package
+java -jar target\quarkus-app\quarkus-run.jar
+```
+
+### Compile and Run using Local Native Image
+Note that this requires GRAALVM_HOME to point to a valid GraalVM installation
+
+```sh
+mvn clean package -Pnative
+```
+
+To run the generated native executable, generated in `target/`, execute
+
+```sh
+./target/serverless-workflow-dmn-quarkus-{version}-runner
+```
+
+## Example Usage
+
+Once the service is up and running, you can use the following example to
interact with the service.
+
+### POST /Traffic Violation
+
+Returns penalty information from the given inputs -- driver and violation:
+
+Given inputs:
+
+```json
+{
+ "Driver":{"Points":2},
+ "Violation":{
+ "Type":"speed",
+ "Actual Speed":120,
+ "Speed Limit":100
+ }
+}
+```
+
+Curl command (using the JSON object above):
+
+```sh
+curl -X POST -H 'Accept: application/json' -H 'Content-Type: application/json'
-d '{"Driver":{"Points":2},"Violation":{"Type":"speed","Actual
Speed":120,"Speed Limit":100}}' http://localhost:8080/traffic-violation
+```
+or on Windows:
+
+```sh
+curl -X POST -H "Accept: application/json" -H "Content-Type: application/json"
-d "{\"Driver\":{\"Points\":2},\"Violation\":{\"Type\":\"speed\",\"Actual
Speed\":120,\"Speed Limit\":100}}" http://localhost:8080/traffic-violation
+```
+
+As response, penalty information is returned.
+
+Example response:
+
+```json
+{"workflowdata":
+ {
+ "Violation":{
+ "Type":"speed",
+ "Speed Limit":100,
+ "Actual Speed":120
+ },
+ "Driver":{
+ "Points":2
+ },
+ "Fine":{
+ "Points":3,
+ "Amount":500
+ },
+ "Should the driver be suspended?":"No"
+ }
+}
+```
\ No newline at end of file
diff --git
a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/pom.xml
b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/pom.xml
new file mode 100644
index 000000000..626db11bf
--- /dev/null
+++ b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/pom.xml
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.kie.kogito.examples</groupId>
+ <artifactId>serverless-workflow-examples-parent</artifactId>
+ <version>999-SNAPSHOT</version>
+ <relativePath>../serverless-workflow-examples-parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.kie.kogito.examples</groupId>
+ <artifactId>serverless-workflow-dmn-quarkus</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Kogito Example :: Serverless Workflow :: DMN:: Quarkus</name>
+ <description>Kogito Serverless Workflow DMN Example - Quarkus</description>
+ <properties>
+ <quarkus-plugin.version>3.2.10.Final</quarkus-plugin.version>
+ <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
+ <quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
+ <quarkus.platform.version>3.2.10.Final</quarkus.platform.version>
+ <kogito.bom.group-id>org.kie.kogito</kogito.bom.group-id>
+ <kogito.bom.artifact-id>kogito-bom</kogito.bom.artifact-id>
+ <kogito.bom.version>999-SNAPSHOT</kogito.bom.version>
+ <maven.compiler.release>17</maven.compiler.release>
+ <version.compiler.plugin>3.8.1</version.compiler.plugin>
+ <version.failsafe.plugin>3.0.0-M7</version.failsafe.plugin>
+ </properties>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>${quarkus.platform.group-id}</groupId>
+ <artifactId>${quarkus.platform.artifact-id}</artifactId>
+ <version>${quarkus.platform.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ <dependency>
+ <groupId>${kogito.bom.group-id}</groupId>
+ <artifactId>${kogito.bom.artifact-id}</artifactId>
+ <version>${kogito.bom.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.kie.sonataflow</groupId>
+ <artifactId>sonataflow-quarkus</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-resteasy</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-quarkus-decisions</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.kie.kogito</groupId>
+ <artifactId>kogito-serverless-workflow-dmn-parser</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-resteasy-jackson</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.kie</groupId>
+ <artifactId>kie-addons-quarkus-source-files</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit5</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>rest-assured</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-smallrye-health</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <finalName>${project.artifactId}</finalName>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${version.compiler.plugin}</version>
+ <configuration>
+ <release>${maven.compiler.release}</release>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>${quarkus.platform.group-id}</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <version>${quarkus-plugin.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <version>${version.failsafe.plugin}</version>
+ <configuration>
+ <systemPropertyVariables>
+
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
+ <maven.home>${maven.home}</maven.home>
+ </systemPropertyVariables>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <profiles>
+ <profile>
+ <id>container</id>
+ <activation>
+ <property>
+ <name>container</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.profile>container</quarkus.profile>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-container-image-jib</artifactId>
+ </dependency>
+ </dependencies>
+ </profile>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ </profile>
+ </profiles>
+</project>
diff --git
a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/Traffic
Violation.dmn
b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/Traffic
Violation.dmn
new file mode 100644
index 000000000..109d4689e
--- /dev/null
+++
b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/Traffic
Violation.dmn
@@ -0,0 +1,230 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<dmn:definitions xmlns:dmn="http://www.omg.org/spec/DMN/20180521/MODEL/"
xmlns="https://github.com/kiegroup/drools/kie-dmn/_A4BCA8B8-CF08-433F-93B2-A2598F19ECFF"
xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
xmlns:kie="http://www.drools.org/kie/dmn/1.2"
xmlns:feel="http://www.omg.org/spec/DMN/20180521/FEEL/"
xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/"
xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
id="_1C792953-80DB-4B32-99EB-25FBE32BAF9E" name="Traffic Violation [...]
+ <dmn:extensionElements/>
+ <dmn:itemDefinition id="_63824D3F-9173-446D-A940-6A7F0FA056BB"
name="tDriver" isCollection="false">
+ <dmn:itemComponent id="_9DAB5DAA-3B44-4F6D-87F2-95125FB2FEE4" name="Name"
isCollection="false">
+ <dmn:typeRef>string</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_856BA8FA-EF7B-4DF9-A1EE-E28263CE9955" name="Age"
isCollection="false">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_FDC2CE03-D465-47C2-A311-98944E8CC23F" name="State"
isCollection="false">
+ <dmn:typeRef>string</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_D6FD34C4-00DC-4C79-B1BF-BBCF6FC9B6D7" name="City"
isCollection="false">
+ <dmn:typeRef>string</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_7110FE7E-1A38-4C39-B0EB-AEEF06BA37F4"
name="Points" isCollection="false">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemComponent>
+ </dmn:itemDefinition>
+ <dmn:itemDefinition id="_40731093-0642-4588-9183-1660FC55053B"
name="tViolation" isCollection="false">
+ <dmn:itemComponent id="_39E88D9F-AE53-47AD-B3DE-8AB38D4F50B3" name="Code"
isCollection="false">
+ <dmn:typeRef>string</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_1648EA0A-2463-4B54-A12A-D743A3E3EE7B" name="Date"
isCollection="false">
+ <dmn:typeRef>date</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_9F129EAA-4E71-4D99-B6D0-84EEC3AC43CC" name="Type"
isCollection="false">
+ <dmn:typeRef>string</dmn:typeRef>
+ <dmn:allowedValues kie:constraintType="enumeration"
id="_626A8F9C-9DD1-44E0-9568-0F6F8F8BA228">
+ <dmn:text>"speed", "parking", "driving under the influence"</dmn:text>
+ </dmn:allowedValues>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_DDD10D6E-BD38-4C79-9E2F-8155E3A4B438" name="Speed
Limit" isCollection="false">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_229F80E4-2892-494C-B70D-683ABF2345F6" name="Actual
Speed" isCollection="false">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemComponent>
+ </dmn:itemDefinition>
+ <dmn:itemDefinition id="_2D4F30EE-21A6-4A78-A524-A5C238D433AE" name="tFine"
isCollection="false">
+ <dmn:itemComponent id="_B9F70BC7-1995-4F51-B949-1AB65538B405"
name="Amount" isCollection="false">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_F49085D6-8F08-4463-9A1A-EF6B57635DBD"
name="Points" isCollection="false">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemComponent>
+ </dmn:itemDefinition>
+ <dmn:inputData id="_1929CBD5-40E0-442D-B909-49CEDE0101DC" name="Violation">
+ <dmn:variable id="_C16CF9B1-5FAB-48A0-95E0-5FCD661E0406" name="Violation"
typeRef="tViolation"/>
+ </dmn:inputData>
+ <dmn:decision id="_4055D956-1C47-479C-B3F4-BAEB61F1C929" name="Fine">
+ <dmn:variable id="_8C1EAC83-F251-4D94-8A9E-B03ACF6849CD" name="Fine"
typeRef="tFine"/>
+ <dmn:informationRequirement id="_800A3BBB-90A3-4D9D-BA5E-A311DED0134F">
+ <dmn:requiredInput href="#_1929CBD5-40E0-442D-B909-49CEDE0101DC"/>
+ </dmn:informationRequirement>
+ <dmn:decisionTable id="_C8F7F579-E06C-4A2F-8485-65FAFAC3FE6A"
hitPolicy="UNIQUE" preferredOrientation="Rule-as-Row">
+ <dmn:input id="_B53A6F0D-F72C-41EF-96B3-F31269AC0FED">
+ <dmn:inputExpression id="_974C8D01-728F-4CE5-8C69-BE884125B859"
typeRef="string">
+ <dmn:text>Violation.Type</dmn:text>
+ </dmn:inputExpression>
+ </dmn:input>
+ <dmn:input id="_D5319F80-1C59-4736-AF2D-D29DE6B7E76D">
+ <dmn:inputExpression id="_3FEB4DE3-90C6-438E-99BF-9BB1BF5B078A"
typeRef="number">
+ <dmn:text>Violation.Actual Speed - Violation.Speed Limit</dmn:text>
+ </dmn:inputExpression>
+ </dmn:input>
+ <dmn:output id="_9012031F-9C01-44E5-8CD2-E6704D594504" name="Amount"
typeRef="number"/>
+ <dmn:output id="_7CAC8240-E1A5-4FEB-A0D4-B8613F0DE54B" name="Points"
typeRef="number"/>
+ <dmn:rule id="_424A80AE-916F-4451-9B6B-71557F7EC65A">
+ <dmn:inputEntry id="_EDA4F336-AA28-4F5F-ADFC-401E6DCC8D35">
+ <dmn:text>"speed"</dmn:text>
+ </dmn:inputEntry>
+ <dmn:inputEntry id="_246AAB08-A945-4599-9220-7C24B6716FDD">
+ <dmn:text>[10..30)</dmn:text>
+ </dmn:inputEntry>
+ <dmn:outputEntry id="_E49345EE-51D3-47C7-B658-3607E723FF37">
+ <dmn:text>500</dmn:text>
+ </dmn:outputEntry>
+ <dmn:outputEntry id="_1D56F3CB-6BAE-4415-940F-00F37121813D">
+ <dmn:text>3</dmn:text>
+ </dmn:outputEntry>
+ </dmn:rule>
+ <dmn:rule id="_B1ECE6A9-6B82-4A85-A7CA-5F96CDB0DCB6">
+ <dmn:inputEntry id="_2390F686-65CF-40FF-BF9A-72DFBAEBACAC">
+ <dmn:text>"speed"</dmn:text>
+ </dmn:inputEntry>
+ <dmn:inputEntry id="_8CEBE4D5-DBEF-46EF-BD95-7B96148B6D8A">
+ <dmn:text>>= 30</dmn:text>
+ </dmn:inputEntry>
+ <dmn:outputEntry id="_5FCC56B7-6BAA-4B09-AC61-7EB9D4CD58C3">
+ <dmn:text>1000</dmn:text>
+ </dmn:outputEntry>
+ <dmn:outputEntry id="_79FF8FDD-3299-4DFD-AA14-D2022504BDAD">
+ <dmn:text>7</dmn:text>
+ </dmn:outputEntry>
+ </dmn:rule>
+ <dmn:rule id="_8FC7068C-A3FD-44D9-AC2B-69C160A12E5D">
+ <dmn:inputEntry id="_02EEE8A9-1AD7-4708-8EC8-9B4177B05167">
+ <dmn:text>"parking"</dmn:text>
+ </dmn:inputEntry>
+ <dmn:inputEntry id="_A5141FF4-8D63-49DB-8979-3B64A3BD9A82">
+ <dmn:text>-</dmn:text>
+ </dmn:inputEntry>
+ <dmn:outputEntry id="_EFDA632D-113D-46C9-94B8-78E9F9770CA4">
+ <dmn:text>100</dmn:text>
+ </dmn:outputEntry>
+ <dmn:outputEntry id="_05F86973-52CE-4C9D-B785-47B6340D10FD">
+ <dmn:text>1</dmn:text>
+ </dmn:outputEntry>
+ </dmn:rule>
+ <dmn:rule id="_A742DF2B-DC91-4166-9773-6EF86A45A625">
+ <dmn:inputEntry id="_F5B5AE87-D9E6-4142-B01D-D79D4BA49EEE">
+ <dmn:text>"driving under the influence"</dmn:text>
+ </dmn:inputEntry>
+ <dmn:inputEntry id="_BD2A43F5-46D8-436A-B8A1-D98747C836B1">
+ <dmn:text>-</dmn:text>
+ </dmn:inputEntry>
+ <dmn:outputEntry id="_ECAF3378-46B6-4F40-B95A-E90DB700BF7D">
+ <dmn:text>1000</dmn:text>
+ </dmn:outputEntry>
+ <dmn:outputEntry id="_F0016A9C-D1D0-472A-9FB3-ABE77AD15F7D">
+ <dmn:text>5</dmn:text>
+ </dmn:outputEntry>
+ </dmn:rule>
+ </dmn:decisionTable>
+ </dmn:decision>
+ <dmn:inputData id="_1F9350D7-146D-46F1-85D8-15B5B68AF22A" name="Driver">
+ <dmn:variable id="_A80F16DF-0DB4-43A2-B041-32900B1A3F3D" name="Driver"
typeRef="tDriver"/>
+ </dmn:inputData>
+ <dmn:decision id="_8A408366-D8E9-4626-ABF3-5F69AA01F880" name="Should the
driver be suspended?">
+ <dmn:question>Should the driver be suspended due to points on his
license?</dmn:question>
+ <dmn:allowedAnswers>"Yes", "No"</dmn:allowedAnswers>
+ <dmn:variable id="_40387B66-5D00-48C8-BB90-E83EE3332C72" name="Should the
driver be suspended?" typeRef="string"/>
+ <dmn:informationRequirement id="_982211B1-5246-49CD-BE85-3211F71253CF">
+ <dmn:requiredInput href="#_1F9350D7-146D-46F1-85D8-15B5B68AF22A"/>
+ </dmn:informationRequirement>
+ <dmn:informationRequirement id="_AEC4AA5F-50C3-4FED-A0C2-261F90290731">
+ <dmn:requiredDecision href="#_4055D956-1C47-479C-B3F4-BAEB61F1C929"/>
+ </dmn:informationRequirement>
+ <dmn:context id="_F39732F1-0AA7-468F-86C4-DCC07E6F81CF">
+ <dmn:contextEntry>
+ <dmn:variable id="_09385E8D-68E0-4DFD-AAD8-141C15C96B71" name="Total
Points" typeRef="number"/>
+ <dmn:literalExpression id="_F1BEBF16-033F-4A25-9523-CAC23ACC5DFC">
+ <dmn:text>Driver.Points + Fine.Points</dmn:text>
+ </dmn:literalExpression>
+ </dmn:contextEntry>
+ <dmn:contextEntry>
+ <dmn:literalExpression id="_1929D813-B1C9-43C5-9497-CE5D8B2B040C">
+ <dmn:text>if Total Points >= 20 then "Yes" else "No"</dmn:text>
+ </dmn:literalExpression>
+ </dmn:contextEntry>
+ </dmn:context>
+ </dmn:decision>
+ <dmndi:DMNDI>
+ <dmndi:DMNDiagram>
+ <di:extension>
+ <kie:ComponentsWidthsExtension>
+ <kie:ComponentWidths
dmnElementRef="_C8F7F579-E06C-4A2F-8485-65FAFAC3FE6A">
+ <kie:width>50.0</kie:width>
+ <kie:width>254.0</kie:width>
+ <kie:width>329.0</kie:width>
+ <kie:width>119.0</kie:width>
+ <kie:width>100.0</kie:width>
+ <kie:width>186.0</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths
dmnElementRef="_F39732F1-0AA7-468F-86C4-DCC07E6F81CF">
+ <kie:width>50.0</kie:width>
+ <kie:width>100.0</kie:width>
+ <kie:width>398.0</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths
dmnElementRef="_F1BEBF16-033F-4A25-9523-CAC23ACC5DFC">
+ <kie:width>398.0</kie:width>
+ </kie:ComponentWidths>
+ <kie:ComponentWidths
dmnElementRef="_1929D813-B1C9-43C5-9497-CE5D8B2B040C">
+ <kie:width>398.0</kie:width>
+ </kie:ComponentWidths>
+ </kie:ComponentsWidthsExtension>
+ </di:extension>
+ <dmndi:DMNShape id="dmnshape-_1929CBD5-40E0-442D-B909-49CEDE0101DC"
dmnElementRef="_1929CBD5-40E0-442D-B909-49CEDE0101DC" isCollapsed="false">
+ <dmndi:DMNStyle>
+ <dmndi:FillColor red="255" green="255" blue="255"/>
+ <dmndi:StrokeColor red="0" green="0" blue="0"/>
+ <dmndi:FontColor red="0" green="0" blue="0"/>
+ </dmndi:DMNStyle>
+ <dc:Bounds x="708" y="350" width="100" height="50"/>
+ <dmndi:DMNLabel/>
+ </dmndi:DMNShape>
+ <dmndi:DMNShape id="dmnshape-_4055D956-1C47-479C-B3F4-BAEB61F1C929"
dmnElementRef="_4055D956-1C47-479C-B3F4-BAEB61F1C929" isCollapsed="false">
+ <dmndi:DMNStyle>
+ <dmndi:FillColor red="255" green="255" blue="255"/>
+ <dmndi:StrokeColor red="0" green="0" blue="0"/>
+ <dmndi:FontColor red="0" green="0" blue="0"/>
+ </dmndi:DMNStyle>
+ <dc:Bounds x="709" y="210" width="100" height="50"/>
+ <dmndi:DMNLabel/>
+ </dmndi:DMNShape>
+ <dmndi:DMNShape id="dmnshape-_1F9350D7-146D-46F1-85D8-15B5B68AF22A"
dmnElementRef="_1F9350D7-146D-46F1-85D8-15B5B68AF22A" isCollapsed="false">
+ <dmndi:DMNStyle>
+ <dmndi:FillColor red="255" green="255" blue="255"/>
+ <dmndi:StrokeColor red="0" green="0" blue="0"/>
+ <dmndi:FontColor red="0" green="0" blue="0"/>
+ </dmndi:DMNStyle>
+ <dc:Bounds x="369" y="344" width="100" height="50"/>
+ <dmndi:DMNLabel/>
+ </dmndi:DMNShape>
+ <dmndi:DMNShape id="dmnshape-_8A408366-D8E9-4626-ABF3-5F69AA01F880"
dmnElementRef="_8A408366-D8E9-4626-ABF3-5F69AA01F880" isCollapsed="false">
+ <dmndi:DMNStyle>
+ <dmndi:FillColor red="255" green="255" blue="255"/>
+ <dmndi:StrokeColor red="0" green="0" blue="0"/>
+ <dmndi:FontColor red="0" green="0" blue="0"/>
+ </dmndi:DMNStyle>
+ <dc:Bounds x="534" y="83" width="133" height="63"/>
+ <dmndi:DMNLabel/>
+ </dmndi:DMNShape>
+ <dmndi:DMNEdge id="dmnedge-_800A3BBB-90A3-4D9D-BA5E-A311DED0134F"
dmnElementRef="_800A3BBB-90A3-4D9D-BA5E-A311DED0134F">
+ <di:waypoint x="758" y="375"/>
+ <di:waypoint x="759" y="235"/>
+ </dmndi:DMNEdge>
+ <dmndi:DMNEdge id="dmnedge-_982211B1-5246-49CD-BE85-3211F71253CF"
dmnElementRef="_982211B1-5246-49CD-BE85-3211F71253CF">
+ <di:waypoint x="419" y="369"/>
+ <di:waypoint x="600.5" y="114.5"/>
+ </dmndi:DMNEdge>
+ <dmndi:DMNEdge id="dmnedge-_AEC4AA5F-50C3-4FED-A0C2-261F90290731"
dmnElementRef="_AEC4AA5F-50C3-4FED-A0C2-261F90290731">
+ <di:waypoint x="759" y="235"/>
+ <di:waypoint x="600.5" y="114.5"/>
+ </dmndi:DMNEdge>
+ </dmndi:DMNDiagram>
+ </dmndi:DMNDI>
+</dmn:definitions>
\ No newline at end of file
diff --git
a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/application.properties
b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/application.properties
new file mode 100644
index 000000000..a67a41103
--- /dev/null
+++
b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/application.properties
@@ -0,0 +1,29 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+quarkus.native.native-image-xmx=8g
+
+quarkus.devservices.enabled=false
+
+# profile to pack this example into a container, to use it execute activate
the maven container profile, -Dcontainer
+%container.quarkus.container-image.build=true
+%container.quarkus.container-image.push=false
+%container.quarkus.container-image.group=${USER}
+%container.quarkus.container-image.registry=dev.local
+%container.quarkus.container-image.tag=1.0-SNAPSHOT
\ No newline at end of file
diff --git
a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/traffic
violation.sw.json
b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/traffic
violation.sw.json
new file mode 100644
index 000000000..b1f615e48
--- /dev/null
+++
b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/traffic
violation.sw.json
@@ -0,0 +1,24 @@
+{
+ "id" : "traffic-violation",
+ "name" : "traffic-violation",
+ "version" : "1_0",
+ "start" : "traffic-violation",
+ "functions" : [ {
+ "name" : "DMNTest",
+ "operation" : "dmn",
+ "type" : "custom",
+ "metadata" : {
+ "file" : "Traffic Violation.dmn",
+ "namespace" :
"https://github.com/kiegroup/drools/kie-dmn/_A4BCA8B8-CF08-433F-93B2-A2598F19ECFF",
+ "model" : "Traffic Violation"
+ }
+ } ],
+ "states" : [ {
+ "actions" : [ {
+ "functionRef" : "DMNTest"
+ } ],
+ "name" : "traffic-violation",
+ "type" : "operation",
+ "end" : true
+ } ]
+}
\ No newline at end of file
diff --git
a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/test/java/org/kie/kogito/examples/DMNGreetRestIT.java
b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/test/java/org/kie/kogito/examples/DMNGreetRestIT.java
new file mode 100644
index 000000000..0d13fc98c
--- /dev/null
+++
b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/test/java/org/kie/kogito/examples/DMNGreetRestIT.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.kogito.examples;
+
+import org.junit.jupiter.api.Test;
+
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+import io.restassured.http.ContentType;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.Matchers.is;
+
+@QuarkusIntegrationTest
+class DMNGreetRestIT {
+ @Test
+ public void testEvaluateTrafficViolation() {
+ given()
+ .body("{\n" +
+ " \"Driver\": {\n" +
+ " \"Points\": 2\n" +
+ " },\n" +
+ " \"Violation\": {\n" +
+ " \"Type\": \"speed\",\n" +
+ " \"Actual Speed\": 120,\n" +
+ " \"Speed Limit\": 100\n" +
+ " }\n" +
+ "}")
+ .contentType(ContentType.JSON)
+ .when()
+ .post("/Traffic Violation")
+ .then()
+ .statusCode(200)
+ .body("'Should the driver be suspended?'", is("No"));
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]