Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke.

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

Transcript of Aglets III Praxisbeispiel im Seminar Softwareagenten Christian DupuisColin Wilke.

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?