Different behaviors in DMN engines

Hello,

I used the official Camunda DMN simulator to test that when we have many table decisions (e.g. Dish and Beverages), with this configuration in inputs :

  • Decision Table : Beverages
  • guestCount
  • season
  • guestWithChildren

The dish is calculated and implicitly passed in as an input of the Beverages table. (When we selected as a decision table All Tables, we have the same result).

I have tested the below three forms of the DMN engine using the same DMN file (the official example Dinner Decision) using the same configuration of inputs, but I don’t have the same outcome. Actually, I get an error that stipulates that the dish input is required for the table Beverages. This means that the dish value (output of Dish, and input of Beverage) is not calculated implicitly. All the below forms of the DMN engine require the dish input to be provided explicitly.

The below DMN engines are to be found here : GitHub - camunda/dmn-scala: DMN engine written in Scala

  • Standalone via REST endpoint
  • Integrated into Zeebe as job worker
  • Community Zeebe DMN Worker

My question is : why do the three DMN workers mentioned above behave differently from the Camunda DMN simulator ?

Hi @y-io :wave:

thank you for raising this up!

The DMN simulator is based on (a version of) the Camunda DMN engine.
You can evaluate the DMN using one of the Camunda distributions (Tomcat Distro/Camunda Run/Docker/…).

If you want to use Zeebe instead then you can use the following community extension: GitHub - camunda-community-hub/zeebe-dmn-worker: Zeebe worker for DMN decision evaluation
It uses also the Camunda DMN engine. I checked that you can evaluate the DMN with the same inputs and outputs as the simulator.

The Zeebe worker of DMN-Scala uses a different DMN engine. The DMN engine follows the DMN specification more strictly. One difference is for example the handling of required decisions.
According to the DMN spec, the output of the decision “Dish” should be referenced as “dish” (i.e. the id/name of the decision).

Does this answer your questions?

Best regards,
Philipp