Serverless Workflow Specification

This document describes the information about the implementation of the Cloud Native Computing Foundation (CNCF) Serverless Workflow specification. SonataFlow implements version 0.8 of the Serverless Workflow specification.

The following table shows the implementation status for each Serverless Workflow specification feature.

SonataFlow does not support Retries, Sleep State, and has a limited support of Timeouts features of Serverless Workflow specification.

Table 1. Implementation status icons
Icon Description

Fully implemented feature and compliant with the Serverless Workflow specification

Partially implemented feature

Not implemented

Table 2. Implementation status of the Serverless Workflow specification features
Feature Status Reference

States

Workflow States

Functions

Function Definition

Events

Event Definition

Serverless Workflow data

Workflow Data

Expressions

Workflow Expressions

Error handling

Workflow Error Handling

Retries

Retry Definition

Timeouts

Workflow Timeouts

Compensation

Workflow Compensation

Constants

Workflow Constants

Secrets

Workflow Secrets

States

The Parallel State of the workflow states feature works in a single thread. This means that a Parallel State does not create one thread per branch, simulating an actual parallel behavior.

If an exclusive property is set to `false`, you should not use the link:{spec_doc_url}#event-state[Event State] of the workflow states feature as the starting state. In case, if it is specified that way, then it will behave as if an exclusive property was set to `true`.

SonataFlow does not support the Sleep State feature. However, this feature will be supported in a future release.

The following table shows all the workflow states that SonataFlow supports in the Serverless Workflow specification 0.8 version:

Table 3. Workflow States implementation status
State Status Reference

Event

Event State

Operation

Operation State

Switch

Switch State

Sleep

Sleep State

Parallel

Parallel State

Inject

Inject State

ForEach

ForEach State

Callback

Callback State

Functions

The following table shows the status of the workflow functions that SonataFlow supports:

Table 4. Workflow Functions implementation status
Function Status Reference

REST

Using Functions for RESTful Service Invocations

RPC

Using Functions for RPC Service Invocations

Expression

Using Functions for Expression Evaluation

Async API

Using Functions for Async API Service Invocations

GraphQL

Using Functions for GraphQL Service Invocations

OData

Using Functions for OData Service Invocations

Custom

Defining custom function types

For additional functions, the Serverless Workflow specification support the custom function type, such as sysout and java. For more information about these custom function types, see Custom functions for your SonataFlow service.

Events

SonataFlow supports events of the workflow model as defined in the Serverless Workflow specification definition, except the following:

  • resultEventRef property in EventRefDefinition is not implemented and, if specified, this property is ignored. The same functionality can be achieved by using Callback state.

  • Correlation has limited support, that evaluates correlation rules matching a single event consumed per time with a workflow instance. The correlation among N different events to be consumed and matched with a workflow instance is not supported in SonataFlow. For more information about event correlation, see Event correlation in SonataFlow.

Serverless Workflow data

SonataFlow supports the implementation of the data manipulation feature using jq (default) or jsonpath expressions.

jsonpath expressions can have limitations in specific scenarios of complex data manipulation. For more information, see Workflow Data section in the Serverless Workflow specification documentation.

SonataFlow also supports data filtering. For more information about the data filtering, see State data filters section in the Serverless Workflow specification documentation.

Expressions

SonataFlow supports jq or jsonpath to define the workflow expressions. jq is the default expression language, however, if you want to use jsonpath, set the expressionLang attribute in the workflow definition as shown in the following example:

Example of changing the default expression language
{
  "id": "myworkflow",
  "version": "1.0",
  "expressionLang": "jsonpath",
  "name": "Workflow example",
  "description": "An example of how to use jsonpath expressions"
}

jsonpath expression is not recommended because of the limitations of the language for data manipulation. Instead, you can use jq in various use cases.

Error handling

SonataFlow supports the error handling feature as described in the Serverless Workflow specification definition.

For more information about error handling, see Error handling in SonataFlow.

Retries

SonataFlow does not support Retries feature, however, it will be implemented in a future release.

Alternatively, you can use Error handling in SonataFlow.

Timeouts

SonataFlow has limited support for the timeouts feature, which covers only workflow and event timeouts.

For start event state the exclusive property is not supported if set to false, therefore the timeout is not supported for the event state when starting a workflow.

For more information about timeouts, see Timeouts on events for SonataFlow.

Compensation

SonataFlow supports workflow compensation as described in the Serverless Workflow specification definition.

For more information about compensations, see Saga orchestration example in SonataFlow.

Constants

SonataFlow supports workflow constants as described in the Serverless Workflow specification definition.

Secrets

SonataFlow supports workflow secrets as described in the Serverless Workflow specification definition.

Secrets are associated with the Quarkus Configuration module. This means that any form of configuration that Quarkus supports is also supported in SonataFlow.

Found an issue?

If you find an issue or any misleading information, please feel free to report it here. We really appreciate it!