I'm working on a proof-of-concept that needs to provide runtime support for the execution of business processes.

Luckily for me there are quite a few open source workflow engines to choose from.

I thought I'd start by taking a look at Flowable.

Getting Started

The easiest way to get started with Flowable is to use a Docker image, for example:

docker pull flowable/all-in-one
docker run -d --name flowable \
  -p 8080:8080 \
  flowable/all-in-one

The flowable/all-in-one image includes Flowable's web applications:

  • Flowable Identity Management: http://localhost:8080/flowable-idm
  • Flowable Modeler: http://localhost:8080/flowable-modeler
  • Flowable Task: http://localhost:8080/flowable-task
  • Flowable Admin: http://localhost:8080/flowable-admin

Navigate to the Flowable Task application: http://localhost:8080/flowable-task and you will be redirected to Flowable's Identity Management application. Sign in using the default user id: admin and password: test

You will then be redirected back to the Flowable Task application:

flowable-task-landing-page

Click on the Task App card to view Flowable's Tasks list:

flowable-task-list

We haven't created any tasks yet so the Tasks list will be empty. Let's jump right in and create our first task, click the Create Task button and enter a name and a description:

my-first-task

Then click the Create button:

my-first-task-2

Now that we have successfully created our first task, lets take a quick look at Flowable's REST API.

Flowable REST API

The flowable/all-in-one image also includes Flowable's REST API.

For example, GET runtime/tasks

curl -i 'http://admin:test@localhost:8080/flowable-task/process-api/runtime/tasks'

You should see output like:

{
    "data": [
        {
            "id": "5df96793-fda4-11e8-aa29-0242ac110002",
            "url": "http://localhost:8080/flowable-task/process-api/runtime/tasks/5df96793-fda4-11e8-aa29-0242ac110002",
            "owner": null,
            "assignee": "admin",
            "delegationState": null,
            "name": "My First Task",
            "description": "My first Flowable task",
            "createTime": "2018-12-12T00:25:02.784Z",
            "dueDate": null,
            "priority": 50,
            "suspended": false,
            "taskDefinitionKey": null,
            "scopeDefinitionId": null,
            "scopeId": null,
            "scopeType": null,
            "tenantId": "",
            "category": null,
            "formKey": null,
            "parentTaskId": null,
            "parentTaskUrl": null,
            "executionId": null,
            "executionUrl": null,
            "processInstanceId": null,
            "processInstanceUrl": null,
            "processDefinitionId": null,
            "processDefinitionUrl": null,
            "variables": []
        }
    ],
    "total": 1,
    "start": 0,
    "sort": "id",
    "order": "asc",
    "size": 1
}

Note: The flowable/all-in-one image doesn't include Flowable's OpenAPI (Swagger) docs.

Flowable OpenAPI (Swagger) docs

The flowable/flowable-rest image includes the Flowable OpenAPI (Swagger) docs:

docker pull flowable-rest
docker run -d --name flowable-rest \
  -p 5001:8080 \
  flowable/flowable-rest

Navigate to: http://localhost:5001/flowable-rest/docs

flowable-open-api

To list all running containers:

docker container ls

You should see output like:

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
7e5bcf8817b2        flowable/all-in-one   "/opt/tomcat/bin/cat…"   35 hours ago        Up 17 hours         0.0.0.0:8080->8080/tcp   flowable

You can stop a container using the following command:

docker container stop [name]

For example:

docker container stop flowable

What's Next

In the next post, we'll use Flowable's Modeler to model a business process and Flowable's REST API to interact with process instances and User tasks.

Source Code:
Sample Code:
References: