Zoeken…


Invoering

De JMX-technologie biedt de tools voor het bouwen van gedistribueerde, webgebaseerde, modulaire en dynamische oplossingen voor het beheren en bewaken van apparaten, applicaties en servicegedreven netwerken. Door het ontwerp is deze standaard geschikt voor het aanpassen van oudere systemen, het implementeren van nieuwe beheer- en monitoringoplossingen en het aansluiten op die van de toekomst.

Eenvoudig voorbeeld met Platform MBean Server

Stel dat we een server hebben die nieuwe gebruikers registreert en begroet met een bericht. En we willen deze server controleren en enkele van zijn parameters wijzigen.

Ten eerste hebben we een interface nodig met onze monitoring- en controlemethoden

public interface UserCounterMBean {
    long getSleepTime();

    void setSleepTime(long sleepTime);

    int getUserCount();

    void setUserCount(int userCount);

    String getGreetingString();

    void setGreetingString(String greetingString);

    void stop();
}

En een eenvoudige implementatie die ons laat zien hoe het werkt en hoe we het beïnvloeden

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) {
            }
        }
    }
}

Voor een eenvoudig voorbeeld met lokaal of extern beheer moeten we onze MBean registreren:

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

Daarna kunnen we onze toepassing uitvoeren en er verbinding mee maken via jConsole, die u kunt vinden in uw map $JAVA_HOME/bin . Eerst moeten we ons lokale Java-proces vinden met onze applicatie voer hier de afbeeldingsbeschrijving in

schakel dan over naar het tabblad MBeans en vind de MBean die we in onze hoofdklasse als ObjectName (in het voorbeeld hierboven is dat ServerManager ). In het gedeelte Attributes kunnen we kenmerken bekijken. Als u alleen de methode get hebt opgegeven, is het kenmerk leesbaar maar niet beschrijfbaar. Als u zowel get- als set-methoden opgeeft, zou het kenmerk leesbaar en beschrijfbaar zijn. voer hier de afbeeldingsbeschrijving in

Opgegeven methoden kunnen worden opgeroepen in het gedeelte Operations . voer hier de afbeeldingsbeschrijving in

Als u extern beheer wilt kunnen gebruiken, hebt u aanvullende JVM-parameters nodig, zoals:

-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

Deze parameters zijn te vinden in hoofdstuk 2 van JMX-handleidingen . Daarna kunt u op afstand verbinding maken met uw toepassing via jConsole met jconsole host:port of met het opgeven van host:port of service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi in jConsole GUI.

Handige links:



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow