Sök…


Introduktion

JMX-tekniken ger verktyg för att bygga distribuerade, webbaserade, modulära och dynamiska lösningar för hantering och övervakning av enheter, applikationer och servicedrivna nätverk. Genom design är denna standard lämplig för anpassning av gamla system, implementering av nya hanterings- och övervakningslösningar och anslutning till framtidens.

Enkelt exempel med plattform MBean Server

Låt oss säga att vi har en server som registrerar nya användare och hälsar dem med något meddelande. Och vi vill övervaka denna server och ändra några av dess parametrar.

Först behöver vi ett gränssnitt med våra övervaknings- och kontrollmetoder

public interface UserCounterMBean {
    long getSleepTime();

    void setSleepTime(long sleepTime);

    int getUserCount();

    void setUserCount(int userCount);

    String getGreetingString();

    void setGreetingString(String greetingString);

    void stop();
}

Och en enkel implementering som låter oss se hur det fungerar och hur vi påverkar det

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 ett enkelt exempel med lokal eller fjärrhantering måste vi registrera vår MBean:

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();
    }
}

Efter det kan vi köra vår applikation och ansluta till den via jConsole, som finns i din $JAVA_HOME/bin katalog. Först måste vi hitta vår lokala java-process med vår ansökan ange bildbeskrivning här

växla sedan till fliken MBeans och hitta den MBean som vi använde i vår huvudklass som ett ObjectName (i exemplet ovan är det ServerManager ). I avsnittet Attributes vi se attribut. Om du bara angav get-metod är attribut läsbart men inte skrivbart. Om du specificerade både get och set-metoder skulle attribut vara läsbart och skrivbart. ange bildbeskrivning här

Specificerade metoder kan åberopas i avsnittet Operations . ange bildbeskrivning här

Om du vill kunna använda fjärrhantering behöver du ytterligare JVM-parametrar, till exempel:

-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

Dessa parametrar finns i kapitel 2 i JMX-guider . Efter det kommer du att kunna ansluta till din applikation via jConsole på distans med jconsole host:port eller med att ange host:port eller service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi i jConsole GUI.

Användbara länkar:



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow