H.2 Distributed Events



Ähnliche Dokumente
Java-Programmierung. Remote Method Invocation - RMI

Remote Method Invocation

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

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

Java RMI Remote Method Invocation

Typumwandlungen bei Referenztypen

Große Übung Praktische Informatik 1

Einführung in die Programmierung

A.1 Überblick über JINI

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

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken

Factory Method (Virtual Constructor)

Programmieren in Java

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Der lokale und verteilte Fall

JINI Security & Scalability. JINI Security

Java: Vererbung. Teil 3: super()

Jini: Programmiermodell

3 Objektorientierte Konzepte in Java

JINI. JINI Lookup-Service. Lookup-Service. von Ingo Seidemann & Sven Hoffmann

Javakurs zu Informatik I. Henning Heitkötter

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

G.1 Überblick über JINI

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

8.1.5 Java RMI Remote Method Invocation

Einführung in Javadoc

Delegatesund Ereignisse

Gebundene Typparameter

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Objektorientierte Programmierung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Reflection. Arthur Zaczek. Nov 2014

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck

Remote Method Invocation

Übungen zu Softwaretechnik

Objektorientierung: Klassen und Objekte

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Objektorientierte Programmierung

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

5. Tutorium zu Programmieren

Konzepte von Betriebssystem-Komponenten Middleware RMI

WPF Steuerelemente Listbox, ComboBox, ListView,

Middleware. Übungen zu. Wintersemester 2003/04. Teil III: JINI. A.1 Konzepte. Java Intelligent Network Interface (JINI)

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

Client/Server-Programmierung

Client/Server-Programmierung

Testen mit JUnit. Motivation

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Java Einführung Abstrakte Klassen und Interfaces

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Programmierkurs Java

AutoCAD Dienstprogramm zur Lizenzübertragung

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javakurs 2013 Objektorientierung

WebService in Java SE und EE

7 Remote Method Invocation (RMI)

Java-Schulung Grundlagen

Remote Method Invocation

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Anleitung über den Umgang mit Schildern

Studentische Lösung zum Übungsblatt Nr. 7

Computeranwendung und Programmierung (CuP)

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Client-Server-Beziehungen

Innere Klassen in Java

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Musterlösungen zur Klausur Informatik 3

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Die IFC Schnittstelle in EliteCAD V11 AR ist ein objektorientierter Datentransfer und kann parametrisierte 3D-Modelldaten austauschen.

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

CodeSaver. Vorwort. Seite 1 von 6

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Java Remote Method Invocation (RMI)

Java Kurs für Anfänger Einheit 5 Methoden

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

Historical Viewer. zu ETC5000 Benutzerhandbuch 312/15

Systemvoraussetzung < zurück weiter >

Client/Server-Programmierung WS2007/08. EJB/JSP: Schritt-für-Schritt Anleitung

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Jürgen Bayer. MDI-Anwendungen in C#

7.1.5 Java RMI Remote Method Invocation ( (

5.5.8 Öffentliche und private Eigenschaften

Vererbung & Schnittstellen in C#

2A Basistechniken: Weitere Aufgaben

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Arbeiten mit UMLed und Delphi

Prinzipien Objektorientierter Programmierung

Einführung in die Java- Programmierung

EJBs und Sicherheit. Vorlesung: Applikationsserver. Prof. Dr. Ch. Reich furtwangen.de furtwangen.

Algorithmen und Datenstrukturen

Transkript:

H Überblick über die 7. Übung H Überblick über die 7. Übung 1 RemoteEvent Remote Events ServiceEvents Basisklasse aller Jini Events package net.jini.core.event; import java.rmi.marshalledobject; Security-Policies RMI Versionen Universität Erlangen-Nürnberg Informatik 4, 2005 H-Uebung7.fm 2005-12-06 09.28 H.1 public class RemoteEvent implements Serializable { public RemoteEvent( Object source, long eventid, long seqnum, MarshalledObject handback) public long getid(); public long getsequencenumber(); public MarshalledObject getregistrationobject(); Enthält: Proxy des Senders, EventID, Sequenznummer, Identifikations- Objekt, welches bei der Registrierung angegeben wurde. H.4 2 RemoteEventListener Probleme Netzwerkausfall Reihenfolge Event-Senke kann verschwinden Lösungen: Exceptions Sequenznummer Lease zusätzlich: ein Identifikations-Objekt (Handback) vom Listener, welches bei jedem Event wieder mitgegeben wird. H.3 Nur ein Interface, das von einer Event-Senke implementiert werden muß public interface RemoteEventListener extends java.rmi.remote, java.util.eventlistener { public void notify(remoteevent theevent) throws UnknownEventException, java.rmi.remoteexception; UnknownEventException bei unbekannten Events (z.b. Quelle und Typ passt nicht zusammen), der Sender sollte daraufhin den Versand dieses Eventtyps einstellen. H.5

3 EventRegistration 5 ServiceEvent Wird von der Event-Quelle bei der Registrierung zurückgegeben package net.jini.core.event; import net.jini.core.lease.lease; public class EventRegistration implements java.io.serializable { public EventRegistration( long eventid, Object source, Lease lease, long seqnum); public long getid() public Object getsource(); public Lease getlease(); public long getsequencenumber(); Enthält: EventID, Quelle, Lease, aktuelle Sequenznummer Kein Standard-Interface für Registrierung! H.6 Problem: Wie erfahre ich, wenn sich ein passender Service nach meiner Suche anmeldet? Lookup Service verschickt ServiceEvents Anmelden mittels notify public interface ServiceRegistrar { public static final int TRANSITION_MATCH_NOMATCH = public static final int TRANSITION_NOMATCH_MATCH = public static final int TRANSITION_MATCH_MATCH = public EventRegistration notify( ServiceTemplate tmpl, int transitions, RemoteEventListener listener, java.rmi.marshalledobject handback, long leaseduration) throws java.rmi.remoteexception; H.8 4 Beispiel 5 ServiceEvent (2) sehr einfacher Beispiel-Code um ein Event anzubieten protected RemoteEventListener listener = null; public EventRegistration addremotelistener(remoteeventlistener listener) throws java.util.toomanylistenersexception { if (this.listener == null) this.listener = listener; else throw new java.util.toomanylistenersexception(); return new EventRegistration(0L, proxy, null, 0L); protected void firenotify(long eventid, long seqnum) { if (listener == null) return; RemoteEvent remoteevent = new RemoteEvent(proxy, eventid, seqnum, null); listener.notify(remotevent); H.7 Die Events werden über das Standard-Interface net.jini.core.event.remoteeventlistener entgegengenommen Im Event sind Informationen über die Änderung enthalten net.jini.core.lookup.serviceevent public abstract class ServiceEvent extends net.jni.core.event.remoteevent { public ServiceID getserviceid(); public int gettransition(); public abstract ServiceItem getserviceitem(); H.9

6 Beispiel 7 Jini Browser Bei jeder Änderung benachrichtigen lassen: public class RegistrarObserver implements RemoteEventListener { ServiceRegistrar registrar =.; int transitions = ServiceRegistrar.TRANSITION_MATCH_NOMATCH ServiceRegistrar.TRANSITION_NOMATCH_MATCH ServiceRegistrar.TRANSITION_MATCH_MATCH; RemoteEventListener proxy = (RemoteEventListener) exporter.export(this); ServiceTemplate template = new ServiceTemplate(null,null,null); Programm, um in Lookup Services zu suchen und aufzulisten Browser starten java -cp ${JINI_HOME/lib/browser.jar -Djava.security.policy=my.policy -Djava.rmi.server.codebase= http://webserver:4711/browser-dl.jar com.sun.jini.example.browser.browser Browser registriert sich für ServiceEvents Lookup Service braucht Proxy, um Browser Events zuzustellen Proxy-Code muss über WWW-Server geladen werden try { registrar.notify(template, transitions, proxy, null, Lease.ANY); catch(remoteexception e) { e.printstacktrace(); H.10 Web-Server starten java -jar ${JINI_HOME/lib/tools.jar -port 4711 -dir ${JINI_HOME/lib/ -verbose H.12 6 Beispiel (2) 7 Jini Browser (2) ServiceEvent auswerten: public void notify(remoteevent evt) throws RemoteException, UnknownEventException { try { ServiceEvent sevt = (ServiceEvent) evt; switch (sevt.gettransition()) { case ServiceRegistrar.TRANSITION_NOMATCH_MATCH: System.out.println("nomatch -> match");break; case ServiceRegistrar.TRANSITION_MATCH_MATCH: System.out.println("match -> match"); break; case ServiceRegistrar.TRANSITION_MATCH_NOMATCH: System.out.println("match -> nomatch");break; if (sevt.getserviceitem() == null) { System.out.println("now null"); else { Object service = sevt.getserviceitem().service; System.out.println("Service is " + service.tostring()); catch(exception e) {e.printstacktrace(); H.11 H.13

2 Beispiele Legen das Verhalten des SecurityManagers fest Standard Policy in: $JAVA_HOME/jre/lib/security/java.policy Jedem alles erlauben: grant { permission java.security.allpermission "", ""; ; Benutzer Policy in: $HOME/.java.policy Zusätzliche Policy wird mit der Eigenschaft java.security.policy angegeben java -Djava.security.policy=URL Klassenname H.14 Erlaubnis abhängig von der Herkunft des Codes grant codebase "file:/local/java-lib/jini-2.1/lib/*" { permission java.security.allpermission; ; Endung bestimmt, welchen Klassen die Erlaubnis gewährt wird: /lib/= alle Klassen, keine JAR-Archive /lib/*= alle Klassen und JAR-Archive /lib/-= alle Klassen und JAR-Archive, auch in Unterverzeichnissen H.16 1 Policy-File Syntax 2 Beispiele (2) Zugriff erlauben grant signedby "signer_name1,s_n2,..", codebase "URL" { permission permission_class_name "target_name", "action", signedby "signer_names";. ; Schlüsselquelle angeben (erzeugen mit Hilfe von keytool) keystore "keystore_url", "keystore_type"; Wem wird ein Recht gegeben signedby: das Recht nur signiertem Code (aus signiertem JAR-File) geben codebase: nur Code von einer bestimmten Quelle bekommt das Recht Welches Recht wird vergeben spezifiziert durch Permission-Klasse und Argumente signedby: die Permission Klasse selbst muss signiert sein H.15 Nur bestimmte Rechte geben grant { permission java.net.socketpermission "129.132.200.35", "connect,accept"; ; genau spezifizierte Rechte grant signedby "sysadmin", codebase "file:/home/sysadmin/*"{ permission java.security.securitypermission "Security.insertProvider.*"; permission java.security.securitypermission "Security.removeProvider.*"; permission java.security.securitypermission "Security.setProperty.*"; ; H.17

3 Jeri Exporter 1 Traditionelles RMI implizit: public class x extends UnicastRemoteObject implements Remote { explizit: public class x implements Remote { public static void main(string[] args) throws Exception { Remote demo = new x(); // this exports the RMI stub to the Java runtime RemoteStub stub = UnicastRemoteObject.exportObject(demo); H.18 Jini Extensible Remote Invocation Jini Trust-Modell Stubs müssen nicht mehr explizit erzeugt werden verschiedene Transportprotokolle (HTTP, HTTPS, SSL, TCP) flexibler GC bessere Konfigurierbarkeit Konfiguration mittels zweier Parameter ServerEndpoint: Kommunikationsendpunkt des gewünschten Protokolls InvocationLayerFactory: Stub-, Skeleton Generator Beispiel: Exporter exporter = new BasicJeriExporter( TcpServerEndpoint.getInstance(0), new BasicILFactory()); H.20 2 Exporter 3 Jeri: Exportierte Interfaces Nachteil des traditionellen RMI: Der Proxy implementiert alle Remote-Interfaces des Originalobjekts kein explizites "unexport" keine Auswahl des zu verwendenden Protokolls: RMI over HTTP, IIOP, SSL Beispiel: expilizites Erzeugen des Stubs und Skeletons Exporter explizites Exportieren und "Unexportieren" verschiedene Aufrufprotokolle Beispiel: Exporter exporter1 = new JrmpExporter(); Exporter exporter2 = new IiopExporter(); Remote proxy = exporter1.export(demo); exporter1.unexport(true); Ein Exporter ist imer nur für ein Objekt verantwortlich H.19 IfaceImplProxy implementiert keine Innterfaces! Iface iface = (Iface) ifaceimplproxy // class cast error Iface iface = (Iface) ifaceremoteimplproxy // okay H.21

4 Konfiguration 4 Konfiguration (3) Konfiguration des Transport-Protokolls (z.b. TCP, Firewire) des Aufrufprotokolls (z.b. IIOP, JRMP, Jeri) zur Laufzeit möglich Beispiel einer Konfigurationsdatei: import net.jini.jrmp.*; import net.jini.iiop.*; import net.jini.jeri.basicilfactory; import net.jini.jeri.basicjeriexporter; import net.jini.jeri.tcp.tcpserverendpoint; Schnittstelle zu Konfigurationsdaten: public interface Configuration { Object getentry( String component, String name, Class type) Ein Konfigurationseintrag besteht aus: Komponentenname, Name und Klasse des zu konfigurierenden Objekts Implementiert z.b. in net.jini.config.configurationfile H.22 JrmpExportDemo { exporter = new JrmpExporter(); IiopExportDemo { exporter = new IiopExporter(); JeriExportDemo { exporter = new BasicJeriExporter( TcpServerEndpoint.getInstance(0), new BasicILFactory()); H.24 4 Konfiguration (2) 4 Konfiguration - Beispiel Configuration Objekt von einem ConfigurationProvider erzeugt ohne weitere Angaben wird ein ConfigurationFile Objekt erzeugt Beispiel: Configuration config = ConfigurationProvider.getInstance( new String[]{"myconfig.file"); Konfiguration aus Datei laden import java.rmi.*; import net.jini.config.*; import net.jini.export.*; String CONFIG_FILE = "jeri/jeri.config"; String[] configargs = new String[] {CONFIG_FILE; In einer Konfigurationsdatei kann man dann die gewünschte Klasse angeben Format einer Konfigurationsdatei: import benötigte Packages KomponentenName { Objektname = new Klassenname(); H.23 // get the configuration Configuration config = ConfigurationProvider.getInstance(configArgs); // use this to construct an exporter Exporter exporter = (Exporter) config.getentry( "JeriExportDemo", "exporter", Exporter.class); // export an object of this class Remote proxy = exporter.export(new ConfigExportDemo()); H.25