J-Spring 2025

Op donderdag 5 november 2025 ging ik naar de J-Spring conferentie van de NLJUG, in de Jaarbeurs in Utrecht.

Keynotes

De dag begon met een muzikaal duo, op viool en saxofoon, erg leuk. Daarna de keynotes, een overzicht van de dag en natuurlijk applaus voor de sponsors en een inleiding in het programma door de mensen van de NLJUG en daarna een presentatie van John Sterken van CHILIT over hoe je je dependencies op een framework beter kunt omdraaien, zodat je je domein code onafhankelijk houdt van een framework. Erg interessant.

Hands-on lab Clean hexagonal onion

De rest van de ochtend deed ik mee met de hands-on lab Clean hexagonal onion, heel cool. Maik Kingma behandelde Domain drive design, iets waar ik de laatste tijd steeds meer interesse in krijg. Sloot dus ook mooi aan op de keynote van CHILIT. Daarna konden we ons uitleven op een bookshop case. De workshop vind je hier en de github repository met de code hier. Mijn aantekeningen zet even onderaan deze pagina Het was een leuke workshop, maar natuurlijk was er veel te weinig tijd om alles af te krijgen. Huiswerk mee dus!

Middagsessies

Na de lunch was er eerst een NLJUG update en daarna een presentatie van Alexander Chatzizacharias, die in IntelliJ jaren 80 en 90 games had gebouwd, die je code als input gebruikten voor klassieke games als Pong, Space invaders en Pacman. Erg leuk, al bleef er niet veel van de code over na het spelen van een spelletje! Gelukkig hebben we version control.

Identity crisis

Daarna een presentatie van Christian Schuszter, die werkt bij het CERN in Zwitserland. Hij liet zien hoe het in Spring makkelijk is om een impersonation feature te bouwen, waarmee je de identiteit van een gebruiker kunt overnemen om te zien wat die gebruiker ziet.

The magic behind Java annotations

Álvaro Sánchez-Mariscal hield een presentatie over annotations in Java, en wat die achter de schermen doen, runtime en/of compile time. Hij had een leuk stukje over Lombok, met vooral de tip om het niet te gebruiken. Zijn redenen: Lombok past class files aan, wat compilers eigenlijk willen voorkomen. De ontwikkelaars van Lombok moeten dus voor elke Java versie en elke compiler weer undocumented features gebruiken om het voor elkaar te krijgen. De presentatie van Alvaro vind je hier

Performance pitfalls in JPA

De laatste presentatie die ik bijwoonde was van Jos Roseboom en ging over wat JPA kan doen met de performance van je applicatie, vooral door onnodige database-calls, die sessies openen en langer dan nodig vasthouden. Erg interessant, zijn presentatie vind je hier en de code van de Funfactstore die hij gebruikt voor de demo hier.

Afsluiting

Tot slot was er dan nog de borrel, toen even langs de Manneken Pis voor een Vlaamse friet en weer naar huis.

Een leuke maar lange dag!

Hands-on lab Clean Hexagonal Onion

Screaming architecture

  • well organized and modularized
  • clear and explicit boundaries between components
  • so well-organized that it screams its purpose

It's the understanding or misunderstanding of the developer that gets released to production

  • Alberto Brandolini

SOLID principles Dependency inversion: dependencies altijd van buiten naar binnen, richting het domein, geen framework annotaties in het domein

Hexagonal onion

  • domain
    • business logic
    • domain model
    • domain events (trigger logic in different systems)
    • domain services (state changing functionality in entities or aggregates)
  • Domain interaction layer (or service layer)
    • only layer that is allowed to interact with the domain core
    • business services that call domain services
    • defines ports
    • application services
    • flows (use cases)
    • application events
  • Outer layers (examples)
    • Query
      • Data exposing APIs (not domain core objects, think of what the client needs)
      • No writing!
    • Command
      • state altering endpoints
      • no reading! (usually happens in separate call because command is processed async)
    • Process
      • Async Event processing
      • Handlers
      • Domain & Application events
    • Data
      • model can be different than domain model
      • technical requirements should not affect business model
    • Anti Corruption Layer
      • protects the system from being corrupted by systems we do not control
      • casts / serializes data that we receive to something we are in control of
      • 3rd party service consumers
      • REST interfaces
      • Message Queue consumers & producers
  • Driving adapters vs driven adapters

Domain driven design

Principles

  • Ubiquitous language
  • Bounded Contexts - Strategic design
  • Domain model - Tactical design
    • Entities
    • Value objects
    • Aggregates
    • Repositories
    • Factories
    • Domain services
    • Domain events
  • Context maps

Where to start?

Start small!

workshop:

  • JDK17 Solution & TDD branches available Guided bit.ly/cho-docs