Java Managenent Extension JMX

Podobné dokumenty
JAVA. Java Management Extensions JMX

JAVA. Java Management Extensions JMX

RMI Remote Method Invocation

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Distribuované systémy a výpočty

UJO Framework. revoluční architektura beans. verze

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Tvorba informačních systémů

Abstraktní datové typy: zásobník

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Algoritmizace a programování

Programování v Javě I. Leden 2008

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Programování v Javě I. Únor 2009

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

KTE / ZPE Informační technologie

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Generické programování

RMI - Distribuované objekty v Javě

Enterprise Java Beans 3.0

Principy objektově orientovaného programování

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Úvod do programovacích jazyků (Java)

Jazyk C# (seminář 6)

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Vláknové programování část V

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Softwarové komponenty a Internet

Obsah přednášky. Technologie. Enterprise Java Beans. Enterprise Java Beans. EJB kontejner. Enterprise Java Beans (EJB)

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Remote Method Invocation RMI

Technologie JavaBeans

Jini (pronounced GEE-nee) Cvičení 8 - DS 2006

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Vytváření a použití knihoven tříd

Návrh softwarových systém. Návrh softwarových systémů

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

typová konverze typová inference

Iterator & for cyklus

Teoretické minimum z PJV

Java a XML. 10/26/09 1/7 Java a XML

Typický prvek kolekce pro české řazení

Úvod do programování - Java. Cvičení č.4

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Java - řazení objektů

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Katedra měřicí a řídicí techniky, VŠB - Technická univerzita v Ostravě, tř. 17. listopadu, Ostrava-Poruba, Česká republika

PREPROCESOR POKRAČOVÁNÍ

JAVA V RMI Java, letní semestr

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

STARÁ DOBRÁ JAVA A PERSISTENCE S CACHÉ

Osnova. GIOP a IIOP IDL IOR POA. IDL Klient Server. 2 Historie. 3 Princip a základní pojmy. 4 Implementace. 5 Aplikace CORBA

Textové soubory. alg9 1

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

1. Programování proti rozhraní

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Podmínky na zápočet. Java, zimní semestr

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Objektově orientované programování

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice

Soubor jako posloupnost bytů

IRAE 07/08 Přednáška č. 7. Začátek (head)

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Java - výjimky. private void vstup() throws IOException {... }

Aplikace s grafickým uživatelským rozhraním

Čipové karty Lekařská informatika

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Distribuované systémy a výpočty (14) 7/1/2008

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

1. Téma 12 - Textové soubory a výjimky

Spring framework 2.0. Roman Pichlík CZJUG

JAVA RMI Java, letní semestr 2018

Doxygen. Jakub Břečka

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

CAL (CAN Application Layer) a CANopen

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

boolean hasnext() Object next() void remove() Kolekce

Integrace OpenOffice.org a Javy. CZJUG, , Robert Vojta

Projekty pro výuku programování v jazyce Java

Komponenty v.net. Obsah přednášky

Transkript:

Java Managenent Extension JMX Aplikační programování v Javě (BI-APJ) - 14 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Přehled JMX The Java Management Extensions (JMX) - standardní způsob správy (tj. sledování a ovládání) zdrojů tj. např. aplikací, zařízení, služeb atd. JMX definuje: architekturu, návrhové vzory, API, služby. Zdroje jsou sledované (instrumented) jedním nebo více Java objekty tzv. Managed Beany (MBeans). MBeany jsou registrovány u speciálního objektu zvaného MBean server. Ten spolu se službami pro správu MBean tvoří tzv JMX agenta. Pozn.: Nezaměnit s Managed Beans v JSF. JMX může být použita pro správu samotné JVM.

Výhody JMX Každá služba, kterou JMX agent může poskytovat, je nezávislý modul, který může být připojen podle potřeby. Specifikace JMX definuje množinu základních služeb, které mohou být rozšiřovány a dynamicky zaváděny. Sama JVM je mohutně instrumentována. V každé Java aplikaci je možno odstartovat JMX agenta, který zpřístupňuje vestavěnou instrumentaci JVM a tak ovládat JVM třeba vzdáleně. Java EE Aplikační Server je konformní s JMX architekturou a tak může být spravován technologií JMX. JMX je kompatibilní se standardními Java technologiemi.

Architektura JMX (1/3)

Architektura JMX (2/3) Technologie JMX se dělí na tři úrovně: instrumentace, JMX agent, vzdálená správa. Instrumentace prostředku znamená opatřit jej sadou správcovských operací. MBeany implemetují přístup k instrumentaci (tj. ke správcovským operacím prostředku). Typy MBean: standardní (Standard MBeans), dynamické (Dynamic MBeans), otevřené (Open MBeans), Model MBeans, MXBeans.

Architektura JMX (3/3) Standardní MBeany musí odpovídat návrhovým vzorům a rozhraním definovaným v JMX specifikaci. MBeany nejsou závislé na konkrétním JMX agentu ve kterém se registrují. Služby JMX agenta jsou realizovány také jako MBeany. Instrumentační úroveň JMX poskytuje oznamovací mechanizmus, který umožňuje MBeanám asynchronně vytvářet a předávat oznamovací události do vyšších úrovní.

Monitoring a správa JVM JVM má vestavěnou (built-in, out-of-the-box) instrumentaci, která umožňuje monitorovat a spravovat JVM JMX technologií. Pro správu JVM slouží tzv. platformní MXBeany, které jsou součástí Java SE. Každá platformní MXBeana zpřístupňuje část JVM funcionality: class-loading systém, just-in-time (JIT) compilation system, garbage collector etc. Java SE obsahuje standardní platform MBean server, ve kterém se platformní MXBeany registrují. U serveru se mohou registrovat jakékoliv další MBeany.

Platformní MXBeans ClassLoadingMXBean - class loading system of the JVM. CompilationMXBean - compilation system of the JVM. MemoryMXBean - memory system of the JVM. ThreadMXBean - threads system of the JVM. RuntimeMXBean - runtime system of the JVM. OperatingSystemMXBean - operating system on which the JVM is running. GarbageCollectorMXBean - garbage collector in the JVM. MemoryManagerMXBean - memory manager in the JVM. MemoryPoolMXBean - memory pool in the JVM. Příklad: RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean(); // Get the standard attribute "VmVendor" String vendor = mxbean.getvmvendor();

VisualVM (1/2) Java VisualVM - grafická správcovká aplikace pro monitoring, ladění a profilování Java aplikcí. Nahrazuje většinu dřívějších řádkových prostředků: JConsole, jstat, jinfo, jstack, jmap Umožňuje sledování lokálních i vzdálených aplikací jednotným způsobem. Umožňuje: generovat výpisy heapu, sledovat úniky paměti, vyhledávat MBeany and provádět nad nimi operace, monitorovat garbage collector, provádět lightweight memory and CPU profiling.

VisualVM (2/2)

MBeany MBeana je managed Java objekt, vytvořený podle pravidel JMX specifikace. MBeana může reprezentovat: zařízení, aplikaci, jakýkoliv prostředek, který musí být spravován. MBeans nabízejí správcovské rozhraní, které se skládá z: množiny attributů, které mohou být čteny resp. nastavovány, množiny operací, dokumentace vlastní MBeany. MBeany mohou vysílat oznámení (notifications), při výskytu předdefinovaných událostí. JMX definuje více typů MBean: standardní (Standard) MBeany, MXBeany, dynamické (Dynamick) MBeany,

Standardní MBeany Standardní MBeana je definována: rozhraním s generickým jménem XxxMBean, třídou s generickým jménem Xxx, která rozhraní implemetuje. Každá metoda rozhraní definuje buď atribut nebo operaci v MBeaně: public interface HelloMBean { public void sayhello(); public int add(int x, int y); public String getname(); public int getcachesize(); public void setcachesize(int size); Getry a setry umožňují přístup a eventuální modifikaci atributů.

Implementace MBeany public class Hello implements HelloMBean { public void sayhello() { System.out.println("hello, world"); public int add(int x, int y) { return x + y; public String getname() { return this.name; public int getcachesize() { return this.cachesize; public synchronized void setcachesize(int size) { this.cachesize = size; System.out.println( "Cache size now " + this.cachesize); private final String name = "Reginald"; private int cachesize = DEFAULT_CACHE_SIZE; private static final int DEFAULT_CACHE_SIZE = 200;

JMX Agent JMX agent se skládá z: MBean serveru - správcovský objekt u kterého se MBeany registrují, množiny služeb pro správu MBean, alespoň jednoho komunikačního adaptéru nebo konektoru, které umožňují přístup správcovské aplikaci. JMX agent není závislý na instrumentovaných zdrojích (kterýkoliv instrumentovaný zdroj může používat jakéhokoliv JMX agenta), Přístup k MBean serveru se získává metodou getplatformmbeanserver(), která při prvním zavolání MBean server automaticky vytvoří. Každá MBeana se registruje pod jménem (instance třídy ObjectName). Syntaxe jména je dána JMX specifikací a musí obsahovat doménu a seznam property.

JMX Agent Example import java.lang.management.*; import javax.management.*; public class Main { public static void main(string[] args) throws Exception { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName name = new ObjectName("com.example:type=Hello"); Hello mbean = new Hello(); mbs.registermbean(mbean, name);...

MXBeany MXBeana je varianta standardní MBeany, která používá mapovaní komplexních typů na předem definovanou množinu datových typů (tzv otevřených - open types). MXBeana je použitelná pro jakéhokoliv klienta (klient nemusí mít přístup ke třídám implementujícím MXBeanu). Otevřené typy jsou definovány v balíku javax.management. openmbean Pravidla mapování: jednoduché typy se mapují samy na seben unchanged, komplexní typy (i.e. MemoryUsage) se mapují na typ CompositeDataSupport. MXBeana je popsána anotací @MXBean.

Příklad MXBeany (1/3) Příklad: monitorování datové struktury fronta: public interface QueueSamplerMXBean { public QueueSample getqueuesample(); public void clearqueue(); public class QueueSampler implements QueueSamplerMXBean { private Queue q; public QueueSampler(Queue queue) { q = queue; public QueueSample getqueuesample() { synchronized (q) { return new QueueSample(q.size(), q.peek()); public void clearqueue() { synchronized (q) { q.clear();

Příklad MXBeany (2/3) MXBean framework používá: getry ze třídy QueueSample pro konverzi instance QueueSample na instanci CompositeData, anotaci @ConstructorProperties pro inverzní konverzi: import java.beans.constructorproperties; public class QueueSample { private final int size; private final String head; @ConstructorProperties({"size", "head") public QueueSample(int size, String head) { this.size = size; this.head = head; public int getsize() { return size; public String gethead() { return head;

Příklad MXBeany (3/3) import java.lang.management.managementfactory; import javax.management.mbeanserver; import javax.management.objectname; public class Main { public static void main(string[] args) throws Exception { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName mxbeanname = new ObjectName("com.example:type=QueueSampler"); Queue queue = new ArrayBlockingQueue(10); queue.add("request-1"); queue.add("request-2"); QueueSampler mxbean = new QueueSampler(queue); mbs.registermbean(mxbean, mxbeanname);...

Oznámení (1/3) MBeany mohou asynchronně generovat oznámení (notification), které může například signalizovat změnu stavu, výskyt chyby atp. Aby mohla MBean generovat oznámení, musí implementovat rozhraní NotificationEmitter nebo rozšiřovat třídu NotificationBroadcasterSupport. Vlastní oznámení je instance třídy Notification nebo její podtřídy (např. AttributeChangedNotification) a odesílá se metodou: NotificationBroadcasterSupport.sendNotification. Oznámení má: zdroj - jméno MBeany která je vygenerovala. pořadové číslo - může být použito k uspořádání oznámení, které jsou doručeny "napřeskáčku".

Oznámení (2/3) import javax.management.*; public class Hello extends NotificationBroadcasterSupport implements HelloMBean { private final String name = "Reginald"; private int cachesize = DEFAULT_CACHE_SIZE; private static final int DEFAULT_CACHE_SIZE = 200; private long sequencenumber = 1; public synchronized void setcachesize (int size) { int oldsize = this.cachesize; this.cachesize = size; Notification n = new AttributeChangeNotification(this, sequencenumber++, System.currentTimeMillis(), "CacheSize changed", "CacheSize", "int", oldsize, this.cachesize); sendnotification(n);

Oznámení (3 / 3) @Override public MBeanNotificationInfo[] getnotificationinfo() { String[] types = new String[] { AttributeChangeNotification.ATTRIBUTE_CHANGE ; String name = AttributeChangeNotification.class.getName(); String description = "An attribute of this MBean has changed"; MBeanNotificationInfo info = new MBeanNotificationInfo(types, name, description); return new MBeanNotificationInfo[] {info;

Vzdálená správa Vzdálená správa se provádí pomocí: adaptéru, konektoru Adaptéry realizují různé protokoly, které zpřístupňují zaregistrované MBeany klientům (i nejavovským). Adaptéry mohou využívat jak stávající správcovské protokoly (např. Simple Network Management Protocol - SNMP), tak proprietární protokoly. Např. HTML adaptér může zobrazovat MBeany v prohlížeči.

Konektory Konektory umožňují přístup k JMX agentu vzdáleným klientům vytvořeným v Javě. Skládají se ze: serveru konektoru - je připojen k JMX agentu a vyřizuje žádosti o připojení od klientů, klienta konektoru - je zodpovědný za vytvoření spojení se serverem konektoru. Klient konektoru běží obvykle na jiné JVM než server konektoru a často běží i na jiném počítači. Klient konektoru poskytuje stejné rozhraní jako JMX agent, a tak umožňuje vzdálenému klientovi provádět stejné operace jako lokálnímu. Různé konektory mohou používat různé protokoly. JMX API definuje standardní konektor založený na RMI.

Klient RMI konektoru Příklad: Třída Client tvoří klienta RMI konektoru: import javax.management.remote.jmxconnector; import javax.management.remote.jmxconnectorfactory; import javax.management.remote.jmxserviceurl; public class Client { public static void main(string[] args) throws Exception { JMXServiceURL url = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://:9999/jmxrmi"); JMXConnector jmxc = JMXConnectorFactory.connect(url, null);

Posluchač oznámení public static class ClientListener implements NotificationListener { public void handlenotification( Notification notification, Object handback) { String message = notification.getmessage(); if (notification instanceof AttributeChangeNotification) { AttributeChangeNotification acn = (AttributeChangeNotification) notification; String attributename = acn.getattributename()); String attributetype = acn.getattributetype()); Object newvalue = acn.getnewvalue()); Object oldvalue = acn.getoldvalue());...

Vytvoření spojení s MBean Serverem // Vytvoření spojení se vzdáleným MBean server MBeanServerConnection mbsc = jmxc.getmbeanserverconnection(); // Instalace NotificationListener ClientListener listener = new ClientListener(); mbsc.addnotificationlistener(mbeanname, listener, null, null); // Získání informací o MBeanách registrovaných // u MBean serveru String domains[] = mbsc.getdomains(); String defaultdomain = mbsc.getdefaultdomain()); int count = mbsc.getmbeancount()); Set mbeannames = new TreeSet(mbsc.queryNames(null, null));

MBean proxy Metody JMX.newMBeanProxy resp. JMX.newMXBeanProxy umožňují vytvořit ve vzdáleném klientovi proxy, která MBeanu emuluje: ObjectName mxbeanname = new ObjectName("com.example:type=QueueSampler"); QueueSamplerMXBean mxbeanproxy = JMX.newMXBeanProxy(mbsc, mxbeanname, QueueSamplerMXBean.class); QueueSample queue = mxbeanproxy.getqueuesample(); Date date = queue.getdate(); String head = queue.gethead(); int size = queue.getsize(); mxbeanproxy.clearqueue();