Grundlæggende introduktion til JMX

1. Introduktion

Det JMX-ramme (Java Management Extensions) blev introduceret i Java 1.5 og har fundet bred accept i Java-udviklerfællesskabet siden starten.

Det giver en let konfigurerbar, skalerbar, pålidelig og mere eller mindre venlig infrastruktur til styring af Java-applikationer enten lokalt eller eksternt. Rammen introducerer konceptet MBeans til realtidsadministration af applikationer.

Denne artikel er en nybegynder trin for trin guide til at oprette og opsætte en grundlæggende MBean og administrere den gennem JConsole.

2. JMX Arkitektur

JMX-arkitekturen følger en trelags tilgang:

  1. Instrumentationslag: MBiler, der er registreret hos JMX-agenten, gennem hvilke ressourcer styres
  2. JMX agentlag: kernekomponenten (MbeanServer), der opretholder et register over administrerede MBeans og giver en grænseflade for at få adgang til dem
  3. Fjernstyringslag: normalt klientsidesværktøj som JConsole

3. Oprettelse af en MBean-klasse

Mens du opretter MBeans, er der et bestemt designmønster, som vi skal overholde. Model MBean-klassen SKAL implementere en grænseflade med følgende navn: “Modelklassenavn” plus MBean.

Så lad os definere vores MBean-grænseflade og klassen, der implementerer den:

offentlig grænseflade GameMBean {public void playFootball (String clubName); offentlig streng getPlayerName (); public void setPlayerName (String playerName); } offentlig klasse spil implementerer GameMBean {private String playerName; @ Overstyr offentlig ugyldigt playFootball (String clubName) {System.out.println (dette.playerName + "spiller fodbold for" + clubName); } @ Override public String getPlayerName () {System.out.println ("Return playerName" + this.playerName); returner spillernavn; } @ Override public void setPlayerName (String playerName) {System.out.println ("Set playerName to value" + playerName); this.playerName = playerName; }}

Det Spil klasse tilsidesætter en metode spille fodbold() af overordnet interface. Bortset fra dette har klassen en medlemsvariabel spiller navn og getter / setter for det.

Bemærk, at getter / setter også erklæres i den overordnede grænseflade.

4. Instrumentering med JMX-agenten

JMX-agenter er de enheder, der kører enten lokalt eller eksternt, og som giver ledelsesadgangen til de MBeansvar, der er registreret hos dem.

Lad os bruge PlatformMbeanServer - kernekomponenten i JMX agent og registrere Spil MBean med det.

Vi bruger en anden enhed - ObjectName - at registrere Spil klasse instans med PlatformMbeanServer; dette er en streng bestående af to dele:

  • domæne: kan være en vilkårlig streng, men ifølge MBean-navngivningskonventioner skal den have Java-pakkenavn (undgår navngivningskonflikter)
  • nøgle: en liste over “nøgle = værdi”Par adskilt med komma

I dette eksempel bruger vi: “Com.baledung.tutorial: type = basic, name = game”.

Vi får den MBeanServer fra fabrikklassen java.lang.management.ManagementFactory.

Derefter registrerer vi modellen MBean ved hjælp af den oprettede Objektnavn:

prøv {ObjectName objectName = new ObjectName ("com.baeldung.tutorial: type = basic, name = game"); MBeanServer-server = ManagementFactory.getPlatformMBeanServer (); server.registerMBean (nyt spil (), objektnavn); } fange (MalformedObjectNameException | InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) {// håndtere undtagelser}

Endelig bare for at kunne teste det - vi tilføjer et mens loop for at forhindre, at applikationen afsluttes, før vi kan få adgang til MBean via JConsole:

mens (sandt) {}

5. Adgang til MBean

5.1. Opretter forbindelse fra klientsiden

  1. Start applikationen i formørkelsen
  2. Start Jconsole (findes i bin-mappen i JDK-installationsmappen på din maskine)
  3. Forbindelse -> ny forbindelse -> vælg den lokale Java-proces i denne tutorial -> Opret forbindelse -> Usikker SSl-forbindelsesadvarsel -> Fortsæt med usikker forbindelse
  4. Når forbindelsen er oprettet, skal du klikke på fanen øverst til højre MBeans i ruden Vis
  5. Liste over registrerede MBeans vises i venstre kolonne
  6. Klik på com.baeldung.tutorial -> basic -> game
  7. Under spillet vil der være to rækker, en hver til attributter og operationer

Her er et hurtigt kig på JConsole-delen af ​​processen:

5.2. Administration af MBean

Grundlæggende om MBean management er enkle:

  • Attributter kan læses eller skrives
  • Metoder kan påberåbes, og argumenter kan leveres til dem eller værdier, der returneres fra dem

Lad os se, hvad det betyder for Spil MBean i praksis:

  • attribut: skriv en ny værdi for attributten spiller navn - for eksempel “Messi” og klik Opdater-knap

Følgende log vises i Eclipse-konsollen:

Indstil playerName til at værdi Messi

  • operationer: skriv en værdi for String-argumentet for metoden spille fodbold() - for eksempel “Barcelona” og klik på metodeknappen. EN vinduealarm for vellykket indkaldelse vises

Følgende log vises i formørkelseskonsollen:

Messi spiller fodbold for Barcelona

6. Konklusion

Denne vejledning berørte det grundlæggende ved opsætning af en JMX-aktiveret applikation ved hjælp af MBeans. Det diskuterede også om brug af et typisk klientsidesværktøj som JConsole til at styre den instrumenterede MBean.

Domænet for JMX-teknologi har meget bred rækkevidde og rækkevidde. Denne vejledning kan betragtes som et begynders skridt mod det.

Kildekoden til denne vejledning kan findes på Github.