Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke.

Ähnliche Präsentationen


Präsentation zum Thema: "Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke."—  Präsentation transkript:

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?


Herunterladen ppt "Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke."

Ähnliche Präsentationen


Google-Anzeigen