Skip to content

Closes #311 - Bump Spring Boot 4#426

Open
bruderj15 wants to merge 61 commits into
masterfrom
task/#311-spring-boot-4
Open

Closes #311 - Bump Spring Boot 4#426
bruderj15 wants to merge 61 commits into
masterfrom
task/#311-spring-boot-4

Conversation

@bruderj15

@bruderj15 bruderj15 commented Mar 18, 2026

Copy link
Copy Markdown
Member

I basically did four things:

  • Migrated Jackson 2 to 3 for all non-camunda7-side running code
  • Migrated Spring Boot 3 to 4
  • Migrated Camunda 7 Test-Suite to run Camunda 7 via external Docker container instead of in-JVM Process-Engine
  • Collapsed Camunda 8 Multi-Tenancy tests into single new class as flakiness seemed to have gotten worse with Camunda 8.9: no more flaky (and redundant) tests

Definition of Done

  • The corresponding ticket is in state In Review
  • The corresponding ticket is attached to this Pull-Request
  • The commit-message-format Closes #ISSUE_ID - PROBLEM/SOLUTION
    • is present as single-commit already or
    • will be squashed on merge
  • The changes pass the SonarQubeCloud-Quality-Gate
  • If the documentation needs an update, following there's a link to it: Closes #188 - Java 21 & SpringBoot 4 kadai-doc#191
  • If extra release-notes are required, they're listed indented below:

@bruderj15 bruderj15 linked an issue Mar 18, 2026 that may be closed by this pull request
4 tasks
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
42.9% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

…ot-4

# Conflicts:
#	.github/workflows/continuous-integration.yml
#	kadai-adapter-camunda7-parent/kadai-adapter-camunda-system-connector/src/main/java/io/kadai/adapter/monitoring/Camunda7HealthIndicator.java
#	kadai-adapter-camunda7-parent/kadai-adapter-camunda-system-connector/src/main/java/io/kadai/adapter/monitoring/Camunda7OutboxHealthIndicator.java
#	kadai-adapter-camunda7-parent/kadai-adapter-camunda-system-connector/src/main/java/io/kadai/adapter/systemconnector/camunda/config/Camunda7SystemConnectorConfiguration.java
#	kadai-adapter-camunda7-parent/kadai-adapter-camunda-system-connector/src/test/java/io/kadai/adapter/monitoring/Camunda7HealthIndicatorTest.java
#	kadai-adapter-camunda7-parent/kadai-adapter-camunda-system-connector/src/test/java/io/kadai/adapter/monitoring/Camunda7OutboxHealthIndicatorTest.java
#	kadai-adapter-camunda8-parent/pom.xml
@bruderj15 bruderj15 marked this pull request as ready for review May 21, 2026 14:31
.areNotDeclaredIn(ArchitectureTest.class)
.should()
.haveNameMatching("^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$")
.allowEmptyShould(true)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we allow this? As far as i know this bypasses test failures if the criteria in the that() clause evaluate to zero matching classes, right? Is that the case here or why do we need this?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. We need it because besides the arch-test there are no tests in the module (anymore).
CI failed before that change here: https://github.com/kadai-io/KadaiAdapter/actions/runs/25724530689/job/75533993183

Weird behavior from arch imo - they didn't use the well-known all-quantification semantics.

private double doubleField;
private boolean booleanField;
private ProcessVariableTestObjectTwo processVariableTestObjectTwoField;
private List<ProcessVariableTestObjectTwo> processVariableTestObjectTwoField;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why did you change this to a List?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because the helper class moved.
Previously the C7 spring-boot-test copy of ProcessVariableTestObject already used List<ProcessVariableTestObjectTwo> and the tests asserted that JSON array shape.

With Camunda now running in Docker, the helper classes need to come from kadai-adapter-camunda-listener-example and are staged into the Camunda container. I changed that copy to match the old kadai-adapter-camunda-spring-boot-test test fixture and keep the existing acceptance-test payload semantics.

import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(classes = Camunda7SpringBootExample.class, webEnvironment = RANDOM_PORT)
class Camunda7SpringBootExampleIntegrationTest {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this covered somewhere else now?

@bruderj15 bruderj15 Jun 16, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It inherently is with the acceptance-tests for C7, isn't it?

<artifactId>resteasy-servlet-spring-boot-starter</artifactId>
<version>${version.resteasy.spring.boot}</version>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we change from resteasy to jersey? I remember jersey was creating issues some 5 years+ ago

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jersey is only used for tests and examples so we're fine either way I guess.

</goals>
</execution>
<execution>
<id>default-jar</id>

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks very hacky

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah not pretty at all, but intentional.
The C7 test suite has to copy the current reactor-built listener jar into the Camunda BPM Run container’s userlib during process-test-resources, before Maven’s normal package jar exists.
Early jar execution makes that local artifact available for container startup.

Comment thread kadai-adapter-camunda7-parent/kadai-adapter-camunda-spring-boot-test/pom.xml Outdated
* This class is responsible for setting complex variables containing Objects on a camunda user
* task.
*/
public class ComplexProcessVariableSetter implements JavaDelegate {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all those classes you deleted aren't needed anymore?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They've been moved to kadai-adapter-camunda-listener-example

Map<String, Object> valueInfo = new HashMap<>();
valueInfo.put("serializationDataFormat", "application/json");
valueInfo.put("objectTypeName", processVariable.getValue().getClass());
if (processVariable instanceof ObjectValue) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is thouroughly tested? Because it changes the core logic

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reverted these changes.
They were relicts from experimentations.
Very good spot!

@leantios leantios left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I looked at the C8 changes. Looks good generally. With C8.9, we have the possibility that the tests share a runtime, making the tests faster: https://docs.camunda.io/docs/apis-tools/testing/configuration/#shared-runtime. Should we integrate that here or in a different PR?

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
50.7% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@bruderj15 bruderj15 requested review from gitgoodjhe and leantios June 17, 2026 13:18
@leantios

Copy link
Copy Markdown
Contributor

Looks good from my side!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bump to SpringBoot Version 4

3 participants