Architekturen für verteilte Internetdienste

Ähnliche Dokumente
Architekturen für verteilte Internetdienste

Server-Management mit JMX

Ü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

Einführung: Verteilte Systeme - Remote Method Invocation -

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

Remote Method Invocation

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

Seminar JMX - Java Management Extension

Java Remote Method Invocation (RMI)

Verteilte Systeme Übung

7.1.5 Java RMI Remote Method Invocation ( (

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

Remote Method Invocation

Überblick. Java Reflection API. Class-Objekte

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

Java RMI Remote Method Invocation

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

JavaBeans Property-Editoren und Customizer

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

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

Java-Programmierung. Remote Method Invocation - RMI

Java Beans. Übersicht, Eigenschaftstypen, Heutiger Stand.

Konzepte von Betriebssystem-Komponenten Middleware RMI

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

Properties und Proxies

7 Remote Method Invocation (RMI)

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

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

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

36.2 Example ClassLoader Example Appletviewer

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

Hintergrund und Motivation

Web-Services Implementierung mit Java

8.1.5 Java RMI Remote Method Invocation

Programmieren in Java

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

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

Verteiltes Rechnen. Verteilte Dienste mit Java Remote Method Invocation (RMI). Prof. Dr. Nikolaus Wulff

12 Abstrakte Klassen, finale Klassen und Interfaces

II.4.5 Generische Datentypen - 1 -

Mobile und Verteilte Datenbanken

Algorithmen und Datenstrukturen

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

Remote Method Invocation

C Java RMI. 1 Java. Objektorientierte Sprache

Die Magie von MBeans und JMX. DOAG 2014 Andreas Chatziantoniou - Foxglove-IT BV

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

Überblick. Verteilte Systeme - 4. Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs

Application Servers. Application Server JBoss Java Management Extensions (JMX) Dynamische Rekonfigurierung

AVO Übung 1. Java RMI, Custom Sockets, Activation. 2. November 2004 (WS 2004) Andreas I. Schmied

Praktikum aus Softwareentwicklung 2, Stunde 8

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Mobile und Verteilte Datenbanken

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

II.4.4 Exceptions - 1 -

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

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Praktikum Verteilte Anwendungen

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

14 Abstrakte Klassen, finale Klassen, Interfaces

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation RMI Beispiel

Übung zur Vorlesung "Einführung in Verteilte Systeme"

Richard Bubel & Martin Hentschel

Java Beans.

Enterprise JavaBeans Überblick

Info B VL 11: Innere Klassen/Collections

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Die abstrakte Klasse Expression:

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Client/Server-Programmierung

Client/Server-Programmierung

II.4.2 Abstrakte Klassen und Interfaces - 1 -

H.2 Distributed Events

Info B VL 8: Abstrakte Klassen & Interfaces

Theorie zu Übung 8 Implementierung in Java

RMI Server und Client

Javakurs für Anfänger

Info B VL 14: Java Collections/Reflections

Verteilte Systeme. Verteilte Objektorientierte Systeme I. Prof. Dr. Oliver Haase

II.4.4 Exceptions - 1 -

Programmieren in Java

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Laufzeitmanagement von OSGi Applikationen

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Java Beans von Christian Beck-Wörner. Inhalt. Was ist ein Bean Konzept von Beans Entwicklung eines Beans Eigenschaften von Beans Testumgebung: BDK

Transkript:

1 Überblick Architekturen für verteilte Internetdienste Java Remote Method Invocation Java Beans Java Management Extensions Übung 2: Java RMI, Java Beans und Java Management Extensions (JMX) holger.schmidt@uni-ulm.de Fernaufrufmechanismus für Java Erhalt der Java Aufrufsemantik Primitive Datentypen und nicht exportierte RMI Objekte: Call-By-Value Exportierte RMI Objekte: Call-By-Reference Architektur: Implementierung eines einfachen Hello World Beispiels Interface public interface Hello extends java.rmi.remote { public String sayhello() throws java.rmi.remoteexception; Implementierung Client Server public class HelloImpl extends UnicastRemoteObject implements Hello { Stub Remote Reference Layer Transport Layer Skeleton Remote Reference Layer 2.1 public String sayhello() throws java.rmi.remoteexception { return Hello World! ; 2.2

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()) Policy-File mit Rechten grant { //permission java.security.allpermission; permission java.net.socketpermission localhost:1099, connect, resolve, accept ; ; 2.3 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()); 2.4 Stub-Generierung rmic [-keep] HelloImpl Nicht verwechseln mit Enterprise Java Beans (EJB)!!! JavaBeans API Specification 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 2.5 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) 2.6

Eigenschaften Zugriff nur über Methoden möglich (Kapselung) Lesender Zugriff: get<property>() Schreibender Zugriff: set<property>() private int value; void setvalue(int value); int getvalue(); 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); int isvalue(); 2.7 2.8 Gebundene Eigenschaften void addpropertychangelistener(propertychangelistener x); void removepropertychangelistener(propertychangelistener x); Veto-Eigenschaften void addvetoablechangelistener(vetoablechangelistener x); void removevetoablechangelistener(vetoablechangelistener x); Unterstützung einschalten private PropertyChangeSupport changes = new PropertyChangeSupport(this); Unterstützung einschalten private VetoableChangeSupport vetos = new VetoableChangeSupport(this); void addpropertychangelistener(propertychangelistener l) { changes.addpropertychangelistener(l); void removepropertychangelistener(propertychangelistener l){... void addvetoablechangelistener(vetoablechangelistener l) { vetos.addvetoablechangelistener(l); void removevetoablechangelistener(vetoablechangelistener l){... void setvalue(int value){ this.value = value; changes.firepropertychange( value, oldvalue, newvalue); 2.9 public void setvalue(int value) throws PropertyVetoException { int oldvalue = this.value; vetos.firevetoablechange( value, oldvalue, value); this.value = value; 2.10

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); Packaging Java Archive (JAR) Spezielles Manifest (META-INF/MANIFEST.MF) 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 Zuordnung von Icons für Beans Später mehr... 2.11 2.12 (JMX) Java auf dem Server Überwachung zur Laufzeit JMX bietet einheitliche Schnittstelle (nicht proprietär) Architektur (aus Java Management Extensions Instrumentation and Agent Specification, v1.2) Entstanden im Rahmen von JSR 3 (IBM, Bea Systems, Borland, etc.) JSR 176: JMX als Standard in Java 1.5 Anforderungen an Anwendungen sind minimal 2.13 2.14

Architektur Instrumentation Level Zu überwachende Resourcen Repräsentiert durch MBeans Benachrichtigungsmechanismus zum Informationsaustausch zwischen MBeans MBean Repräsentiert überwachbare Ressource Management-Schnittstelle für MBean Server Attribute Operationen Benachrichtigungen Konstruktor 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 2.15 4 Typen Standard MBean Dynamic MBean Model MBean Open MBean 2.16 Standard MBean Einfachste Möglichkeit Statisches Management Interface Suffix MBean public interface JMXTestMBean { public void sayhello(); public int getvalue(); public void setvalue(int value); 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); 2.17 2.18

Model MBean Erweiterung der Dynamic MBean Interface javax.management.persistentmbean Zusätzlich load() und store() Methoden 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 Beispiel (Standard MBean) public interface JMXTestMBean { public void sayhello(); public String getname(); public int getvalue(); public void setvalue(int value); public static void main(string[] args) { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName name = new ObjectName("avid.u2:type=JMXTest"); JMXTest mbean = new JMXTest(); mbs.registermbean(mbean, name); Thread.sleep(Long.MAX_VALUE); 2.19 2.20 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; 2.21 Benachrichtigungen (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); 2.22

Wichtig: Starten mit JVM-Parameter -Dcom.sun.management.jmxremote Management mit jconsole (<JDK_HOME>/bin) 5 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 2.23 Java Beans VetoableChangeListener vs. Event Listener Interface Java Management Extensions (JMX) Beispiel aus Übung online (selbst ausprobieren) Dynamic MBean Implementierung http://java.sun.com/j2se/1.5.0/docs/guide/jmx/examples.html 2.24