Suche…


Einführung

Die JMX-Technologie bietet die Tools zum Erstellen verteilter, webbasierter, modularer und dynamischer Lösungen zum Verwalten und Überwachen von Geräten, Anwendungen und serviceorientierten Netzwerken. Dieser Standard eignet sich prinzipiell für die Anpassung von Altsystemen, die Implementierung neuer Verwaltungs- und Überwachungslösungen und die Einbindung in zukünftige Systeme.

Einfaches Beispiel mit Platform MBean Server

Nehmen wir an, wir haben einen Server, der neue Benutzer registriert und sie mit einer Nachricht begrüßt. Wir möchten diesen Server überwachen und einige seiner Parameter ändern.

Erstens brauchen wir eine Schnittstelle zu unseren Überwachungs- und Kontrollmethoden

public interface UserCounterMBean {
    long getSleepTime();

    void setSleepTime(long sleepTime);

    int getUserCount();

    void setUserCount(int userCount);

    String getGreetingString();

    void setGreetingString(String greetingString);

    void stop();
}

Und einige einfache Implementierungen, die uns zeigen lassen, wie es funktioniert und wie wir es beeinflussen

public class UserCounter implements UserCounterMBean, Runnable {
    private AtomicLong sleepTime = new AtomicLong(10000);
    private AtomicInteger userCount = new AtomicInteger(0);
    private AtomicReference<String> greetingString = new AtomicReference<>("welcome");
    private AtomicBoolean interrupted = new AtomicBoolean(false);

    @Override
    public long getSleepTime() {
        return sleepTime.get();
    }

    @Override
    public void setSleepTime(long sleepTime) {
        this.sleepTime.set(sleepTime);
    }

    @Override
    public int getUserCount() {
        return userCount.get();
    }

    @Override
    public void setUserCount(int userCount) {
        this.userCount.set(userCount);
    }

    @Override
    public String getGreetingString() {
        return greetingString.get();
    }

    @Override
    public void setGreetingString(String greetingString) {
        this.greetingString.set(greetingString);
    }

    @Override
    public void stop() {
        this.interrupted.set(true);
    }

    @Override
    public void run() {
        while (!interrupted.get()) {
            try {
                System.out.printf("User %d, %s%n", userCount.incrementAndGet(), greetingString.get());
                Thread.sleep(sleepTime.get());
            } catch (InterruptedException ignored) {
            }
        }
    }
}

Für ein einfaches Beispiel mit lokaler oder Remote-Verwaltung müssen wir unser MBean registrieren:

import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import java.lang.management.ManagementFactory;

public class Main {
    public static void main(String[] args) throws MalformedObjectNameException, NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException, InterruptedException {
        final UserCounter userCounter = new UserCounter();
        final MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
        final ObjectName objectName = new ObjectName("ServerManager:type=UserCounter");
        mBeanServer.registerMBean(userCounter, objectName);

        final Thread thread = new Thread(userCounter);
        thread.start();
        thread.join();
    }
}

Danach können wir unsere Anwendung ausführen und über jConsole eine Verbindung herstellen, die sich in Ihrem $JAVA_HOME/bin . Zuerst müssen wir mit unserer Anwendung unseren lokalen Java-Prozess finden Geben Sie hier die Bildbeschreibung ein

Wechseln Sie dann zur Registerkarte MBeans und suchen Sie die MBean, die wir in unserer Main-Klasse als ObjectName (im obigen Beispiel ist es ServerManager ). Im Abschnitt " Attributes " können wir Attribute erkennen. Wenn Sie nur die Get-Methode angegeben haben, ist das Attribut lesbar, aber nicht schreibbar. Wenn Sie sowohl get- als auch set-Methoden angegeben haben, wäre das Attribut lesbar und schreibbar. Geben Sie hier die Bildbeschreibung ein

Bestimmte Methoden können im Operations Abschnitt aufgerufen werden. Geben Sie hier die Bildbeschreibung ein

Wenn Sie die Remote-Verwaltung verwenden möchten, benötigen Sie zusätzliche JVM-Parameter wie:

-Dcom.sun.management.jmxremote=true //true by default
-Dcom.sun.management.jmxremote.port=36006 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

Diese Parameter finden Sie in Kapitel 2 der JMX-Handbücher . Danach können Sie über jConsole über jConsole remote mit jconsole host:port oder mit Angabe von host:port oder service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi in der jConsole-GUI verbinden.

Nützliche Links:



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow