[TASK] Lunch and Learn — Devoxx Belgium 2025: Java 21→25 in the dotCMS codebase
@fabrizzio-dotCMS is already working on this.
Since Dec 19, 2025.
- 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.xml→dotcms.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
corecodebase 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 indotCMS/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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.