Architekturen für verteilte Internetdienste

Ähnliche Dokumente
Architekturen für verteilte Internetdienste

Web (Site) Engineering (WebSE)

Seminar: XML und Datenbanken

Verarbeitung von XML mit SAX und DOM

Programmieren II. Einführung in XML. Vorlesung 13. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2010 XML JAXP SAX DOM

Simple API for XML (SAX) Ulrich Hoffmann

XML-Parser. Parser. Heutige Vorlesung. Grundlegende Architektur. Kategorien von Parser

Übersicht. Web (Site) Engineering (WebSE) XML-Beispieldokument. Simple API for XML (SAX) [Pro] XML-Beispiel. Vorlesung 6: Tools und Programmierung

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

Klaus Schild, XML Clearinghouse Verarbeitung von XML- Dokumenten

SAX Simple API for XML

Semistrukturierte Daten. Teil 5: Java API for XML Processing

Remote Method Invocation

2.4 Analyse von XML-Dokumenten

Einführung: Verteilte Systeme - Remote Method Invocation -

JAVA/XML Das bhv Taschenbuch

Überblick. Class-Objekte. Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen

Überblick. Beispiel: get()-methodenaufruf am VSBoard aus Übungsaufgabe 1. Analyse einer Methode: java.lang.reflect.method

XML, FI und JSON strukturiert in Java verwenden. Wolfgang Nast

XML. Arthur Zaczek. Nov 2015

XML - Datei Zugriff mit Java

Programmieren II. Annotationen (1/3) Vorlesung 6. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Annotationen XML JAXB

Programmieren II. Annotationen (1/3) Vorlesung 6. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Annotationen XML JAXB

1 Motivation. 1 Motivation. Standard Middleware für objektorientierte Anwendungen. Motivation. Fragmentierte Objektmodel. Java RMI

Programmieren II SAX. Beispiel-Schema kontakt.xsd SAX DOM. Dr. Klaus Höppner JAXB. Hochschule Darmstadt SS 2008

Berner Fachhochschule Software Schule Schweiz JDOM. Beatrice Amrhein. Oktober 06

XML. Arthur Zaczek. Nov /25

Server-Management mit JMX

SAX. (Simple. Application Programming Interface for XML)

1 Software Engineering 1

Verarbeitung von XML- Dokumenten

Java: Kapitel 9. Java und XML. Programmentwicklung WS 2008/2009. Holger Röder

Remote Method Invocation

XML-Frameworks in verschiedenen Programmiersprachen Proseminar Textkodierung und Auszeichnung

Semistrukturierte Daten

Java Remote Method Invocation (RMI)

Java und XML Grundlagen, Einsatz, Referenz

XML. extensible Markup Language. Dr. Beatrice Amrhein.

Dirk Ammelburger XML. Grundlagen der Sprache und Anwendungen in der Praxis HANSER

XML-Parser. Markus Luczak-Rösch Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme

Ruhr.pm XML-Daten verarbeiten mit XML::LibXML Autor: Datum:

Verteilte Systeme Übung

7.1.5 Java RMI Remote Method Invocation ( (

Themen. Web Service - Clients. Kommunikation zw. Web Services

XML-Parser. Markus Luczak-Rösch Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme

JavaBeans Property-Editoren und Customizer

B Java RMI B.1 B.2. 1 Java. 1.1 Objekte. Objektorientierte Sprache

Java RMI Remote Method Invocation

11 XML Programmierung

5 XML und Analyse von XML-Dokumenten

Überblick. Verteilte Systeme Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth

Seminar JMX - Java Management Extension

, Rainer Schmidberger, ISTE. XML und Java. Rainer Schmidberger

Überblick. Verteilte Systeme - 4. Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth

XML-Programmierschnittstellen: SAX, DOM

Programmieren II XML. Heusch -- Ratz -- Institut für Angewandte Informatik. KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft

Softwaretechnik 2 - XML -

Überblick. Stubs & Skeletons Java Reflection API Dynamische Proxies als Stubs Generische Skeletons Aufgabe 2. VS-Übung (SS17) Stubs & Skeletons 2 1

Properties und Proxies

DOM Document Object Model

Java Beans. Übersicht, Eigenschaftstypen, Heutiger Stand.

C Java RMI C.2 C.4. 1 Java. 1 Java (2) 1 Java (3) Objektorientierte Sprache. Objektorientierte Sprache (fortges.) Objektorientierte Sprache (fortges.

Konzepte von Betriebssystem-Komponenten Middleware RMI

Überblick. Java Reflection API. Class-Objekte

VU Semistrukturierte Daten 2

Web-Services Implementierung mit Java

Java-Programmierung. Remote Method Invocation - RMI

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

9. Remote Method Invocation Grundlagen der Programmierung II (Java)

Komponententechnologien Winter 2016/17. Komponenten. 2. Die Anfänge. Peter Sturm, Universität Trier 1

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

XML-Technologien. XML-Parser. Florian Raith Hochschule München Fakultät für Informatik und Mathematik am 04. November 2010

Algorithmen und Datenstrukturen II

5.5. Document Object Model - DOM. Überblick DOM DOM und JAXP Node-Interface Einige Subinterfaces von Node Weitere Interfaces

XML. Einführung, XML-Grundlagen und -Konzepte. XPath DTD. XQuery. XML-Schema XSLT XML-Grundlagen, -Sprachen, -Datenhaltungsfragen

XML. Einführung, XML-Grundlagen und -Konzepte. XPath DTD. XQuery. XML-Schema XSLT XML-Grundlagen, -Sprachen, -Datenhaltungsfragen

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1

Java ist auch eine Insel

Programmieren II. Arbeiten mit XML-Dokumenten. Institut für Angewandte Informatik

XML-Parser K. Schild, 2006 / M. Mochol

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

7 Remote Method Invocation (RMI)

Mobile und Verteilte Datenbanken

P A X P A X. Power API for XML. DOM und SAX. PAX : Ideen und Konzepte. Wie PAX funktioniert. Wie PAX angewandt wird. WWW-Links. von Manfred Duchrow

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

Programmieren II. Remote Method Invocation (RMI) Heusch -- Ratz. Institut für Angewandte Informatik

Java Beans. Seminar Komponentenprogrammierung Freie Universität Berlin, WS 2004/2005 Ivo Köhler, 08. November 2004

Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 3)

C Java RMI. 1 Java. Objektorientierte Sprache

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

Algorithmen und Datenstrukturen

Inhalt. Parser-Modelle. Aufgaben eines XML-Prozessors. XML-APIs und Java. Idee eines XML-Prozessors (Parsers) VU Semistrukturierte Daten 2

H.1 FORMI: An RMI Extension for Adaptive Applications H.1 FORMI: An RMI Extension for Adaptive Applications

Java und XML. Praktikum aus Softwareentwicklung 2. Java Praktikum SS 2010

Analyse und Modellierung von Informationssystemen

Programmieren in Java

Transkript:

1 Überblick Architekturen für verteilte Internetdienste Übung 1: Grundlagen holger.schmidt@uni-ulm.de XML-APIs für Java SAX DOM Java: JDOM, dom4j, StAX Validierendes Parsen XML Transformationen Java Remote Method Invocation (RMI) Java Beans Java Management Extensions 2 XML-APIs für Java 3 Simple API for XML (SAX) Konzept Herstellerunabhängige Schnittstelle (API) z.b. Java API for XML Processing (JAXP) für DOM und SAX Beliebige Implementierung Auswahl zur Laufzeit: System Properties und Factories Packages: javax.xml, org.xml, org.w3c http://www.saxproject.org/ Konzept Ereignisorientiertes Parsing: XML-Elemente lösen Ereignisse aus Push von Elementen des Dokuments an definierte Callback-Handler Ergebnis: Zustandsloser Stream ohne Navigationsmöglichkeit Hier vorgestellte Parser APIs Simple API for XML (SAX): Stream Pushing Document Object Model (DOM): Baum von Dokument-Elementen JDOM/dom4j: DOM à la Java Streaming API for XML (StAX): Stream Pulling (Cursor) Handler Dokumentinhaltsbehandlung (ContentHandler) Fehlerreaktion (ErrorHandler) DTD-Manipulation (DTDHandler) Entity-Referenzauflösung (EntityResolver) Aktueller Parser im Java SDK: Apache-Xerces 1.1 1.2

3.1 Vorgehen SAXParserFactory erzeugt SAXParser (javax.xml.parsers) Dessen SAXReader ruft je nach Element definierte Handler auf, z.b. ContentHandler, ErrorHandler, DTDHandler, EntityResolver, Eigenen Handler von DefaultHandler ableiten und Methoden ergänzen Beinhaltet ContentHandler, ErrorHandler, DTDHandler, EntityResolver Ggf. weitere Handler ableiten und implementieren (z.b. CDATA, DTD-Elemente) Konfigurieren Validierendes Parsen, Namespace-Awareness 1.3 3.2 Implementierung eines eigenen Handlers Ableitung von DefaultHandler public class MyHandler extends DefaultHandler { void startdocument() throws SAXException { void enddocument () void startelement (String namespaceuri, String sname, String qname, Attributes attrs) void endelement (String namespaceuri, String sname, String qname) void characters (char[] buf, int offset, int len) void ignorablewhitespace (char[] buf, int offset, int len) void processinginstruction(string target, String data) void setdocumentlocator (Locator l) void warning (SAXParseException e) void error (SAXParseException e) 1.4 3.3 Parsen eines XML Dokuments Beispiel // Erzeugen des Handlers DefaultHandler hr = new Handler(); // und des Parsers XMLReader xr = XMLReaderFactory.createXMLReader(); // Handler registrieren xr.setcontenthandler(hr); xr.seterrorhandler(hr); // Spezifikation der einzulesenden Datei FileReader r = new FileReader( PFAD_ZUR_DATEI ); // Start xr.parse(new InputSource(r)); 3.4 Beispiel Einfaches XML <?xml version="1.0" encoding="utf-8"?> <n:data xmlns:n="urn:avid-u1"> test </n:data> Ausgelöste Events startdocument() startprefixmapping() -> n, uri=urn:avid-u1 startelement() -> n characters() -> test endelement() -> n endprefixmapping() -> n, uri=urn:avid-u1 enddocument() 1.5 Kein Event bei XML-Deklaration -> Auslesen der Daten über Locator2 Interface möglich 1.6

4 Document Object Model (DOM) 4.1 Vorgehen Parsing läuft automatisch durch und erzeugt DOM-Baum Speicherverbrauch wächst mit Größe des zu parsenden Dokuments Sprachunabhängige API Navigation auf Dokumentbaum von mäßig getypten Knoten => Alles ist ein Knoten (Element, Attribut, Text, ) Notwendige Typ-Prüfung Node child = data.getfirstchild(); while(child!=null) { if (child.getnodetype() == Node.ELEMENT_NODE) { Element e = (Element) child; else child = child.getnextsibling(); getnextsibling liefert nächsten Geschwisterknoten zurück (bzw. null) Auch Rückwärtsnavigation möglich: getprevioussibling 1.7 DocumentBuilderFactory erzeugt DocumentBuilder (Parser) Document per newdocument oder Parsing erzeugen Root-Element: Document.getDocumentElement() Navigation: getchildnodes, getnextsibbling, Hinzufügen von Elementen: createelement Informationen: Node-API mit nodetype, nodename,nodevalue Einfaches Beispiel <e> bla </e> <e> nodetype()=element_node, nodename()= e, nodevalue()=null bla nodetype()=text_node, nodename()= #text, nodevalue()= bla 1.8 4.2 Parsen eines XML Dokuments 4.3 Wichtige Methoden Beispiel DocumentBuilderFactory factory; DocumentBuilder builder; Document doc; // Erzeugen Factory factory = DocumentBuilderFactory.newInstance(); builder = factory.newdocumentbuilder(); // Möglicher Error-Handler für Überprüfung des Dokuments builder.seterrorhandler(new org.xml.sax.errorhandler() { void warning(saxparseexception ex) { void error(saxparseexception ex) { void fatalerror(saxparseexception ex){ ); // Start doc = builder.parse(new File( PFAD_ZUR_DATEI )); 1.9 org.w3c.dom.node appendchild, removechild, gettextcontent, getparentnode, getownerdocument, getnodename/type/value, get/hasattributes, getfirst/lastchild, getnextsibling, getchildnodes org.w3c.dom.document getdocumentelement, createattribute, createelement, createtextnode, getelementsbytagname Ableitungen: org.w3c.dom.element,.attr,.comment,.text, Achtung getelementsbytagname ist transitiv => nicht auf direkte Subknoten beschränkt getchildnodes liefert alle Subknoten, nicht nur Subelemente => z.b. auch Text-Knoten (vgl. Beispiel) 1.10

5 JDOM Java-OOP DOM-Zugriff JSR-102: JDOM 1.0 Packages: org.jdom.** http://www.jdom.org Baumdarstellung des XML Dokuments Intern: Verwendung SAX/DOM-Parser => z.b. via org.jdom.input.saxbuilder Konkrete Klassen anstelle von Interfaces => XML-Knoten nicht durch Node repräsentiert (=> spezifische Klasse) Analoge Methoden zum Manipulieren, Validieren => vgl. DOM 5.1 Beispiel Implementierung SAXBuilder builder = new SAXBuilder(true); Document doc = builder.build( PFAD_ZUR_DATEI ); // Wurzelelement Element root = doc.getrootelement(); println("element: "+root.getname()); // Attribute for (Attribute a: root.getattributes()) println("- Attribute "+a.getname()+"="+a.getvalue()); // Kinderelemente for (Element e: root.getchildren()) println("- Element "+e.getname()); 1.11 Keine lästige Typprüfung nötig => vgl. DOM 1.12 6 dom4j http://www.dom4j.org/ Baumdarstellung des XML Dokuments Schneller/kleiner als JDOM Besonders schnelle Traversierung großer Dokumente Auf Interfaces aufbauende Implementierung XPath-Integration Leichteres Navigieren // JDOM: e.getchild("kind").getchild("enkel"); // dom4j: e.selectsinglenode("kind/enkel"); XSLT Integration => Transformation eines Dokuments 1.13 6.1 Beispiel Implementierung // Erzeugen des Parsers SAXReader reader = new SAXReader(); Document document = reader.read( PFAD_ZUR_DATEI ); // Wurzelknoten Element root = document.getrootelement(); // Iterieren durch die Kinderelemente for ( Iterator i = root.elementiterator(); i.hasnext(); ) { Element element = (Element) i.next(); 1.14

7 Streaming API for XML (StAX) 7.1 Beispiel Streambasiertes XML-Pull-Parsing SAX: Push-Parsing (Observer Entwurfsmuster) Iterator Entwurfsmuster => Client fragt den Parser nach der nächsten vorhandenen Information Zustandsloser Strom ohne Navigationsmöglichkeit (vgl. SAX) JSR-173 Java-API unabhängig von der Implementierung Ermöglicht auch die Erzeugung von XML Dokumenten vs. SAX 1.15 Implementierung URL u = new URL( PFAD_ZUR_DATEI ); InputStream in = u.openstream(); XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader parser = factory.createxmlstreamreader(in); for (int event = parser.next(); event!= XMLStreamConstants.END_DOCUMENT; event = parser.next()) { switch (event) { case XMLStreamConstants.START_ELEMENT: case XMLStreamConstants.END_ELEMENT: System.out.println(parser.getLocalName()); break; case XMLStreamConstants.CDATA: case XMLStreamConstants.CHARACTERS: System.out.println(parser.getText()); break; parser.close(); 1.16 8 Validierendes Parsen Möglichkeiten Document Type Definition (DTD) XML Schema 9 XML Tranformationen Extensible Stylesheet Language Transformations (XSLT) XSLT Stylesheets enthalten Transformationsanweisungen XSLT Prozessoren transformieren anhand der Stylesheets Schemavalidierung am Beispiel von SAX: DefaultHandler hr = new Handler(); XMLReader xr = XMLReaderFactory.createXMLReader(); xr.setfeature(http://xml.org/sax/features/validation, true); xr.setfeature(http://apache.org/xml/features/validation/schema, true); xr.setcontenthandler(hr); xr.seterrorhandler(hr); Java API for XML Processing (JAXP) Standard-API für XML Prozessoren: javax.xml.transform.** Einfaches Beispiel Source xmlsource = new StreamSource(xmlFile); Source xsltsource = new StreamSource(xsltFile); TransformerFactory transfact = TransformerFactory.newInstance(); Transformer trans = transfact.newtransformer(xsltsource); FileReader r = new FileReader(filepath); xr.parse(new InputSource(r)); 1.17 trans.transform(xmlsource, new StreamResult(System.out)); 1.18

10 Java Remote Method Invocation Fernaufrufmechanismus für Java Methodenaufruf an Objekten in anderen Java Virtual Machines => Lokal oder entfernt Erhalt der Aufrufsemantik von Java Primitive Datentypen und nicht exportierte RMI Objekte: Call-By-Value Exportierte RMI Objekte: Call-By-Reference 10.1 Serverseite Implementierung eines einfachen Hello World Beispiels Schnittstelle public interface Hello extends java.rmi.remote { public String sayhello() throws java.rmi.remoteexception; Architektur: Client Stub Remote Reference Layer Transport Layer Server Skeleton Remote Reference Layer 1.19 Implementierung der Schnittstelle public class HelloImpl extends UnicastRemoteObject implements Hello { public String sayhello() throws java.rmi.remoteexception { return Hello World! ; 1.20 10.1 Serverseite 10.2 Registry und Clientseite Main-Methode: HelloImpl hello = new HelloImpl(); java.rmi.naming.rebind("//<host>:<port>/hello", hello); Codebase zum dynamischen Laden von Code am Server: System.setProperties() VM-Property: java -Djava.rmi.server.codebase=<URL> Security Manager System.setSecurityManager(new java.rmi.rmisecurity Manager()) RMI Registry <java_path>/bin/rmiregistry[.exe] Darf keinen direkten Zugriff auf Classpath der Objekte haben => Codebase würde eliminiert => Client erhält Stub ohne Codebase-Annotation Implementierung des Clients Hello hello; hello = (Hello)java.rmi.Naming.lookup("//<host>:<port>/Hello"); System.out.println(hello.sayHello()); Policy-File mit Rechten grant { //permission java.security.allpermission; permission java.net.socketpermission localhost:1099, connect, resolve, accept ; ; 1.21 1.22

10.3 Clientseitige Stellvertreter 11 JavaBeans Stub-Generierung rmic [-keep] HelloImpl public java.lang.string sayhello(){ if (usenewinvoke) { Object $result = ref.invoke(this, $method_sayhello_0, null, 1253370244719889472L); else { java.rmi.server.remotecall call = ref.newcall( (RemoteObject)this,operations,0,interfaceHash); ref.invoke(call); ref.done(call); Dynamische Proxies (ab Java 1.5) Implementieren beliebige Typen Generische Dispatch-Methode invoke() JVM Parameter beim Starten des Servers: -Djava.rmi.server.ignoreStubClasses=true 1.23 Nicht zu verwechseln mit Enterprise Java Beans (EJB)!!! JavaBeans API Specification Ziel: Einfaches Komponentensystem Eigenschaften Unterstützung von Introspection Unterstützung von Customization Unterstützung von Events Unterstützung von Properties Unterstützung von Persistenz (Serialization, Externalization) 1.24 11.1 Eigenschaften Zugriff auf JavaBeans nur über Methoden möglich (Kapselung) Lesender Zugriff: get<property>() Schreibender Zugriff: set<property>() private int value; void setvalue(int value); int getvalue(); 11.1 Eigenschaften Indizierte Eigenschaften (Vektoren) private int[] value; void setvalue(int index, int value); int getvalue(int index); void setvalue(int values[]); int[] getvalue(); Boolsche Eigenschaften private boolean value; void setvalue(boolean value); boolean isvalue(); 1.25 1.26

11.1 Eigenschaften Gebundene Eigenschaften void addpropertychangelistener(propertychangelistener x); void removepropertychangelistener(propertychangelistener x); 11.1 Eigenschaften Veto-Eigenschaften void addvetoablechangelistener(vetoablechangelistener x); void removevetoablechangelistener(vetoablechangelistener x); Unterstützung einschalten private PropertyChangeSupport changes = new PropertyChangeSupport(this); void addpropertychangelistener(propertychangelistener l) { changes.addpropertychangelistener(l); void removepropertychangelistener(propertychangelistener l){ Unterstützung einschalten private VetoableChangeSupport vetos = new VetoableChangeSupport(this); void addvetoablechangelistener(vetoablechangelistener l) { vetos.addvetoablechangelistener(l); void removevetoablechangelistener(vetoablechangelistener l){ void setvalue(int value){ this.value = value; changes.firepropertychange( value, oldvalue, newvalue); 1.27 public void setvalue(int value) throws PropertyVetoException { int oldvalue = this.value; vetos.firevetoablechange( value, oldvalue, value); this.value = value; 1.28 11.1 Eigenschaften 11.2 Packaging Filter (Optional) void addpropertychangelistener(string propertyname, PropertyChangeListener listener); void removepropertychangelistener(string propertyname, PropertyChangeListener listener); void addvetoablechangelistener(string propertyname, VetoableChangeListener listener); void removevetoablechangelistener(string propertyname, VetoableChangeListener listener); Java Archive (JAR) Spezielles Manifest (META-INF/MANIFEST.MF) Meta-Informationen über das Archiv Name: avid/example/bean.class Java-Bean: True Depends-On: avid/example/bean2.class Explizite Spezifikation mit BeanInfo Klasse Listet Leistungen nach Außen explizit auf (Descriptoren) z.b. Zuordnung von Icons für Beans Später mehr 1.29 1.30

12 Java Management Extensions (JMX) JavaBeans Anwendung 12.1 Architektur JMX Instrumentation and Agent Specification, v1.2 Java auf dem Server Überwachung zur Laufzeit JMX bietet einheitliche Schnittstelle (vorher proprietäre Lösungen) Entstanden im Rahmen von JSR 3 (IBM, Bea Systems, Borland, etc.) JMX als Standard in Java 1.5 (JSR 176) Anforderungen an Anwendungen sind minimal 1.31 1.32 12.1 Architektur 12.2 MBeans Instrumentation Level Zu überwachende Resourcen Repräsentiert durch MBeans Benachrichtigungsmechanismus zum Informationsaustausch zwischen MBeans Agent Level Agenten sprechen zu verwaltende Ressourcen direkt an Stellen diese entfernten Anwendungen zur Verfügung MBeans registrieren sich am MBean Server Distributed Services Level Entferntes Management: Protokoll-Adapter, Standard Konnektoren MBean Repräsentiert überwachbare Ressource Management-Schnittstelle für MBean Server Attribute Operationen Benachrichtigungen Konstruktor 4 Typen Standard MBean Dynamic MBean Model MBean Open MBean 1.33 1.34

12.2 MBeans Standard MBean Einfachste Möglichkeit Statisches Management Interface Suffix MBean public interface JMXTestMBean { public void sayhello(); public int getvalue(); public void setvalue(int value); 12.2 MBeans Dynamic MBean Dynamische Management Schnittstelle Implementiert javax.management.dynamicmbean public interface DynamicMBean { public Object getattribute(string attribute) throws (); public void setattribute(attribute attribute) throws (); public AttributeList getattributes(string[] attributes); public AttributeList setattributes(attributelist attributes); public Object invoke(string actionname, Object params[], String signature[])throws (); public MBeanInfo getmbeaninfo(); dmbeaninfo = new MBeanInfo(dClassName, ddescription, dattributes, dconstructors, doperations, dnotifications); 1.35 1.36 12.2 MBeans Model MBean Erweiterung der Dynamic MBean Interface javax.management.persistentmbean Zusätzlich load() und store() Methoden 12.3 Beispiel Standard MBean public interface JMXTestMBean { public void sayhello(); public String getname(); Open MBean Mechanismus, neue Objekte zur Laufzeit zu verstehen und zu verwenden Implementiert javax.management.dynamicmbean Open: Signaturen basieren auf kleiner Menge Java-Typen (Void, Integer, Byte, ) Veröffentlichen OpenMBeanInfo Objekt Sofortige Verwendung ohne Neuübersetzung abhängiger Klassen 1.37 public int getvalue(); public void setvalue(int value); public static void main(string[] args) { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName name = new ObjectName("avid.u1:type=JMXTest"); JMXTest mbean = new JMXTest(); mbs.registermbean(mbean, name); // warten Thread.sleep(Long.MAX_VALUE); 1.38

12.4 Benachrichtigungen 12.4 Benachrichtigungen vgl. Java Beans Klasse erbt von NotificationBroadcasterSupport public class JMXTest extends NotificationBroadcasterSupport implements JMXTestMBean { public MBeanNotificationInfo[] getnotificationinfo() { String[] types = new String[] { AttributeChangeNotification.ATTRIBUTE_CHANGE ; String name; name = AttributeChangeNotification.class.getName(); String descript = "Attribute of this MBean has changed"; MBeanNotificationInfo info = new MBeanNotificationInfo(types, name, descript); return new MBeanNotificationInfo[] {info; Informationen über mögliche Notification Listener 1.39 vgl. Java Beans private long sequencenumber = 1; public void setvalue(int value) { int oldvalue = this.value; this.value=value; Notification n = new AttributeChangeNotification(this, sequencenumber++, System.currentTimeMillis(), "Value changed", "Value", "int", oldvalue, this.value ); sendnotification(n); 1.40 12.5 Ausführung Wichtig: Starten mit JVM-Parameter -Dcom.sun.management.jmxremote Management mit jconsole (<JDK_HOME>/bin) 13 Aufgaben Implementierung eines einfachen SAX-Parsers Verwenden des DefaultHandler Ausgabe der Namespaces Ausgabe Präfixe Ausgabe Events Validierung Implementierung eines einfachen DOM-Parsers Ausgabe der Knotentypen Ausgabe der Attribute 1.41 Welchen Parser sollte in welcher Situation verwendet werden? z.b. bei großen Dokumenten, Zugriff über Netzwerk 1.42

13 Aufgaben Java RMI Implementierung eines einfachen Zeitservers: Methode gettime() gibt aktuelle Uhrzeit zurück Mit/ohne Stub-Erzeugung Variante: gettime() gibt Uhrzeitobjekt zurück Java Objekt Exportiertes Java RMI-Objekt Java Management Extensions (JMX) Beispiel aus Übung selbst ausprobieren Dynamic MBean Implementierung anschauen http://java.sun.com/j2se/1.5.0/docs/guide/jmx/examples.html 1.43