Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Amalger Wollenhaupt Geändert vor über 10 Jahren
1
Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke
2
Seminar Softwareagenten2 Gliederung 1. Motivation 2. Workerpool 2.1 Reception 2.2 Worker 3. Clientanwendungen 3.1 MergeSort 3.2 Chatsystem 4. Zusammenfassung
3
Seminar Softwareagenten3 1 Motivation Wie schreibe ich ein mobiles Aglet? Tahiti-Server HelloWorld-Aglet extends Aglet onCreation() handleMessage()
4
Seminar Softwareagenten 1 HelloWorld Aglet – Praxis
5
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
6
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
7 2 Workerpool Reception Lease Checker HostList Worker Lease Client Architektur ChatServerChatClients MergeSortMergeSlave Workerpool Framework Anwend- ungen
8
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
9
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
10
Seminar Softwareagenten10 2.1 Reception LeaseChecker Aufgabe: Konsistenzerhaltung prüft periodisch Gültigkeit der Leases. löscht ggf. abgelaufene Leases bzw. Worker Realisiert durch Persistenzmechanismus des ASDK
11
Seminar Softwareagenten11 2.1 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
12
Seminar Softwareagenten 2.1 Reception – Praxis
13
Seminar Softwareagenten13 2.2 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
14
Seminar Softwareagenten14 2.2 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!
15
Seminar Softwareagenten15 2.2 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
16
Seminar Softwareagenten16 2.2 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
17
Seminar Softwareagenten 2.2 Worker – Praxis
18
Seminar Softwareagenten18 2.2 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
19
Seminar Softwareagenten19 2.2 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
20
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
21
Seminar Softwareagenten21 3.1 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
22
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
23
Seminar Softwareagenten 3.1 MergeSort – Praxis
24
Seminar Softwareagenten24 3.2 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
25
Seminar Softwareagenten25 3.2.1 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
26
Seminar Softwareagenten26 3.2.2 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
27
Seminar Softwareagenten27 3.2.2 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
28
Seminar Softwareagenten28 3.2.2 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
29
Seminar Softwareagenten29 3.2.2 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
30
Seminar Softwareagenten30 3.2.3 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
31
Seminar Softwareagenten31 3.2 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
32
Seminar Softwareagenten32 3.2 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
33
Seminar Softwareagenten33 3.2.3 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)
34
Seminar Softwareagenten34 3.2.3 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
35
Seminar Softwareagenten35 3.2 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))
36
Seminar Softwareagenten 3.2 Chat – Praxis
37
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?
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.