Spezifikation / Framework-APIConcurrency3.1
Jakarta Concurrency
Jakarta Concurrency bietet containerverwaltete Executor Services, Context Propagation und asynchrone Aufgaben.
Einordnung
Spezifikation / Framework-API
Enterprise-Rolle
Threads dürfen in EE-Anwendungen nicht beliebig selbst erzeugt werden; die Runtime muss Ressourcen und Kontext kontrollieren.
Fachliches Verständnis
Threads dürfen in EE-Anwendungen nicht beliebig selbst erzeugt werden; die Runtime muss Ressourcen und Kontext kontrollieren. In der Praxis ist wichtig, die Spezifikation nicht mit der konkreten Runtime zu verwechseln. Der Standard beschreibt die portablen APIs, die Implementierung entscheidet über Konfiguration, Performance, Betrieb und Support.
Kernkonzepte
- ManagedExecutorService.
- ManagedScheduledExecutorService.
- ContextService.
- Virtual-Threads-aware Konzepte in EE 11 Umfeld.
Typische Einsatzfälle
- Nebenläufige Hintergrundaufgaben.
- Parallele I/O-Aufrufe unter Containerkontrolle.
Technisches Beispiel
java
@ApplicationScoped
public class ExternalPriceAggregator {
@Resource ManagedExecutorService executor;
public CompletionStage<PriceSummary> load(String sku) {
return CompletableFuture.supplyAsync(() -> callSupplierA(sku), executor)
.thenCombine(CompletableFuture.supplyAsync(() -> callSupplierB(sku), executor),
PriceSummary::merge);
}
}
Architekturregel: Jakarta APIs gehören an Systemgrenzen und Infrastrukturpunkte. Fachentscheidungen bleiben in Application Services und Domain-Modellen testbar und möglichst unabhängig vom Container.
Enterprise-Fallen
- new Thread() im Servercode.
- Security/Transaction Context verlieren.
- Unbegrenzte Pools.
Legacy-Modernisierung
Alte selbstgebaute Threadpools werden durch containerverwaltete Executors ersetzt.
Vertiefung: Review-Fragen für Senior-Entwickler
- Welche Spezifikation ist hier wirklich nötig?
- Welche Runtime-Funktion wird genutzt und ist sie portabel?
- Wo liegt die Transaktionsgrenze?
- Sind API-Verträge, DTOs und Domain-Modelle getrennt?
- Ist der Code ohne Application Server testbar?