Spezifikation / Framework-APICore2.2

Jakarta Interceptors

Interceptors legen Verhalten um Methodenaufrufe, Konstruktion und Lifecycle-Events.

Einordnung
Spezifikation / Framework-API
Enterprise-Rolle
Sie trennen technische Querschnittslogik von Fachlogik, ähnlich wie AOP in anderen Stacks.
Diagramm zu Jakarta Interceptors

Fachliches Verständnis

Sie trennen technische Querschnittslogik von Fachlogik, ähnlich wie AOP in anderen Stacks. 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

  • @InterceptorBinding als fachlich benannte Bindung.
  • @AroundInvoke für Methodenumhüllung.
  • Prioritäten für Reihenfolge.
  • Kombination mit CDI und EJB.

Typische Einsatzfälle

  • Audit Logging.
  • Metriken.
  • Technische Validierung.
  • Mandantenkontext.

Technisches Beispiel

java
@Inherited
@InterceptorBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface Audited {}

@Audited
@Interceptor
@Priority(Interceptor.Priority.APPLICATION)
public class AuditInterceptor {
    @AroundInvoke
    Object around(InvocationContext ctx) throws Exception {
        long start = System.nanoTime();
        try { return ctx.proceed(); }
        finally { System.out.println(ctx.getMethod() + " took " + (System.nanoTime()-start)); }
    }
}
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

  • Zu viele unsichtbare Effekte.
  • Reihenfolge nicht dokumentiert.
  • Interceptors für Fachentscheidungen missbrauchen.

Legacy-Modernisierung

EJB Interceptors können oft fast 1:1 auf Jakarta Interceptors/CDI übertragen werden.

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?