AVID-Übung 5. Asynchronous.NET Remoting. 15. Juli Andreas I. Schmied Abteilung Verteilte Systeme Projektgruppe AspectIX

Ähnliche Dokumente
Übung 1 mit C# 6.0 MATTHIAS RONCORONI

AVO Übung 4. AspectIX. 18. Januar 2005 (WS 2004) Andreas I. Schmied Universität Ulm Fakultät für Informatik

Ü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

Delegaten. d. h. eine Tätigkeitsanforderung wird weitergeleitet

Universität Karlsruhe (TH)

Auszug aus JAX-WS Folien

Implementieren von Klassen

Erzeugungsmuster. Kapselung der Objekt-Erzeugung

Verteilte Systeme Übung

II.4.5 Generische Datentypen - 1 -

Methoden und Wrapperklassen

Ein einfacher Server. .NET Remoting. Klassentypen

E.1 Objekt-Serialisierung

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Objektorientierte Programmierung

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

Objektorientierte Programmierung Studiengang Medieninformatik

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

Ereignisse (Events) Asynchrones Versenden von Informationen Sender (Herausgeber) Empfänger (Abonnent) Dr. Beatrice Amrhein

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 15/16

Tag 8 Repetitorium Informatik (Java)

Remote Method Invocation

Java Referenzdatentypen genauer betrachtet

Remote Method Invocation

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Java Einführung Methoden. Kapitel 6

Javakurs für Anfänger

Fakultät IV Elektrotechnik/Informatik

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

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Modellierung und Programmierung 1

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Modellierung und Programmierung 1

Einführung in die OOP mit Java

Wiederholung aus SWE2

Internetanwendungstechnik (Übung)

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

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

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

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

Informatik II Übung 5

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Vorlesung Programmieren

Einführung in C# Teil 3. Matthias Nübling

Hinweise C-Programmierung

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Prof. W. Henrich Seite 1

Programmieren 2 Java Überblick

Objektorientierung (OO)

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

Ausnahmebehandlung in Java

Javakurs für Anfänger

Variablenarten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Repetitorium Informatik (Java)

Computeranwendung und Programmierung (CuP)

Programmierung für Mathematik HS11

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Algorithmen und Datenstrukturen

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

Objektorientierte Programmierung Studiengang Medieninformatik

Abbildung des Aufruf-Interaktionsstils von.net in den kanonischen Interaktionsstil auf Basis von Ereignissen und umgekehrt

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Grundlagen der Objektorientierten Programmierung - Statische Arrays

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

Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1

Prozesse und Threads in Android

Inner Class. 1 public class OuterClass { 2 private int var; 3 public class InnerClass { 4 void methoda() {}; 5 } 6 public void methodb() {}; 7 }

Organisatorisches. VO und UE am bleiben am Wissensüberprüfung beginnt schon etwas früher: Do, , 10:30 bis 11:30 (HR)

1 Klassen und Objekte

Seminar Ausgewählte Komponenten von Betriebssystemen. IDL4 Compiler

Kommunikation. Björn und Georg

Organisatorisches. Ersatztermine UE: - Gruppe 1: Di, , 18:00-19:30 - Gruppe 2: Mi, , 18:00-19:30. VO am

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Javakurs für Anfänger

Kapitel 10 Delegationsvariablen

Einstieg in die Informatik mit Java

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Vorkurs Informatik WiSe 15/16

1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären.

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Musterlösung Stand: 5. Februar 2009

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C

Software Entwicklung 1

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Konstruktor/Destruktor

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

Transkript:

Abteilung Verteilte Systeme Projektgruppe AspectIX Universität Ulm Fakultät für Informatik AVID-Übung 5 Asynchronous.NET Remoting 15. Juli 2004 Andreas I. Schmied (schmied@inf...)

Asynchrone Methodenaufrufe Informell: Aufruf wird initiiert Programm läuft lokal weiter Ergebnis wird später abgeholt Beispiel: Broadcast-Service Client schickt Nachricht an Service Service reflektivert Nachricht an alle Clients Service wird als Sender Remoting-Client Clients werden als Empfänger selbst Remoting-Server Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 2/13

Delegates und Events (1) Delegates typisierte Methodenzeiger, statisch oder objektgebunden Typ-Definition und Delegate-Variable 1 class MyService {... 2 public delegate void RadioHandler(String msg); 3 public RadioHandler radio; 4 } Client meldet sich signaturkonform an Delegate-Variable an 5 class MyClient {... 6 void register() { 7 MyService srv =...; 8 srv.radio += new MyService.RadioHandler(this.OnRadio); 9 } 10 void OnRadio(String msg) { 11 Console.WriteLine("Heard: "+msg); } } Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 3/13

Delegates und Event (2) Service erzeugt Nachricht an alle angemeldeten Delegates radio("you're listening radio AvID!"); Features (näheres s.u.) void-delegate-nachrichten automatisch asynchron, wenn Aufruf: <delegate-variable>(<formal parameters>, null, null); ", null, null" ~ ", AsyncCallback-Handler, <delegate-variable>" Methoden Begin/EndInvoke,... automatisch signaturkonform generiert Threadpooling und Synchronisation wird von.net bereitgestellt Probleme AVID-Übung 5 srv.radio =... überschreibt vorherigen (deshalb +=) Abmelden: srv.radio -=... Mehrere Delegates: non-void-rückgabewert nicht eindeutig (s.u.) Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 4/13

Delegates und Events (3) Nachteile von puren Delegates Delegate-Variablen sind public! Delegate-Variablen sind überschreibbar (=singledelegate, =null)! Delegate-Nachrichten sind öffentlich auslösbar! Lösung: Events MyService verwendet spezielle Event-Objekte (Zeile oben ersetzt) 3 public event RadioHandler radio; Compiler erzeugt nur public-methoden für Operatoren += und -= Event kann nur von Erzeuger ausgelöst werden statisch durch Compiler geprüft Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 5/13

Asynchrone Methodenaufrufe mit Rückgabe Behandlung über.net-callback-handler AsyncCallback Ergebnis wird über IAsyncResult bereitgestellt Beispiel: PI-Factory Annahme: mehrere Clients an pifevent angemeldet public delegate float PIF(int length); public event PIF pifevent;... for(pif pif in pifevent.getinvocationlist() ) pif.begininvoke(42, new AsyncCallback(this.Done), pif);... //...,null, null); private void Done(IAsyncResult res) { PIF pif = (PIF) res.asyncstate; float pi = pif.endinvoke(res); } AVID-Übung 5 Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 6/13

Asynchrones Remoting (1) Service: 1 class PiService {... 2 float computepi(int length) {... } 3 } Client: (ohne Callback:..., null, null) 4 delegate float PiDgt(int length); 5 PiService srv = new PiService(); 6 PiDgt del = new PiDgt(srv.computePI); 7 IAsyncResult ar = del.begininvoke(42, null, null); 8... 9 float pi = del.endinvoke(ar); Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 7/13

Asynchrones Remoting (2) Probleme: Begin/EndInvoke simuliert Nebenläufigkeit intern synchron mit eigener Connection pro Call Typauflösung in Soapsuds-generierten Assemblies schlägt fehl What the... %~# Work-around für SAOs soapsuds... -gc Attribut [... SoapType(...)] vor SAO-Klasse entfernen CAOs: what the hell... #Ox... #-P Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 8/13

Asynchrones Remoting mit lokalem Wrapper Client: (Listing erweitert, s.o.) 4 delegate float WrappedPiDgt(PiService s, int length); static float MyWrapper (PiService s, int length) { return s.computepi(length); } 5 PiService srv = new PiService(); 6 WrappedPiDgt del = new WrappedPiDgt(MyWrapper); 7 IAsyncResult ar = del.begininvoke(srv, 42, null, null); 8... 9 float pi = del.endinvoke(ar); Problem: zumindest noch synchron innerhalb Wrapper AVID-Übung 5 Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 9/13

Asynchone Events (1) Shared Assembly: namespace Shared { public delegate void RadioHandler(String msg); } public interface Radio { void send(string msg); event RadioHandler radio; } Server: class MyService : MarshalByRefObject, Shared.Radio { public override object InitializeLifetimeService() { return null; } // forever public event Shared.RadioHandler radio; } void send(string msg) { radio(msg); } Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 10/13

Asynchrone Events (2) Client: 1 class MyClient {... 2 void register() { 3 MyService srv =...; 4 MyHandler hdl = new MyHandler(); 5 srv.radio += new RadioHandler(hdl.OnRadio); } } 6 class MyHandler : MarshalByRefObject { 7 [OneWay] void OnRadio(String msg) 8 { Console.WriteLine("Heard: "+msg); } 9 public override object InitializeLifetimeService() 10 { return null; } // forever } [OneWay] asynchrone Methode ohne Rückgabe Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 11/13

Asynchrone Events (3) Probleme: Exception auf Serverseite erzeugt, weil: 1. Verbinden des Delegates mit der Event-Quelle 2. Deserialisierung auf Serverseite 3. Client-Assembly dort nicht verfügbar %~# Lösung: Adapter-Delegate-Klasse mit Deklaration in Shared-Assembly an Service angemeldet leitet Event an lokalen Client weiter Verhalten von [OneWay] im Server (++) Exception unterdrückt, falls Client-Fehler (--) Service probiert es jedesmal wieder (Aufwand!) manuelles Versenden in for (...GetInvocationList()) bei Exception einzeln Delegates entfernen (-=) Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 12/13

Copyright 2004 Andreas I. Schmied (schmied@inf...), Abteilung Verteilte Systeme, Universität Ulm 13/13