Basisintroductie tot JMX
1. Inleiding
De Java Management Extensions (JMX) -raamwerk werd geïntroduceerd in Java 1.5 en heeft vanaf het begin brede acceptatie gevonden in de gemeenschap van Java-ontwikkelaars.
Het biedt een eenvoudig configureerbare, schaalbare, betrouwbare en min of meer vriendelijke infrastructuur voor het beheer van Java-applicaties, zowel lokaal als op afstand. Het framework introduceert het concept van MBeans voor real-time beheer van applicaties.
Dit artikel is een stapsgewijze handleiding voor beginners om een standaard MBean te maken en in te stellen en deze te beheren via JConsole.
2. JMX-architectuur
JMX-architectuur volgt een drielaagse benadering:
- Instrumentatie laag: MBeans geregistreerd bij de JMX-agent waarmee bronnen worden beheerd
- JMX-agentlaag: de kerncomponent (MbeanServer) die het register van beheerde MBeans bijhoudt en een interface biedt om er toegang toe te krijgen
- Laag voor beheer op afstand: meestal client-side tool zoals JConsole
3. Een MBean-klasse maken
Bij het maken van MBeans is er een bepaald ontwerppatroon waaraan we ons moeten conformeren. De model MBean-klasse MOET een interface implementeren met de volgende naam: "Naam van modelklasse" plus MBean.
Dus laten we onze MBean-interface definiëren en de klasse die deze implementeert:
openbare interface GameMBean {public void playFootball (String clubName); openbare String getPlayerName (); public void setPlayerName (String playerName); } public class Game implementeert GameMBean {private String playerName; @Override public void playFootball (String clubName) {System.out.println (this.playerName + "voetballen voor" + clubName); } @Override public String getPlayerName () {System.out.println ("Return playerName" + this.playerName); return playerName; } @Override public void setPlayerName (String playerName) {System.out.println ("Stel playerName in op waarde" + playerName); this.playerName = playerName; }}
De Spel class overschrijft een methode speel voetbal() van de bovenliggende interface. Afgezien hiervan heeft de klasse een lidvariabele Naam speler en getter / setter ervoor.
Merk op dat getter / setter ook in de bovenliggende interface worden gedeclareerd.
4. Instrumenten met de JMX Agent
JMX-agents zijn de entiteiten die lokaal of op afstand worden uitgevoerd en die de beheertoegang bieden aan de MBeans die bij hen zijn geregistreerd.
Laten we gebruiken PlatformMbeanServer - de kerncomponent van JMX-agent en registreer het Spel MBe er mee.
We gebruiken een andere entiteit - ObjectName - om het Spel klasse-instantie met de PlatformMbeanServer; dit is een String die uit twee delen bestaat:
- domein: kan een willekeurige tekenreeks zijn, maar volgens de MBean-naamgevingsconventies moet het een Java-pakketnaam hebben (vermijdt naamconflicten)
- sleutel: een lijst van "key = waarde”Paren gescheiden door een komma
In dit voorbeeld gebruiken we: "Com.baledung.tutorial: type = basic, name = game". We krijgen de MBeanServer van de fabrieksklasse java.lang.management.ManagementFactory. Vervolgens registreren we het model MBean met behulp van het gemaakte Objectnaam: Ten slotte, alleen om het te kunnen testen, zullen we een terwijl lus om te voorkomen dat de applicatie wordt beëindigd voordat we toegang hebben tot de MBean via JConsole: Hier is een korte blik op het JConsole-gedeelte van het proces: De basisprincipes van MBean-beheer zijn eenvoudig: Laten we eens kijken wat dat betekent voor de Spel MBean in de praktijk: Het volgende logboek verschijnt in de Eclipse-console: Stel playerName in op Messi Het volgende logboek verschijnt in de eclipse-console: Messi speelt voetbal voor Barcelona Deze tutorial behandelde de basisprincipes van het opzetten van een JMX-enabled applicatie met behulp van MBeans. Er werd ook gesproken over het gebruik van een typische client-side tool zoals JConsole om de geïnstrumenteerde MBean te beheren. Het domein van JMX-technologie is zeer breed in omvang en bereik. Deze tutorial kan worden beschouwd als een beginnersstap daartoe. De broncode van deze tutorial is te vinden op Github.probeer {ObjectName objectName = new ObjectName ("com.baeldung.tutorial: type = basic, name = game"); MBeanServer server = ManagementFactory.getPlatformMBeanServer (); server.registerMBean (nieuw spel (), objectnaam); } catch (MalformedObjectNameException | InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) {// omgaan met uitzonderingen}
while (true) {}
5. Toegang tot de MBean
5.1. Verbinding maken vanaf de clientzijde
5.2. Beheer van de MBean
6. Conclusie