JMX Standard MBean
Ein MBean wird unter einem ObjectName im Platform MBeanServer registriert und über JMX abgefragt.
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.
Ein MBean wird unter einem ObjectName im Platform MBeanServer registriert und über JMX abgefragt.
Ein Micrometer Counter wird in einer MeterRegistry registriert und kann über Actuator/Monitoring-Backends exportiert werden.
Die Ähnlichkeit ist eine technische Orientierung auf normalisiertem Quelltext. Sie ersetzt keine fachliche Bewertung.
| Vergleichsgruppe | Legacy-Dateien | Modern-Dateien | Legacy-Zeilen | Modern-Zeilen | Ähnlichkeit |
|---|---|---|---|---|---|
| Build-Konfiguration | 1 | 1 | 34 | 39 | 40% |
| Metrik, Registrierung und Test | 4 | 2 | 53 | 36 | 24% |
Das Pair-POM bindet die Legacy- und Modern-Submodule zusammen und gehört deshalb ebenfalls zur vollständigen Codeabdeckung.
JMX- und Micrometer-/Actuator-Abhängigkeiten werden verglichen.
| Legacy-Dateien | Modern-Dateien | Einordnung |
|---|---|---|
| pom.xml | pom.xml | Direktvergleich Semantische Ähnlichkeit: 40% |
<?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><?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>MBean-Vertrag und manuelle Registrierung werden durch Metrikkomponente ersetzt.
| Legacy-Dateien | Modern-Dateien | Einordnung |
|---|---|---|
| TaskCounterMBean.java TaskCounter.java JmxRegistration.java TaskCounterTest.java | TaskMetrics.java TaskMetricsTest.java | Direktvergleich Semantische Ähnlichkeit: 24% |
package at.aydin.lab.jmx.legacy;
public interface TaskCounterMBean {
long getCompleted();
void reset();
}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());
}
}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());
}
}