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:

  1. Instrumentatie laag: MBeans geregistreerd bij de JMX-agent waarmee bronnen worden beheerd
  2. JMX-agentlaag: de kerncomponent (MbeanServer) die het register van beheerde MBeans bijhoudt en een interface biedt om er toegang toe te krijgen
  3. 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:

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}

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:

while (true) {}

5. Toegang tot de MBean

5.1. Verbinding maken vanaf de clientzijde

  1. Start de applicatie in de Eclipse
  2. Start Jconsole (bevindt zich in de map bin van de JDK-installatiemap van uw machine)
  3. Verbinding -> nieuwe verbinding -> selecteer het lokale Java-proces van deze tutorial -> Verbinden -> Waarschuwing onveilige SSl-verbinding -> Doorgaan met onveilige verbinding
  4. Nadat de verbinding tot stand is gebracht, klikt u op het tabblad MBeans rechtsboven in het View-paneel
  5. De lijst met geregistreerde MBeans verschijnt in de linkerkolom
  6. Klik op com.baeldung.tutorial -> basic -> game
  7. Onder het spel zijn er twee rijen, elk één voor attributen en bewerkingen

Hier is een korte blik op het JConsole-gedeelte van het proces:

5.2. Beheer van de MBean

De basisprincipes van MBean-beheer zijn eenvoudig:

  • Attributen kunnen worden gelezen of geschreven
  • Er kunnen methoden worden aangeroepen en er kunnen argumenten aan worden geleverd of waarden die eruit worden geretourneerd

Laten we eens kijken wat dat betekent voor de Spel MBean in de praktijk:

  • attribuut: typ een nieuwe waarde voor het attribuut Naam speler - bijvoorbeeld "Messi" en klik Vernieuwen knop

Het volgende logboek verschijnt in de Eclipse-console:

Stel playerName in op Messi

  • operaties: typ een waarde voor het String-argument van de methode speel voetbal() - bijvoorbeeld "Barcelona" en klik op de methode-knop. EEN vensterwaarschuwing voor succesvolle aanroep zal verschijnen

Het volgende logboek verschijnt in de eclipse-console:

Messi speelt voetbal voor Barcelona

6. Conclusie

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.