Migration Deep Dive für 26 · JMX und Monitoring öffnen →
⌂ ÜbersichtAlle Vergleiche
Modul 26 · 100 % Codeabdeckung

JMX und Monitoring

Vollständiger Legacy-Modern-Vergleich aller Java-Klassen, Tests, Maven-POMs und relevanten Ressourcen dieses Moduls. Jede Datei ist genau einmal einer fachlich passenden Vergleichsgruppe zugeordnet.

5Legacy-Dateien
3Modern-Dateien
87 → 75Codezeilen
9/9vollständig erfasst

Fachliche Einordnung

Legacy

JMX Standard MBean

Ein MBean wird unter einem ObjectName im Platform MBeanServer registriert und über JMX abgefragt.

Modern

Micrometer Counter

Ein Micrometer Counter wird in einer MeterRegistry registriert und kann über Actuator/Monitoring-Backends exportiert werden.

Vergleichsfokus: Alle Dateien werden nach technischer Rolle und fachlicher Verantwortung gruppiert.
Wichtige Abgrenzung: One-to-many-Änderungen werden als Gruppe dargestellt; eine künstliche 1:1-Zuordnung wird vermieden.

Vollständige Abdeckungsmatrix

Die Ähnlichkeit ist eine technische Orientierung auf normalisiertem Quelltext. Sie ersetzt keine fachliche Bewertung.

VergleichsgruppeLegacy-DateienModern-DateienLegacy-ZeilenModern-ZeilenÄhnlichkeit
Build-Konfiguration11343940%
Metrik, Registrierung und Test42533624%

Gemeinsame Modulstruktur

Das Pair-POM bindet die Legacy- und Modern-Submodule zusammen und gehört deshalb ebenfalls zur vollständigen Codeabdeckung.

Gemeinsam · 19 Zeilenpom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>at.aydin.academy</groupId>
        <artifactId>java-modernization-deep-dive</artifactId>
        <version>1.0.0</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>
    <artifactId>26jmxmonitoring-pair</artifactId>
    <packaging>pom</packaging>
    <name>JMX und Monitoring: Legacy und Modern</name>
    <modules>
        <module>legacy</module>
        <module>modern</module>
    </modules>
</project>

Alle semantischen Codevergleiche

01Build-KonfigurationDirektvergleich · Legacy 34 / Modern 39 Zeilen · Ähnlichkeit 40%

JMX- und Micrometer-/Actuator-Abhängigkeiten werden verglichen.

Legacy-DateienModern-DateienEinordnung
pom.xmlpom.xmlDirektvergleich
Semantische Ähnlichkeit: 40%

Legacy

Legacy · 34 Zeilenlegacy/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <parent>
                <groupId>at.aydin.academy</groupId>
                <artifactId>26jmxmonitoring-pair</artifactId>
                <version>1.0.0</version>
                <relativePath>../pom.xml</relativePath>
            </parent>
            <artifactId>jmx-legacy</artifactId>
            <packaging>jar</packaging>
            <name>JMX Legacy</name>

            <dependencies>

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <scope>test</scope>
</dependency>

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                    </plugin>

                </plugins>
            </build>
        </project>

Modern

Modern · 39 Zeilenmodern/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <parent>
                <groupId>at.aydin.academy</groupId>
                <artifactId>26jmxmonitoring-pair</artifactId>
                <version>1.0.0</version>
                <relativePath>../pom.xml</relativePath>
            </parent>
            <artifactId>actuator-metrics-modern</artifactId>
            <packaging>jar</packaging>
            <name>Actuator Metrics Modern</name>

            <dependencies>
                <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                    </plugin>

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

                </plugins>
            </build>
        </project>
02Metrik, Registrierung und TestDirektvergleich · Legacy 53 / Modern 36 Zeilen · Ähnlichkeit 24%

MBean-Vertrag und manuelle Registrierung werden durch Metrikkomponente ersetzt.

Legacy-DateienModern-DateienEinordnung
TaskCounterMBean.java
TaskCounter.java
JmxRegistration.java
TaskCounterTest.java
TaskMetrics.java
TaskMetricsTest.java
Direktvergleich
Semantische Ähnlichkeit: 24%

Legacy

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);
    }
}
package at.aydin.lab.jmx.legacy;

import java.lang.management.ManagementFactory;
import javax.management.*;

public final class JmxRegistration {
    public ObjectName register(TaskCounter counter) throws Exception {
        ObjectName name = new ObjectName("at.aydin.lab:type=TaskCounter");
        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
        if (server.isRegistered(name)) server.unregisterMBean(name);
        server.registerMBean(counter, name);
        return name;
    }
}
package at.aydin.lab.jmx.legacy;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

class TaskCounterTest {
    @Test
    void counts() {
        var c = new TaskCounter();
        c.taskCompleted();
        assertEquals(1, c.getCompleted());
    }
}

Modern

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();
    }
}
package at.aydin.lab.jmx.modern;

import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

class TaskMetricsTest {
    @Test
    void publishesMetric() {
        var m = new TaskMetrics(new SimpleMeterRegistry());
        m.taskCompleted();
        assertEquals(1, m.count());
    }
}
⌂ Cockpit