Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke.

Slides:



Advertisements
Ähnliche Präsentationen
Dynamische WEB-Applikationen
Advertisements

M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
Objektorientierte Programmierung
Klassen - Verkettete Liste -
ServiceGlobe: Flexible and Reliable Web Service Execution Markus Keidl, Stefan Seltzsam und Alfons Kemper Universität Passau Fakultät für Mathematik und.
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
Microsoft Referenzarchitekturen- Infrastruktur für Connected Systems
Zusammenfassung des Kapitels 8
Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität.
Verteilte Software - Java - Prozedurale Programmierung 1
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Design by Contract with JML - Teil 2
Java News & Music Der Chat
Listen Richard Göbel.
ATHOS Benutzertreffen 2007
1 Was sind Aglets? Was sind Aglets? Seminar Software Agenten Vortrag von Tatjana Tschupin und Sergej Lewin und Sergej Lewin.
Chatten mit Aglets Seminar Softwareagenten Vortragende: Cengiz Balkan & Olaf Ziemann
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.
Dynamische Webseiten Java servlets.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Christian, Leif, Carsten, AlbertCodeGen2 – Template- und Modellbasierte Codegenerierung 1 CodeGen2 Template- und Modellbasierte Codegenerierung für Fujaba.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.
Proxy Pattern Vorlesung Design Patterns Sieglinde Heinrich
F açade P attern By Nicolas Lanquetin. Façade Pattern Structural Pattern Bietet ein gemeinsames Interface, anstatt vieler Interfaces eines Subsystems.
Modulare Programmierung
04 - Actions Actions Actions 2 Motivation In verschiedenen Swing-Komponenten werden ausgelöste Aktionen durch ActionListener behandelt. Häufig werden.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
WebCast: Managed Smart Tags mit VSTO Jens Häupel.NET Technologieberater Microsoft Deutschland GmbH
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
XML-Schnittstellen: SAX, DOM, XML Pull Parsing Timo Terletzki Transformation von XML-Dokumenten.
Wieder und wieder und wieder …. Nicht vor Pilz? ja Schritt vorwärts.
Medien zwischen Technologie und Gesellschaft Dozent: Herr Prof. Dr. Manfred Thaller SS 13 Referent: Christian Braun.
Loops Jason Gregory : Game Engine Architecture Tobias Kemper Softwaretechnologie II (Teil 2) HKI Uni Köln SS 2013.
Ein Rechensystem ist ein aus Hard- und Software bestehendes System zur Speicherung und Verarbeitung von Informationen.
Server.
Service components and distribution with OSGi Seminar: Multimedia- und Internetsysteme Paul Hübner | Bildquellen : [1]
Java Performance Tuning Performance Tuning is similar to playing a strategy game but happily you usually get paid for it.
Projekt Alcatraz Java RMI / Spread - Gruppe A4.
SAM – Projekt Alcatraz Fossati Christian Schramek Stefan
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Parallel Programming Thread Synchronization. Heute 1. Lösung zu Assignment 2 2. Erstellen und Starten von Threads in Java 3. Das synchronized Schlüsselwort.
Parallel Programming Proofs ( yay !)
Kap 4-1OHO Kap. 4.2 Das Orbix CORBA-System Kurzer überblick zu der CORBA-Implementierung Orbix •Unser Fahrplan: •IDL Verwendungsbeispiel •Zoom-In: CORBA.
Abteilung für Telekooperation Übung Softwareentwicklung 2 für Wirtschaftsinformatik Dr. Wieland Schwinger
Exception Handling in Java
Praxis der Internet-Programmierung
XML IV: Cocoon 2.
Algorithmen und Datenstrukturen Übungsmodul 6
Real Time Operating System
Equals, Hashcode und CompareTo Micha Kessler
Was dir Trivialbeispiele in Async and Await nicht sagen! Marcus Kimpenhaus und Martin Möllenbeck.
Making people work together! Folie 1 NEXPLORE AG Stefan von Niederhäusern Einfache Anwendung der SuisseID durch das Software Development KIT
Service components and distribution with OSGi Seminar: Multimedia- und Internetsysteme Paul Hübner | Bildquellen : [1]
Client-Server-Architektur
Objectives Verstehen was unterDelegate verstanden wird
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Zwölfte Vorlesung Klassen – Komposition und Vererbung Freitag, 15. November 2002.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Service components and distribution with OSGi Seminar: Multimedia- und Internetsysteme Paul Hübner |
Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH
Beispielanwendung von Java Threads
Javelin Internet-based parallel computing using Java.
Java 7 Änderungen in der neuen Version Thomas Nagel 17. Juni 2012.
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Rusch Philipp, Spiegel Philipp, Sieber Michael, Ucar Sahin, Wetzel Markus.
1.Event Queue.
 Präsentation transkript:

Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten2 Gliederung 1. Motivation 2. Workerpool 2.1 Reception 2.2 Worker 3. Clientanwendungen 3.1 MergeSort 3.2 Chatsystem 4. Zusammenfassung

Seminar Softwareagenten3 1 Motivation Wie schreibe ich ein mobiles Aglet? Tahiti-Server HelloWorld-Aglet extends Aglet onCreation() handleMessage()

Seminar Softwareagenten 1 HelloWorld Aglet – Praxis

Seminar Softwareagenten5 2 Workerpool Ursprünglich geplant: Verteilter Algorithmus Aber: schlechte Dokumentation des integrierten Lookup- Services (MAFFinder) Daher: eigenständige Implementierung eines Lookup-Services mit der nötigen Basisfunktionalität

Seminar Softwareagenten6 2 Workerpool Basisfunktionalität 1. An- und Abmelden von Tahiti-Server/Diensten 2. Lookup von freien Tahiti-Server/Diensten Konsistenzsicherung durch Lease-Konzept Exceptionhandling

7 2 Workerpool Reception Lease Checker HostList Worker Lease Client Architektur ChatServerChatClients MergeSortMergeSlave Workerpool Framework Anwend- ungen

Seminar Softwareagenten8 2.1 Reception Lebenszyklus 1. onCreation() initialisieren der HostList hosts = new ReceptionHostList() erzeugen des LeaseCheckers 2. run() warten auf einkommende Messages, z.B. register 3. onDisposing() beenden des LeaseCheckers und sich selbst

2.1 Reception – Code public boolean handleMessage(Message msg) { […] else if (msg.sameKind("register")) { try { WorkerDetails details = new WorkerDetails([…]); hosts.register(details); } catch (Exception e) { msg.sendException(e); return false; } return true; } else if (msg.sameKind("renewlease")) { try { hosts.renewlease(new URL(msg.getArg("ADRESS").toString())); } catch (Exception e) { msg.sendException(e); return false; } […] } Reception.java

Seminar Softwareagenten Reception LeaseChecker Aufgabe: Konsistenzerhaltung prüft periodisch Gültigkeit der Leases. löscht ggf. abgelaufene Leases bzw. Worker Realisiert durch Persistenzmechanismus des ASDK

Seminar Softwareagenten LeaseChecker – Code public void onCreation(Object o) { [..] addPersistencyListener(new PersistencyAdapter() { // if active check leases public void onActivation(PersistencyEvent ev) { // check leases checkLeases(); try { deactivate(15000); } catch (Exception e) {} } // if deactive sleep public void onDeactivating(PersistencyEvent ev){ setText("Deactivated"); } }); [..] } LeaseChecker.java

Seminar Softwareagenten 2.1 Reception – Praxis

Seminar Softwareagenten Worker Aufgaben Bereitstellung entweder eines Tahiti-Servers als Host für Clients eines Dienstleistungs-Aglets für Clients Registrierung bei Reception Regelmäßiges Erneuern des Leases bei der Reception

Seminar Softwareagenten Worker Lebenszyklus 1. onCreation() Holen des Reception-Proxies für spätere Kommunikation Registrierung bei der Reception per register Message Erzeugen der Hilfsklasse WorkerLease 2. onDisposing() beendet erst sein WorkerLease und dann sich selbst Wichtig: Damit keine weitere Erneuerung des Leases erfolgt!

Seminar Softwareagenten WorkerLease Lebenszyklus 1. onActivation() Erneuern der Lease per renewlease-Message Deaktiviert sich für festgelegten Zeitraum => onActivation() addPersistencyListener(new PersistencyAdapter() { public void onActivation(PersistencyEvent ev) { Message leaseMessage = new Message("renewlease"); leaseMessage.setArg("ADRESS", getHostingURL()); reception.sendMessage(leaseMessage); deactivate(5000); } […] } WorkerLease.java

Seminar Softwareagenten Worker - Kommunikation Tahiti 1 Reception Tahiti 2 Worker getProperty(Reception) new Message(register)Lease Worker Lease new Message(renewLease) Registrierung eines Workers bei der Reception

Seminar Softwareagenten 2.2 Worker – Praxis

Seminar Softwareagenten Worker – Erweiterbarkeit Bisher: Bereitstellung einer Tahiti-Umgebung als Host für Clientaufgaben, z.B. für verteilte Berechnungen mit noch unbekanntem Programmcode Zusätzlich jedoch erwünscht: Registrieren beliebiger Anwendungen die Dienste im System anbieten möchten, z.B. ChatServer Durch Erweiterung der Klasse Worker lässt sich in speziellen Dienste das Framework nutzen

Seminar Softwareagenten Worker – Erweiterbarkeit /** Used to handle specific worker messages */ protected boolean handleServiceMessages(Message msg) { […] return true; } /** What shall happen when service is registered */ protected void initialize() { […] } /** The name or identifier/signature of the service */ protected void serviceName() { name = "SpecialServiceWorker"; } Worker.java Überschreiben von 3 Methoden notwendig Nötig da direktes überschreiben von onCreation() und handleMessage() Funktionalität zerstören würde

Seminar Softwareagenten20 3 Clients Clients wurden von uns realisiert als MergeSort nutzt freie registrierte Worker zur verteilten Verarbeitung des Sortierens ChatClient – nutzt ChatServer-Dienst nutzt konkreten registrierten Services, hier ChatServer, nicht mehr komplette Tahiti-Server

Seminar Softwareagenten MergeSort bekannter Sortieralgorithmus nutzt rekursive Aufteilung des zu sortierenden Arrays zur Arbeitsteilung Idee: Slave-Aglets werden jeweils mit einer Hälfte des Arrays an freie Worker weiterverteilt

3.1 MergeSort – Code […] slave1 = context.createAglet(this.getAgletContext().getHostingURL(), "workerpool.worker.mergesort.MergeWorker", half1); slave2 = context.createAglet(this.getAgletContext().getHostingURL(), "workerpool.worker.mergesort.MergeWorker", half2); // lookup two workers if there is a reception if (reception != null) { Message msg1 = new Message("lookup"); URL adress1 = (URL)reception.sendMessage(msg1); URL adress2 = (URL)reception.sendMessage(msg1); // dispatch those slaves to the worker machines slave1.dispatch(adress1); slave2.dispatch(adress2); […] } MergeSort.java

Seminar Softwareagenten 3.1 MergeSort – Praxis

Seminar Softwareagenten Chat Idee: Multi-User-Chat (ChatServer) Aufzeigen der verschiedenen Arten der Kommunikation: peer-to-peer Nachrichten (ChatClient) synchron asynchron multicast Narichten (ChatClientMulitcast) Umsetzung: zur Registrierung Erweiterung der Klasse Worker Überschreiben der oben aufgeführten Methoden

Seminar Softwareagenten ChatClient Lebenszyklus 1. onCreation() lookupServiceByName-Message an Reception => Antwort AgletProxy als RemoteRef auf ChatServer gefundenem ChatServer register-Message schicken 2. run() chatten per newtext-Messages empfängt text-Messages vom ChatServer 3. onDisposing() sendet unregister-Message an den Server

Seminar Softwareagenten ChatClientMulticast Idee Multicast-Messages abonnieren und senden Nutzung eines Message-Channels zum Empfang von Nachrichten Besonderheit keine Registrierung beim ChatServer, da Multicast-Nachrichten anonym empfangen werden können chatten eigentlich auch ohne ChatServer möglich ChatSlave nötig der die Multicast-Nachrichten im AgletProxy des ChatServers ließt

Seminar Softwareagenten ChatClientMulticast Lebenszyklus 1. onCreation() lookup-Message an Reception Eigenen Slave kreieren und in AgletContext des ChatServers dispatchen 2. run() Empfang von text-Multicast-Messages vom Slave Senden der Texteingaben des Users an den Slave

Seminar Softwareagenten ChatClientMulticastSlave Lebenszyklus 1. onArrival() Abonnieren der Multicast-Messages Erneuerung des AgletProxies beim Master, da gewandert 2. run() Senden der empfangenen text-Messages an seinen Master Weitergabe der vom Master kommenden neuen Nachrichten per Multicast-Message

Seminar Softwareagenten CCMCSlave - Code Hinzufügen des Mobility-Listeners für onArrival()-Vorgänge geschieht per: public void onCreation(Object o) { […] addMobilityListener(new MobilityAdapter() { public void onArrival(MobilityEvent ev) { subscribeMessage("text") Message msg = new Message("proxy", getProxy()); try { master.sendOnewayMessage(msg); } catch (Exception r) {;} } }); […] } ChatClientMulicastSlave.java

Seminar Softwareagenten ChatServer Idee: Bietet ChatClients die Möglichkeit sich zu unterhalten Kombiniert Multicast- und Peer-To-Peer-Messaging Umsetzung: Registriert sich als spezieller Dienst bei der Reception Erbt von Klasse Worker überschreibt drei Methoden

Seminar Softwareagenten Chat – Architektur Tahiti 1Tahiti 3 Reception ChatClient Tahiti 4 ChatClient Multicast Tahiti 2 ChatServer Worker Lease Checker new Message(register, ChatServer)new Message(lookup, ChatServer) AgletProxy ChatServer

Seminar Softwareagenten Chat – Architektur Tahiti 1Tahiti 3 Reception ChatClient Tahiti 4 ChatClient Multicast Tahiti 2 ChatServer ChatClient Multicast Slave Worker Lease Checker new Message(register) new Message(lookup, ChatServer) URl ChatServer

Seminar Softwareagenten ChatServer Lebenszyklus 1. onCreation() registriet sich unter der Service-Signatur ChatServer bei der Reception 2. run() schickt ankommende newtext-Messages an alle registrierten Clients per text peer-to-peer- und Multicast-Message 3. onDisposing() unregister-Message an Reception (von Worker)

Seminar Softwareagenten ChatServer - Code protected void serviceName() { name = "ChatServer"; } protected void initialize() { subscribeMessage("newtext"); } public boolean handleServiceMessages(Message msg) { if (msg.sameKind("newclient")) { clients.add(msg.getArg()); } else if (msg.sameKind("text")) { Enumeration sendTo = clients.elements(); Message textmsg = new Message("text", msg.getArg()); getAgletContext().multicastMessage(textmsg); while (sendTo.hasMoreElements()) { AgletProxy proxy = (AgletProxy)sendTo.nextElement(); proxy.sendOnewayMessage(textmsg); } […] } […]} ChatServer.java

Seminar Softwareagenten Chat – Architektur Tahiti 1Tahiti 3 Reception ChatClient Tahiti 4 ChatClient Multicast Tahiti 2 ChatServer ChatClient Multicast Slave Worker Lease Checker new Message(text) sendMulticast(new Message(text)) new Message(text) handleMessage(Message(text))

Seminar Softwareagenten 3.2 Chat – Praxis

Seminar Softwareagenten37 4 Zusammenfassung Bewertung Einfaches Erstellen von Aglets Proxy-Konzept hat Vor- und Nachteile Tahiti-Sicherheitskonzept bisher ausgeblendet Viele Möglichkeiten aufgrund der hohen Kompatibilität von Java Vielen Dank für eure Aufmerksamkeit! Vielen Dank für eure Aufmerksamkeit! => Noch Fragen? => Noch Fragen?