Fachlicher Vertrag: unverändert zu erhalten
- Metrikbedeutung, Einheit und Label-Kardinalität sind dokumentiert.
- Managementzugriff ist authentisiert/autorisiert.
- Monitoring verändert das Fachverhalten nicht.
Standard MBean und direkte Registrierung wird nachvollziehbar in Actuator und Micrometer Counter überführt. Die Akte zeigt nicht nur das Ziel, sondern die tatsächlichen Dateien, APIs, Dependencies, Codebelege, Tests, Risiken und Cutover-Schritte.
| Dimension | Legacy | Modern | Migrationskonsequenz |
|---|---|---|---|
| Programmiermodell | imperativ / ohne Framework-Annotationen | Component | Annotationen und Containerfunktionen werden nur dort eingesetzt, wo sie eine konkrete technische Verantwortung übernehmen. |
| Abhängigkeiten | 1 direkte Dependencies | 2 direkte Dependencies | 2 neu, 1 entfernt; Versionen und transitive Auswirkungen im erfolgreichen Online-Build prüfen. |
| Öffentliche API | 4 erkannte Methoden | 2 erkannte Methoden | Methoden werden nach fachlicher Rolle gemappt; reine Bootstrap- und Framework-Methoden sind kein fachlicher Vertrag. |
| Datenmodell | class JmxRegistration, class TaskCounter, interface TaskCounterMBean | class TaskMetrics | Feldnamen, IDs, Null-Semantik, Gleichheit und Serialisierungsform werden separat regressionstestet. |
| Fehlerverhalten | Legacy-Exceptions und Rückgabewerte | explizitere Fach-/Framework-Fehlerabbildung | Fehler dürfen nicht nur technisch übersetzt werden; Status, Ursache, Retrybarkeit und Client-Vertrag müssen erhalten oder versioniert werden. |
| Tests | Bestands- und Golden-Master-Tests | Unit-, Slice-, Contract- und Integrationstests | Der Modern-Pfad wird zuerst gegen denselben fachlichen Vektor geprüft und danach um neue technische Risiken ergänzt. |
| Betrieb | Legacy-Start/Lifecycle | modernes Packaging, Health und externe Konfiguration | Dashboards und Alerts vor Umschaltung auf Doppelzählung und Lücken prüfen. |
| Rollback | Legacy-Artefakt bleibt unverändert | Modern-Artefakt getrennt deploybar | Kein Rollback über Datenverlust: Schema, Nachrichten und verschlüsselte Daten müssen rückwärtslesbar oder durch Dual-Read abgesichert sein. |
metric/endpoint naming and exposure
endpoint exposure, health detail and unauthorized access tests
Die Zuordnung ist semantisch: Eine Legacy-Klasse kann in mehrere moderne Rollen zerlegt werden.
| Legacy-Rolle / Datei | Modern-Rolle / Datei | Bedeutung |
|---|---|---|
| TaskCounterMBean.java + TaskCounter.java + JmxRegistration.java | TaskMetrics.java | MBean-Registrierung wird Micrometer-Metrik/Actuator-Exposition. |
| Datei | Typ | Annotationen | öffentliche API | Pattern | Zeilen |
|---|---|---|---|---|---|
| JmxRegistration.java | class JmxRegistration | — | ObjectName register(TaskCounter counter) | — | 14 |
| TaskCounter.java | class TaskCounter | — | void taskCompleted() long getCompleted() void reset() | Management Facade | 20 |
| TaskCounterMBean.java | interface TaskCounterMBean | — | — | — | 6 |
| Datei | Typ | Annotationen | öffentliche API | Pattern | Zeilen |
|---|---|---|---|---|---|
| TaskMetrics.java | class TaskMetrics | Component | void taskCompleted() double count() | Observer | 22 |
| Status | Dependency | Version | Scope | Prüfung |
|---|---|---|---|---|
| ENTFERNT | org.junit.jupiter:junit-jupiter | BOM/Parent | test | Legacy-Laufzeit entfällt oder wird durch Plattform/BOM ersetzt. |
| NEU | org.springframework.boot:spring-boot-starter-actuator | BOM/Parent | compile | Neue Laufzeit-/Testabhängigkeit; transitiv, lizenz- und security-seitig prüfen. |
| NEU | org.springframework.boot:spring-boot-starter-test | BOM/Parent | test | Neue Laufzeit-/Testabhängigkeit; transitiv, lizenz- und security-seitig prüfen. |
Die folgenden Ausschnitte stammen direkt aus den enthaltenen Projekten. Dadurch ist sichtbar, welche Verantwortung tatsächlich verschoben wurde.
Migrationsbedeutung: MBean-Registrierung wird Micrometer-Metrik/Actuator-Exposition.
projects/26-jmx-monitoring/legacy/src/main/java/at/aydin/lab/jmx/legacy/TaskCounterMBean.java
package at.aydin.lab.jmx.legacy;
public interface TaskCounterMBean {
long getCompleted();
void reset();
}
projects/26-jmx-monitoring/legacy/src/main/java/at/aydin/lab/jmx/legacy/TaskCounter.java
package at.aydin.lab.jmx.legacy;
import java.util.concurrent.atomic.AtomicLong;
// Design Pattern: Management Facade
// Zweck: Beschränkt JMX-Zugriff auf kontrollierte Monitoring-Operationen.
public final class TaskCounter implements TaskCounterMBean {
private final AtomicLong completed = new AtomicLong();
public void taskCompleted() {
completed.incrementAndGet();
}
public long getCompleted() {
return completed.get();
}
public void reset() {
completed.set(0);
}
}
projects/26-jmx-monitoring/modern/src/main/java/at/aydin/lab/jmx/modern/TaskMetrics.java
package at.aydin.lab.jmx.modern;
import io.micrometer.core.instrument.*;
import org.springframework.stereotype.Component;
// Design Pattern: Observer
// Zweck: Fachliche Ereignisse aktualisieren eine entkoppelte Metrik für Actuator/Monitoring-Systeme.
@Component
public class TaskMetrics {
private final Counter completed;
public TaskMetrics(MeterRegistry registry) {
completed = Counter.builder("tasks.completed").description("Completed tasks").register(registry);
}
public void taskCompleted() {
completed.increment();
}
public double count() {
return completed.count();
}
}
| ID | Ebene | Prüfung | erforderlicher Nachweis |
|---|---|---|---|
| 26-JMX-MONITORING-A01 | Integration/Contract | Zählerwerte stimmen für definierte Abläufe überein. | Automatisierter Test und CI-Protokoll |
| 26-JMX-MONITORING-A02 | Integration/Contract | Keine unbeschränkte Tag-Kardinalität. | Automatisierter Test und CI-Protokoll |
| 26-JMX-MONITORING-A03 | Integration/Contract | Sensitive Endpunkte sind geschützt. | Automatisierter Test und CI-Protokoll |
| 26-JMX-MONITORING-A04 | Integration/Contract | Health und Metrics unterscheiden Verfügbarkeit von Fachzustand. | Automatisierter Test und CI-Protokoll |
| 26-JMX-MONITORING-A05 | Integration/Contract | Alerting funktioniert nach Umschaltung. | Automatisierter Test und CI-Protokoll |
| 26-JMX-MONITORING-T01 | Unit | Fachlogik ohne Container oder externen Dienst testen. | Unit-Test |
| 26-JMX-MONITORING-T02 | Regression | Legacy- und Modern-Ergebnis für denselben Golden-Master-Vektor vergleichen. | Vergleichsreport |
| 26-JMX-MONITORING-T03 | Negative | Fehlerhafte, leere und grenzwertige Eingaben prüfen. | Negativtest |
| 26-JMX-MONITORING-T04 | Operations | Start, Health, Shutdown und Konfigurationsfehler prüfen. | Deployment-/Startprotokoll |
| 26-JMX-MONITORING-T05 | Observability | Metriknamen, Labels, Einheiten, Health und Zugriffsschutz prüfen. | Monitoring-Test |
| 26-JMX-MONITORING-F01 | Fokus | endpoint exposure, health detail and unauthorized access tests | Modulspezifischer Testreport |
| Risiko | Auswirkung | Gegenmaßnahme | Gate |
|---|---|---|---|
| metric/endpoint naming and exposure | NIEDRIG | endpoint exposure, health detail and unauthorized access tests | vor Cutover |
| Neue Framework-/Library-Laufzeitabhängigkeiten | MITTEL | SBOM, Lizenz-, CVE- und transitive Dependency-Prüfung im Online-Build | vor Release |
| Legacy-Verhalten war implizit an entfernte Library gekoppelt | MITTEL | Contract-/Golden-Master-Tests und gezielte Fehlerpfade | vor Abschaltung |
Keine zusätzlichen Ressourcen.
JMX und Micrometer können zeitweise parallel publizieren; ein eindeutiges Präfix verhindert Dashboard-Verwechslung.