dotCMS / dotCMS/core

[TASK] Lunch and Learn — Devoxx Belgium 2025: Java 21→25 in the dotCMS codebase

Open
#34,154 2 comments 0 reactions 1 assignee View on GitHub

@fabrizzio-dotCMS is already working on this.

Since Dec 19, 2025.

Team : Scout
Dominant language
Java
Stars
970
Forks
486
Avg merge
3d 33m
Merged PRs (30d)
170

Description

Description

Show-and-tell of the material I brought back from Devoxx Belgium 2025, delivered as a Lunch and Learn.

Scope change: the original topic on this issue was Memory Leaks. After reviewing the sessions I attended, the talk has been re-scoped to Java 21 → 25 and what it means for the dotCMS codebase, which is far more actionable for the team now that core compiles to Java 25 (parent/pom.xmldotcms.core.compiler.release=25). Memory-related content survives as the GC segment (topic 4), not as a standalone leak-hunting talk.

Talk structure

Four topics, each split between two speakers: one presents the Java language/runtime concept, the other presents how it lands in the dotCMS codebase — with real examples from core, an explicit when it is a good idea and when it is not, and the adoption implications.

# Topic Java concepts
1 The Three Amigos Records, sealed types, pattern matching
2 Java 21 → 25 Flexible constructor bodies, scoped values, stream gatherers, AOT, compact object headers
3 Loom in JDK 25 Virtual threads, structured concurrency, scoped values
4 Garbage Collection G1 vs ZGC, choosing a collector, making GC observable
My part

The dotCMS half of each topic. Not slideware — every claim is backed by code in this repository:

  • Concrete examples in the core codebase for each concept.
  • When to adopt and when not to, grounded in constraints we have actually hit (Velocity introspection, Jackson round-trips, OSGi/plugin ABI stability, existing Immutables-based modelling).
  • Implications of adoption: source vs binary compatibility, serialization contracts, plugin extensibility, test and benchmark needs.

Deliverable: a PR against this issue carrying the example code and the accompanying write-up.

Acceptance Criteria
  • Prep and get good material to rock an awesome presentation
  • Topic 1 — Three Amigos: dotCMS examples + adopt/do-not-adopt guidance
  • Topic 2 — Java 21→25 APIs: dotCMS examples + adopt/do-not-adopt guidance
  • Topic 3 — Loom: dotCMS examples + adopt/do-not-adopt guidance
  • Topic 4 — GC: dotCMS baseline, candidate experiments, observability
  • PR opened and linked to this issue
Priority

None

Additional Context

Baseline of the codebase as of this update, which is what makes the dotCMS half worth presenting:

  • Core compiles to Java 25, so all of the above is available today with no version gate.
  • sealed: zero usages anywhere in dotCMS/src/main/java.
  • record: 15 declarations across 12 files, nearly all of them in the vendor-neutral search layer.
  • The codebase models immutable data with Immutables (@Value.Immutable), so for this team the real question is Immutables vs records and open vs sealed hierarchies — not POJO vs record.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.