aglets iii praxisbeispiel im seminar softwareagenten christian dupuiscolin wilke

37
Aglets III Aglets III Praxisbeispiel Praxisbeispiel im Seminar Softwareagenten Christian Dupuis Colin Wilke

Upload: amalger-wollenhaupt

Post on 05-Apr-2015

111 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Aglets IIIAglets IIIPraxisbeispielPraxisbeispiel

im Seminar Softwareagenten

Christian Dupuis Colin Wilke

Page 2: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 2

GliederungGliederung

1. Motivation

2. Workerpool2.1 Reception2.2 Worker

3. Clientanwendungen3.1 MergeSort3.2 Chatsystem

4. Zusammenfassung

Page 3: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 3

1 Motivation1 Motivation Wie schreibe ich ein mobiles Aglet?

Tahiti-Server

HelloWorld-Agletextends AgletonCreation()handleMessage()

Page 4: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten

1 HelloWorld Aglet – Praxis1 HelloWorld Aglet – Praxis

Page 5: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 5

2 Workerpool2 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

Page 6: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 6

2 Workerpool2 Workerpool

Basisfunktionalität1. An- und Abmelden von Tahiti-Server/Diensten2. Lookup von freien Tahiti-Server/Diensten

Konsistenzsicherung durch Lease-Konzept

Exceptionhandling

Page 7: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

7

2 Workerpool2 Workerpool

ReceptionLease

Checker

HostList

WorkerWorkerLease

Client

Architektur

ChatServer ChatClients

MergeSortMergeSlave

Workerpool „Framework“

Anwend-ungen

Page 8: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 8

2.1 Reception2.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

Page 9: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

2.1 Reception – Code2.1 Reception – Codepublic 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

Page 10: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 10

2.1 Reception2.1 Reception

LeaseChecker

Aufgabe: Konsistenzerhaltung prüft periodisch Gültigkeit der Leases. löscht ggf. abgelaufene Leases bzw. Worker

Realisiert durch Persistenzmechanismus des ASDK

Page 11: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 11

2.1 LeaseChecker – Code2.1 LeaseChecker – Codepublic void onCreation(Object o) { [..]

addPersistencyListener(new PersistencyAdapter() { // if active check leases public void onActivation(PersistencyEvent ev) {

// check leasescheckLeases();

try { deactivate(15000); } catch (Exception e) {} } // if deactive sleep public void onDeactivating(PersistencyEvent ev){ setText("Deactivated"); }

}); [..] } LeaseChecker.java

Page 12: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten

2.1 Reception – Praxis2.1 Reception – Praxis

Page 13: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 13

2.2 Worker2.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

Page 14: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 14

2.2 Worker2.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!

Page 15: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 15

2.2 WorkerLease2.2 WorkerLease

Lebenszyklus1. 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

Page 16: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 16

2.2 Worker - Kommunikation2.2 Worker - Kommunikation

Tahiti 1

Reception

Tahiti 2

Worker

getProperty(„Reception“)

new Message(„register“)Lease

WorkerLease

new Message(„renewLease“)

Registrierung eines Workers bei der Reception

Page 17: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten

2.2 Worker – Praxis2.2 Worker – Praxis

Page 18: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 18

2.2 Worker – Erweiterbarkeit2.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

Page 19: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 19

2.2 Worker – Erweiterbarkeit2.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

Page 20: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 20

3 Clients3 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

Page 21: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 21

3.1 MergeSort3.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

Page 22: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

3.1 MergeSort – Code3.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 receptionif (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

Page 23: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten

3.1 MergeSort – Praxis3.1 MergeSort – Praxis

Page 24: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 24

3.2 Chat3.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

Page 25: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 25

3.2.1 ChatClient3.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

Page 26: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 26

3.2.2 ChatClientMulticast3.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

Page 27: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 27

3.2.2 ChatClientMulticast3.2.2 ChatClientMulticastLebenszyklus

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

Page 28: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 28

3.2.2 ChatClientMulticastSlave3.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

Page 29: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 29

3.2.2 CCMC3.2.2 CCMCSlave - CodeSlave - 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

Page 30: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 30

3.2.3 ChatServer3.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

Page 31: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 31

3.2 Chat – Architektur3.2 Chat – Architektur

Tahiti 1 Tahiti 3

ReceptionChatClient

Tahiti 4

ChatClientMulticast

Tahiti 2

ChatServerWorkerLease

LeaseChecker

new Message(„register“, „ChatServer“)new Message(„lookup“, „ChatServer“)AgletProxy ChatServer

Page 32: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 32

3.2 Chat – Architektur3.2 Chat – Architektur

Tahiti 1 Tahiti 3

ReceptionChatClient

Tahiti 4

ChatClientMulticast

Tahiti 2

ChatServer

ChatClientMulticast

Slave

WorkerLease

LeaseChecker

new Message(„register“)

new Message(„lookup“, „ChatServer“)

URl ChatServer

Page 33: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 33

3.2.3 ChatServer3.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)

Page 34: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 34

3.2.3 ChatServer - Code3.2.3 ChatServer - Codeprotected 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

Page 35: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 35

3.2 Chat – Architektur3.2 Chat – Architektur

Tahiti 1 Tahiti 3

ReceptionChatClient

Tahiti 4

ChatClientMulticast

Tahiti 2

ChatServer

ChatClientMulticast

Slave

WorkerLease

LeaseChecker

new Message(„text“)

sendMulticast(new Message(„text“))

new Message(„text“)

handleMessage(Message(„text“))

Page 36: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten

3.2 Chat – Praxis3.2 Chat – Praxis

Page 37: Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke

Seminar Softwareagenten 37

4 Zusammenfassung4 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?