Flowable-spring-boot-starter-rest not registering endpoints

Hello everyone,
I spent a day trying to figure that out, followed a bunch of tutorials (ie. this one) and I have no luck. I’m trying to run Flowable in a spring boot app and expose the REST endpoints, so that other service could just call the POST /repository/deployments. The endpoints are just not there. I added Actuator to see the mappings and the Flowable endpoints are not there (my custom controller is, so the Spring configuration generally works).

My build.gradle:

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.1.2'
	id 'io.spring.dependency-management' version '1.1.2'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.flowable:flowable-spring-boot-starter-rest:6.8.0'
    runtimeOnly 'com.h2database:h2'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
}

The application.properties:

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=ALWAYS

The logs output:

18:19:30: Executing 'bootRun'...

> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :resolveMainClassName UP-TO-DATE

> Task :bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.1.2)

2023-08-23T18:19:31.690+02:00  INFO 29329 --- [           main] c.b.f.FlowableRestApplication            : Starting FlowableRestApplication using Java 17.0.7 with PID 29329 (/Users/mpiatkowski/work/sandbox/flowable-rest/build/classes/java/main started by mpiatkowski in /Users/mpiatkowski/work/sandbox/flowable-rest)
2023-08-23T18:19:31.692+02:00  INFO 29329 --- [           main] c.b.f.FlowableRestApplication            : No active profile set, falling back to 1 default profile: "default"
2023-08-23T18:19:32.271+02:00  INFO 29329 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-08-23T18:19:32.276+02:00  INFO 29329 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-08-23T18:19:32.277+02:00  INFO 29329 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.11]
2023-08-23T18:19:32.335+02:00  INFO 29329 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-08-23T18:19:32.336+02:00  INFO 29329 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 618 ms
2023-08-23T18:19:32.654+02:00  INFO 29329 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 13 endpoint(s) beneath base path '/actuator'
2023-08-23T18:19:32.691+02:00  INFO 29329 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-08-23T18:19:32.699+02:00  INFO 29329 --- [           main] c.b.f.FlowableRestApplication            : Started FlowableRestApplication in 1.178 seconds (process running for 1.346)

The endpoints are not there. Am I missing some configuration?

The controllers are there. Try accessing the REST API and you’ll see it.

The reason why you don’t see them in the actuator/mappings after the start is due to the fact the we use different Dispatcher Servlets for each of the different engines. In addition to that, those dispatcher servlets are loaded lazily.

In order to access them you’ll need to put the right servlet context path. e.g. for the Process engine it would be process-api. So for your example it would be a GET process-api/repository/deployments to list the available deployments

Once you try to reach some of the APIs you’ll be able to see them in actuator/mappings as well.

What you can also do is to load the servlets synchronously during server startup. You can do this by setting the following properties;

  • flowable.process.servlet.load-on-startup=1 - For the /process-api
  • flowable.cmmn.servlet.load-on-startup=1 - For the /cmmn-api
  • flowable.dmn.servlet.load-on-startup=1 - For the /dmn-api

Hope this helps.

Cheers,
Filip

Hi @filiphr,
thank you for your explanation. Unfortunatelly this also doesn’t work. I was trying that before finding a few similar threads on this forum. I tried:

  • just call GET http://localhost:8080/process-api/repository/deployments
  • Add flowable.process.servlet.load-on-startup=1 and try the same endpoint again

In both cases I’m getting 404s. There must be something missing I don’t understand.

EDIT:
I pushed my code to Github, if that helps: GitHub - renegat59/flowable-rest-test: Test of Setting up Flowable with REST endpoints

Hi @filiphr ,
I discovered interesting thing. Now I follow this presentation and I found out, that the endpoints are being exposed when I use this exact versions that are used in the presentation:

  • Spring 2.6.8
  • Flowable 6.7.2
  • Java 11

So I started testing different configurations, and it came out that updating Spring to 2.7.14, Flowable to 6.8.0 and Java to 17 didn’t change anything. However updating Spring Boot to 3.1.2 breaks it. The endpoints just stop responding.

I did some more testing and it looks like Flowable 6.8.0 doesn’t work with any Spring Boot 3.x version. It will only work if I update Flowable to version 7.0.0 which I understand is not a production ready version. I didn’t see it in any documentation which is a pity.

Anyway, the problem is solved. Thanks for your support!

Hey @mateusz,

Indeed Flowable 6.x only works with Boot 1.x and 2.x. Spring Boot 3.x is Java 17 baseline and Jakarta namespaces. Therefore we have a milestones releases for Flowable 7 to work with Spring Boot 3.x.

Cheers,
Filip