Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Was sind Aglets? Was sind Aglets? Seminar Software Agenten Vortrag von Tatjana Tschupin und Sergej Lewin und Sergej Lewin.

Ähnliche Präsentationen


Präsentation zum Thema: "1 Was sind Aglets? Was sind Aglets? Seminar Software Agenten Vortrag von Tatjana Tschupin und Sergej Lewin und Sergej Lewin."—  Präsentation transkript:

1 1 Was sind Aglets? Was sind Aglets? Seminar Software Agenten Vortrag von Tatjana Tschupin und Sergej Lewin und Sergej Lewin

2 2 ÜberblickÜberblick Einführung Einführung Basiskomponenten des Agletsystems Basiskomponenten des Agletsystems Aglet, Aglets Lebenszyklus und Context Aglet, Aglets Lebenszyklus und Context Aglets Messaging Aglets Messaging Aglets Framework Aglets Framework

3 3 Was sind Aglets? Aglets sind Java-Objekte, die sich von Host zu Host bewegen können. Sie können ihre Ausführung jederzeit anhalten, sich zu einem anderen Host bewegen und dort die Ausführung fortsetzen. Aglets sind Java-Objekte, die sich von Host zu Host bewegen können. Sie können ihre Ausführung jederzeit anhalten, sich zu einem anderen Host bewegen und dort die Ausführung fortsetzen.

4 4 Aglet Programming Interface (API) Eine Bibliothek von Klassen und Interfaces Eine Bibliothek von Klassen und Interfaces Wurde vom IBM Tokyo Forschungslaboratorium in Japan entwickelt, um eine einheitliche Plattform für mobile Agentensysteme zu schaffen. Wurde vom IBM Tokyo Forschungslaboratorium in Japan entwickelt, um eine einheitliche Plattform für mobile Agentensysteme zu schaffen.

5 5 Aglet Software Development Kit (ASDK) www.trl.ibm.com/aglets (Download) www.trl.ibm.com/aglets (Download)www.trl.ibm.com/aglets basiert sich auf Java 1. 1. x. und funktioniert nicht mit Java 1.2 oder höher. basiert sich auf Java 1. 1. x. und funktioniert nicht mit Java 1.2 oder höher. www.sourceforge.com (eine Version für Java 1.2) www.sourceforge.com (eine Version für Java 1.2) www.sourceforge.com alle Ausführungen in diesem Vortrag basieren sich auf Java 1.1.x. alle Ausführungen in diesem Vortrag basieren sich auf Java 1.1.x.

6 6 Tahiti ASDK enthält auch einen Agentenplattform Tahiti, die auf Basis von sogenannten Server-API entwickelt wurde und Tahiti ermöglicht bequemes Management von Agenten ASDK enthält auch einen Agentenplattform Tahiti, die auf Basis von sogenannten Server-API entwickelt wurde und Tahiti ermöglicht bequemes Management von Agenten

7 7 Basiskomponenten des Agletsystems Aglet. Ein Aglet ist ein mobiles Java-Objekt, das sich zwischen Hosts bewegen kann. Aglet. Ein Aglet ist ein mobiles Java-Objekt, das sich zwischen Hosts bewegen kann. Proxy. Ein Proxy repräsentiert einen Vertreter eines Aglets und dient als Schutzschild. Proxy. Ein Proxy repräsentiert einen Vertreter eines Aglets und dient als Schutzschild. Schirmt die public -Methoden eines Aglets vor einem direkten Zugriff durch andere Aglets ab Schirmt die public -Methoden eines Aglets vor einem direkten Zugriff durch andere Aglets ab Versteckt den tatsächlichen Aufenthaltsort des Aglets ( location transparency ) Versteckt den tatsächlichen Aufenthaltsort des Aglets ( location transparency ) Client Proxy Aglet Interaktion

8 8 Basiskomponenten des Agletsystem Context. Ein Context ist die Arbeitsumgebung eines Aglets und stellt eine Reihe von Diensten zur Verfügung, z.B: Context. Ein Context ist die Arbeitsumgebung eines Aglets und stellt eine Reihe von Diensten zur Verfügung, z.B: Ein Aglet wird von einem Context erzeugt Ein Aglet wird von einem Context erzeugt Der Context enthält die Informationen über alle in ihm laufenden Aglets Der Context enthält die Informationen über alle in ihm laufenden Aglets Ein Host kann mehrere Contexts enthalten und jeder Context ist durch die Kombination von Serveradresse und seinem ist durch die Kombination von Serveradresse und seinem Namen bestimmt. Identifier. Er ist während des ganzen Lebenszyklusen des Aglets eindeutig. Identifier. Er ist während des ganzen Lebenszyklusen des Aglets eindeutig.

9 9 Das Verhaltensmodell Das Modell von einem Aglet wurde durch die Analyse von Leben und Tod eines mobilen Aglets entwickelt. Das Modell von einem Aglet wurde durch die Analyse von Leben und Tod eines mobilen Aglets entwickelt. Es gibt nur zwei Wege, ein Aglet ins Leben zu rufen: Es gibt nur zwei Wege, ein Aglet ins Leben zu rufen: Man kann ein neues Aglet-Objekt erzeugen (Creation) Man kann ein neues Aglet-Objekt erzeugen (Creation) Es wird von einem existierenden Aglet geklont (Cloning) Es wird von einem existierenden Aglet geklont (Cloning) Um die Aglets zu kontrollieren, kann man sie zerstören (Disposal). Um die Aglets zu kontrollieren, kann man sie zerstören (Disposal). Aglets sind auf zwei verschiedene Weise mobil: Aglets sind auf zwei verschiedene Weise mobil: Aktiv Aktiv Passiv Passiv Die Aglets können vorübergehend einschlafen, um bestimmte Ressourcen freizugeben (Deactivation) und können später zum Laufen gebracht werden (Activation). Die Aglets können vorübergehend einschlafen, um bestimmte Ressourcen freizugeben (Deactivation) und können später zum Laufen gebracht werden (Activation). Die Aglets können Informationen austauschen, um eine vorgegebene Aufgabe zu erfüllen (Messaging). Die Aglets können Informationen austauschen, um eine vorgegebene Aufgabe zu erfüllen (Messaging).

10 10 Hauptoptionen eines Aglets Creation. Ein Aglet bekommt einen Identifier, wird in einen Context eingefügt und initialisiert. Creation. Ein Aglet bekommt einen Identifier, wird in einen Context eingefügt und initialisiert. Cloning. Es wird eine fast gleiche Kopie des originalen Aglets im selbem Context produziert. Es gibt zwei Unterschiede: Cloning. Es wird eine fast gleiche Kopie des originalen Aglets im selbem Context produziert. Es gibt zwei Unterschiede: seine eigene ID seine eigene ID seine eigene Ausführungthreads seine eigene Ausführungthreads Dispatching. Das Aglet wird von seinem aktuellen Context entfernt und in den Ziel-Context eingefügt. Dispatching. Das Aglet wird von seinem aktuellen Context entfernt und in den Ziel-Context eingefügt.

11 11 Hauptoptionen eines Aglets Retraction. Ein Aglet wird vom Remote-Context entfernt und in den aktuellen Context, von dem es angefordert wurde, eingefügt. Retraction. Ein Aglet wird vom Remote-Context entfernt und in den aktuellen Context, von dem es angefordert wurde, eingefügt. Deactivation. Die Ausführung des Aglets wird angehalten, und sein Zustand auf die Festplatte gespeichert. Deactivation. Die Ausführung des Aglets wird angehalten, und sein Zustand auf die Festplatte gespeichert. Activation. Die Ausführung des Aglets wird mit dem alten Zustand im selben Context wiedergestartet. Activation. Die Ausführung des Aglets wird mit dem alten Zustand im selben Context wiedergestartet. Disposal. Die Ausführung vom Aglet wird angehalten und das Aglet wird von seinem aktuellen Context entfernt, wobei alle seine Threads geschlossen werden. Disposal. Die Ausführung vom Aglet wird angehalten und das Aglet wird von seinem aktuellen Context entfernt, wobei alle seine Threads geschlossen werden.

12 12 Hauptoptionen eines Aglets Aglet Class File Disk Storage Context AContext B Clone Create Dispatche Retract Dispose DeactivateActivate

13 13 Aglet Event Model Aglet Event Model Der Clone Listener ist für Cloning Events vorgesehen. Man benutzt Der Clone Listener ist für Cloning Events vorgesehen. Man benutzt den Clone Listener, um zu reagieren: den Clone Listener, um zu reagieren: wenn ein Aglet geklont wird wenn ein Aglet geklont wird wenn ein Aglet Clone erzeugt ist wenn ein Aglet Clone erzeugt ist nach dem Cloning. nach dem Cloning. Der Mobility Listener ist für Mobility Events vorgesehen. Man benutzt Der Mobility Listener ist für Mobility Events vorgesehen. Man benutzt diesen Listener, um zu reagieren: diesen Listener, um zu reagieren: wenn sich ein Aglet von einem Context zu anderem bewegt wenn sich ein Aglet von einem Context zu anderem bewegt wenn es von einem Context angefordert wird wenn es von einem Context angefordert wird wenn es bei einem neuen Context ankommt. wenn es bei einem neuen Context ankommt. Der Persistence Listener ist für Persistence Events vorgesehen, um auf Activation bzw. Deactivation eines Aglets zu reagieren. Der Persistence Listener ist für Persistence Events vorgesehen, um auf Activation bzw. Deactivation eines Aglets zu reagieren.

14 14 Aglet Communication Model Aglets kommunizieren mittels message passing. Aglets kommunizieren mittels message passing. Messages werden nacheinander verarbeitet. Messages werden nacheinander verarbeitet. Eine Message ist ein Objekt, das zwischen Aglets ausgetauscht wird. Eine Message ist ein Objekt, das zwischen Aglets ausgetauscht wird. Synchrone Kommunikation Synchrone Kommunikation Asynchrone Kommunikation Asynchrone Kommunikation ProxyAglet Message Reply Message Reply Aglet

15 15 Aglet Package Aglet Package Die wichtigsten Klassen bzw. Interfaces der Aglets API sind : Die wichtigsten Klassen bzw. Interfaces der Aglets API sind : Aglet Aglet AgletProxy AgletProxy AgletContext AgletContext Message Message FutureReply FutureReply AgletID AgletID

16 16 Die Klasse Aglet Die Klasse Aglet Die Klasse Aglet ist die zentrale Klasse in der Aglet API. Die Klasse Aglet ist die zentrale Klasse in der Aglet API. Sie enthält die Methoden, die den Lebenszyklus eines Aglets bestimmen: Sie enthält die Methoden, die den Lebenszyklus eines Aglets bestimmen: Cloning Cloning Dispathing Dispathing Deactivating Deactivating Disposing Disposing Sie enthält aber auch die Methoden, die das Verhalten von einem Aglet festlegen und die von einem Programmierer überschrieben werden sollen. Sie enthält aber auch die Methoden, die das Verhalten von einem Aglet festlegen und die von einem Programmierer überschrieben werden sollen.

17 17 Die Klasse Aglet Das Objekt AgletInfo, das von getAgletInfo() geliefert wird, enthält die Attribute des Aglets : Das Objekt AgletInfo, das von getAgletInfo() geliefert wird, enthält die Attribute des Aglets : Zeit, wann das Aglet erzeugt wurde Zeit, wann das Aglet erzeugt wurde code-base code-base Ankunft-Zeit Ankunft-Zeit die Adresse seines aktuellen Context. die Adresse seines aktuellen Context.

18 18 Die Klasse Aglet Erzeugen eines Aglets Erzeugen eines Aglets import com. ibm.aglet import com. ibm.aglet public class MyFirstAglet extends Aglet public class MyFirstAglet extends Aglet { // Die Methoden vom Aglet // Die Methoden vom Aglet }

19 19 Die Klasse Aglet Initialisierung eines Aglets Initialisierung eines Aglets public void onCreation (Object init) { //hier wird das Aglet initialisiert //hier wird das Aglet initialisiert }

20 20 Die Klasse Aglet Start der Ausführung Start der Ausführung public void run() public void run() { // Aglet wird gestartet // Aglet wird gestartet } Um das Aglet zu einem entfernten Context zu schicken, soll die Methode Um das Aglet zu einem entfernten Context zu schicken, soll die Methode dispatch(new URL (atp://some.host.com/context)); dispatch(new URL (atp://some.host.com/context)); aufgerufen werden aufgerufen werden

21 21 DispatchingDispatching State Byte Code State Byte Code SendingReceiving Host 1. 2. 3.

22 22 AgletProxy Interface Durch das AgletProxy laufen alle Zugriffe auf das Aglet Durch das AgletProxy laufen alle Zugriffe auf das Aglet Das Objekt AgletProxy ruft den Sicherheitsmanager auf, um zu entscheiden, ob der aktuelle Context die Aglets Methoden anzusprechen erlaubt. Das Objekt AgletProxy ruft den Sicherheitsmanager auf, um zu entscheiden, ob der aktuelle Context die Aglets Methoden anzusprechen erlaubt. Das AgletProxy ermöglicht auch die sogenannte Orttransparenz (location transparency) Das AgletProxy ermöglicht auch die sogenannte Orttransparenz (location transparency)

23 23 AgletProxy Interface Methoden, die das Proxy des neu erzeugten Aglets zurückgeben: Methoden, die das Proxy des neu erzeugten Aglets zurückgeben: public abstract AgletProxy AgletContext.createAglet public abstract AgletProxy AgletContext.createAglet (URL codeBase, String code, Object init) (URL codeBase, String code, Object init) public abstract AgletProxy public abstract AgletProxy AgletContext.retractAglet (URL location, AgletID id) AgletContext.retractAglet (URL location, AgletID id) public abstract AgletProxy public abstract AgletProxy AgletProxy.dispatch (URL destination) AgletProxy.dispatch (URL destination)

24 24 AgletProxy Interface Proxies des existierendes Aglets bekommt man auch auf die folgenden Weise : Proxies des existierendes Aglets bekommt man auch auf die folgenden Weise : public abstract AgletProxy Aglet.getProxy() public abstract AgletProxy Aglet.getProxy() public abstract AgletProxy AgletContext.getAgletProxy(AgletID id) public abstract AgletProxy AgletContext.getAgletProxy(AgletID id) public abstract Enumeration AgletContext.getAgletProxy() public abstract Enumeration AgletContext.getAgletProxy()

25 25 AgletContext Interface Der Context ist eine Ausführungsumgebung für Aglets. Der Context ist eine Ausführungsumgebung für Aglets. Dieses Interface bietet die Möglichkeit die laufenden Aglets in einer Umgebung zu verwalten. Dieses Interface bietet die Möglichkeit die laufenden Aglets in einer Umgebung zu verwalten. Die Aglet Klasse hat eine Methode zum Zugriff auf seinen aktuellen Context Die Aglet Klasse hat eine Methode zum Zugriff auf seinen aktuellen Context context = getAgletContext();

26 26 AgletContext Interface Das Aglet kann durch Zugreifen auf den Context ein neues Aglet erzeugen: Das Aglet kann durch Zugreifen auf den Context ein neues Aglet erzeugen: context.createAglet(URL codeBase, String code, Object init) context.createAglet(URL codeBase, String code, Object init) Außerdem gibt es eine Methode, die ein Aglet vom Remote-Context in den aktuellen Context zurückholt: Außerdem gibt es eine Methode, die ein Aglet vom Remote-Context in den aktuellen Context zurückholt: context.retractAglet(remoteContextURL, agletID); context.retractAglet(remoteContextURL, agletID);

27 27 Aglet, Aglets Lebenszyklus und Context Wichtige Ereignisse im Leben eines Aglets Wichtige Ereignisse im Leben eines Aglets Creation: Erzeugung und Klonen eines Aglets Creation: Erzeugung und Klonen eines Aglets Disposal: Tod eines Aglets Disposal: Tod eines Aglets Mobility: dispatch und retract Mobility: dispatch und retract Persistence: De- und Aktivierung eines Aglets Persistence: De- und Aktivierung eines Aglets

28 28 Realisierung des Event Modells Events Klassen: Events Klassen: CloneEvent, MobilityEvent, PersistencyEvent CloneEvent, MobilityEvent, PersistencyEvent Listener-Interfaces: Listener-Interfaces: CloneListener, MobilityListener, PersistencyListener CloneListener, MobilityListener, PersistencyListener Adapter-Klassen Adapter-Klassen CloneAdapter, MobilityAdapter, PersistencyAdapter CloneAdapter, MobilityAdapter, PersistencyAdapter

29 29 EventsEvents Einige Methoden von CloneEvent: Einige Methoden von CloneEvent: public AgletProxy getAgletProxy(); public AgletProxy getAgletProxy(); gibt AgletProxy des geklonten Aglets zurück Einige Methoden von MobilityEvent Einige Methoden von MobilityEvent public AgletProxy getAgletProxy(); public AgletProxy getAgletProxy(); gibt AgletProxy des gesendeten Aglets zurück public URL getLocation(); public URL getLocation(); gibt den Bestimmungsort für das Aglet zurück gibt den Bestimmungsort für das Aglet zurück Einige Methoden von PersistencyEvent Einige Methoden von PersistencyEvent public AgletProxy getAgletProxy(); public AgletProxy getAgletProxy(); gibt das AgletProxy des de/aktivierten Aglets zurück

30 30 CreationCreation Zwei Erzeugungsarten des Aglets Zwei Erzeugungsarten des Aglets Direkt: Instanz einer Aglet Klasse Direkt: Instanz einer Aglet Klasse Indirekt: Klonen eines Aglets Indirekt: Klonen eines Aglets

31 31 Creation(direkt)Creation(direkt) das Erzeugen einer Aglet-Instanz durch das Erzeugen einer Aglet-Instanz durch public AgletProxy AgletContext.createAglet(URL codeBase, String code, Object init); public AgletProxy AgletContext.createAglet(URL codeBase, String code, Object init); (nicht durch Konstruktor protected Aglet.Aglet();) (nicht durch Konstruktor protected Aglet.Aglet();) die Manipulation des Aglet Verhaltens die Manipulation des Aglet Verhaltens public void Aglet.onCreation(Object init); public void Aglet.onCreation(Object init); public void Aglet.run(); public void Aglet.run(); (diese Methoden sollen überschrieben werden)

32 32 Creation(direkt)Creation(direkt) Zusammenarbeit der Methoden Zusammenarbeit der Methoden createAglet() Aglet () onCreation() run()

33 33 Creation(indirekt)Creation(indirekt) Klonen eines Aglets mittels Klonen eines Aglets mittels public final Object Aglet.clone(); public final Object Aglet.clone(); Steuerung des Klonens mittels CloneListener Steuerung des Klonens mittels CloneListener public CloneAdapter.CloneAdapter(); public CloneAdapter.CloneAdapter(); public final Aglet.AddCloneListener(CloneListener c); public final Aglet.AddCloneListener(CloneListener c); (public final Aglet.removeCloneListener(CloneListener c);)

34 34 Creation(indirekt)Creation(indirekt) drei Methoden von CloneListener für die Steuerung des Klonens drei Methoden von CloneListener für die Steuerung des Klonens public void onCloning(Clone Event); public void onCloning(Clone Event); public void onClone(Clone Event); public void onClone(Clone Event); public void onCloned(Clone Event); public void onCloned(Clone Event); Mit diesen Methoden kann auch das Verhalten des Aglets und des Clones festgelegt werden. Mit diesen Methoden kann auch das Verhalten des Aglets und des Clones festgelegt werden.

35 35 Creation(indirekt)Creation(indirekt) Die Zusammenarbeit der Methoden Die Zusammenarbeit der Methoden run() onCloning() onCloned() onClone() run() Original Clone

36 36 Creation(indirekt)Creation(indirekt) public class CloningExample extends Aglet{ boolean _theClone = false; public void onCreation(Object o){ addCloneListener(new CloneAdapter(){ public void onCloning(CloneEvent e){ //Ausgabe} _theClone=true;//Ausgabe} //Ausgabe});}

37 37 Creation(indirekt)Creation(indirekt) public void run() { if(!_theClone){ //The parent runs here clone(); }else { //The clons runs here }}}

38 38 DisposalDisposal Das Entfernen eines Aglets aus dem Context mittels Das Entfernen eines Aglets aus dem Context mittels public final Aglet.dispose(); public final Aglet.dispose(); Das Entfernen eines Aglets kann durch Das Entfernen eines Aglets kann durch public void Aglet.onDisposing(); public void Aglet.onDisposing(); beeinflusst werden.

39 39 DisposalDisposal Aufrufreihenfolge und Zusammenarbeit von Methoden Aufrufreihenfolge und Zusammenarbeit von Methoden dispose() onDisposing() run()

40 40 MobilityMobility zwei Mobilitätsarten eines Aglets zwei Mobilitätsarten eines Aglets aktiv: Dispatching aktiv: Dispatching passiv: Retraction passiv: Retraction

41 41 Mobility(aktiv)Mobility(aktiv) Ein Aglet kann sich selbst mittels Ein Aglet kann sich selbst mittels public final void Aglet.dispatch( URL destination); public final void Aglet.dispatch( URL destination); zum anderen Context destination bewegen. Dispatching- Prozess kann durch MobilityListener beeinflusst werden. Dispatching- Prozess kann durch MobilityListener beeinflusst werden. public MobilityAdapter.MobilityAdapter(); public MobilityAdapter.MobilityAdapter(); public final Aglet.AddMobilityListener(CloneListener l); public final Aglet.AddMobilityListener(CloneListener l); (public final Aglet.removeMobilityListener(CloneListener l);)

42 42 Mobility(aktiv)Mobility(aktiv) zwei Methoden für Steuerung des Dispatchings zwei Methoden für Steuerung des Dispatchings public void MobilityAdapter.onDispatching(); public void MobilityAdapter.onDispatching(); (bereitet das Aglet zur Reise vor) public void MobilityAdapter.onArrival(); public void MobilityAdapter.onArrival(); (initialisiert das Aglet im Remote-Context)

43 43 Mobility(aktiv)Mobility(aktiv) Die Zusammenarbeit der Methoden Die Zusammenarbeit der Methoden run() dispatch() onDispatching() onArrival() run() Aktuelles Context Remote-Context

44 44 Mobility(passiv)Mobility(passiv) Ein Aglet kann aber auch von einem Remote- Context zurückgeholt werden mittels Ein Aglet kann aber auch von einem Remote- Context zurückgeholt werden mittels public AgletProxy AgletContext.retractAglet(URL contextAddress, AgletID identity); public AgletProxy AgletContext.retractAglet(URL contextAddress, AgletID identity); Beispiel: Beispiel: AgletID aid=proxy.getAgletID() AgletID aid=proxy.getAgletID() proxy.dispatch(destination); proxy.dispatch(destination); getAgletContext().retractAglet(destination, aid); getAgletContext().retractAglet(destination, aid);

45 45 Mobility(passiv)Mobility(passiv) Retraction kann durch MobilityListener gesteuert werden mittels onArrival() und Retraction kann durch MobilityListener gesteuert werden mittels onArrival() und public void MobilityAdapter.onReverting( MobilityEvent); public void MobilityAdapter.onReverting( MobilityEvent); Retraction unterstützt auch disconnected operation Retraction unterstützt auch disconnected operation

46 46 Mobility(passiv)Mobility(passiv) Die Zusammenarbeit der Methoden Die Zusammenarbeit der Methoden retractAglet() onArrival() run() onReverting() lokal remote

47 47 Mobility(passiv)Mobility(passiv) Jedes Aglet lässt beim Verlassen des aktuellen Contextes seinen elektronischen Fingerabdruck im aktuellen Context Jedes Aglet lässt beim Verlassen des aktuellen Contextes seinen elektronischen Fingerabdruck im aktuellen Context Dieser Fingerabdruck wird in der PropertyList (Liste von Attributpaaren) gespeichert Dieser Fingerabdruck wird in der PropertyList (Liste von Attributpaaren) gespeichert Die PropertyList kann mittels Die PropertyList kann mittels public abstract Object getProperty(String key); public abstract Object getProperty(String key); public abstract Object getProperty(String key,Object value); public abstract Object getProperty(String key,Object value); public abstract Object setProperty(String key, Object value); public abstract Object setProperty(String key, Object value); verwaltet werden

48 48 PersistencePersistence Ein Aglet kann deaktiviert werden mittels Ein Aglet kann deaktiviert werden mittels public final Aglet.deactivate(long duration); public final Aglet.deactivate(long duration); De- bzw. Aktivierung kann durch den PersistencyListener beeinflusst werden De- bzw. Aktivierung kann durch den PersistencyListener beeinflusst werden public PersistencyAdapter.PersistencyAdapter(); public PersistencyAdapter.PersistencyAdapter(); public final void Aglet.addPersistencyListener( public final void Aglet.addPersistencyListener( PersistencyListener p); public final void Aglet.removePersistencyListener( public final void Aglet.removePersistencyListener( PersistencyListener p);

49 49 PersistencePersistence zwei Methoden von PersistencyListener zur Steuerung von De- bzw. Aktivierung des Aglets zwei Methoden von PersistencyListener zur Steuerung von De- bzw. Aktivierung des Aglets public void PersistencyAdapter.onDeactivating( public void PersistencyAdapter.onDeactivating( PersistencyEvent event); public void PersistencyAdapter.onActivation( public void PersistencyAdapter.onActivation( PersistencyEvent event);

50 50 PersistencePersistence Die Zusammenarbeit der Methoden Die Zusammenarbeit der Methoden run() deactivate() onDeactivating() onActivation() run() vorher nachher

51 51 Aglets Messaging Klasse Message Klasse Message Simple Messaging Simple Messaging Future Reply Future Reply Message Manager Message Manager Multicasting Multicasting

52 52 Klasse Message Aglets kommunizieren, indem sie Objekte der Klasse Message austauschen Aglets kommunizieren, indem sie Objekte der Klasse Message austauschen eine Message hat zwei Attribute kind und argument eine Message hat zwei Attribute kind und argument public Message(String kind); public Message(String kind); public Message(String kind, ** arg); public Message(String kind, ** arg); (** steht für int, float, Object usw.) argument kann auch eine Hashtabelle sein argument kann auch eine Hashtabelle sein

53 53 Klasse Message auf kind bzw. argument kann zugegriffen werden mittels auf kind bzw. argument kann zugegriffen werden mittels public String Message.getKind(); public String Message.getKind(); public Object Message.getArg(); public Object Message.getArg(); Messages kann man mittels Messages kann man mittels public boolean Message.sameKind( public boolean Message.sameKind(String);unterscheiden.

54 54 Klasse Message Eine Hashtabelle als argument kann mittels Eine Hashtabelle als argument kann mittels public void Message.setArg(String key, Object value); public void Message.setArg(String key, Object value); public Object Message.gerArg(String key); public Object Message.gerArg(String key); verwaltet werden Ein Message kann durch Ein Message kann durch public void Message.sendReply(); public void Message.sendReply(); public void Message.sendReply(** reply); public void Message.sendReply(** reply); (** steht für int, float usw.) beantwortet werden ein Message kann aber auch mit einer Exception ein Message kann aber auch mit einer Exception public void Message.sendException(Exception e); public void Message.sendException(Exception e); beantwortet werden beantwortet werden

55 55 Simple Message Jedes Aglet soll einen Message-Handler haben. Jedes Aglet soll einen Message-Handler haben. Für Message-Handling ist die Methode Für Message-Handling ist die Methode public boolean Aglet.handleMessage( public boolean Aglet.handleMessage( Message m); vorgesehen. Der Message-Handler ist durch if-then Anweisungen implementiert. Der Message-Handler ist durch if-then Anweisungen implementiert.

56 56 Simple Message Eine Message wird mittels Proxys Methode gesendet. Eine Message wird mittels Proxys Methode gesendet. public Object AgletProxy.sendMessage(Message m); public Object AgletProxy.sendMessage(Message m); Das Proxy dient als Message-Gateway fürs Aglet Das Proxy dient als Message-Gateway fürs Aglet Simple Messaging ist sogenanntes synchrones Messaging. Simple Messaging ist sogenanntes synchrones Messaging.

57 57 Future Reply Asynchrones Messaging durch Future Reply Asynchrones Messaging durch Future Reply Beim asynchronen Messaging wird die Ausführung des Hauptthreads vom Aglet nicht blockiert. Beim asynchronen Messaging wird die Ausführung des Hauptthreads vom Aglet nicht blockiert. Future Reply als eine Art Mailbox Future Reply als eine Art Mailbox

58 58 Future Reply beim asynchronem Messaging wird eine Message mittels der Methode beim asynchronem Messaging wird eine Message mittels der Methode public FutureReply Proxy.sendFutureMessage(Message m); public FutureReply Proxy.sendFutureMessage(Message m);abgeschickt. mailbox kann abgefragt werden durch mailbox kann abgefragt werden durch public boolean FutureReply.isAvailable(); public boolean FutureReply.isAvailable(); oder man wartet für eine bestimmte Zeit auf ein Reply oder man wartet für eine bestimmte Zeit auf ein Reply public void FutureReply.waitForReply(long duration); public void FutureReply.waitForReply(long duration); schließlich kann das Reply aus der Mailbox herausgeholt werden schließlich kann das Reply aus der Mailbox herausgeholt werden public Object FutureReply.getReply(); public Object FutureReply.getReply();

59 59 Future Reply Asynchrones Messaging Message Handler Message Handler Aglet Proxy Future Reply Obj. 1:sendMessage() 2: getReply()

60 60 Future Reply public class FutureExample extends Aglet{ public void run(){ AgletProxy proxy = get AgletContext().createAglet(getCodeBase(), FutureChild, null); FutureReply future=proxy.sendFutureMessage(new Message(Hello)); future.waitForReply(4000);if(future.isAvailable()){ String reply = (String) future.getReply(); //Verarbeitung von Reply }else //weiter ohne Reply machen }}

61 61 Message Manager MMMM Message Handler Aglet Message Manager

62 62 Multicasting Message Bis jetzt wurde das sogenannte peer-to-peer Messaging behandelt. Bis jetzt wurde das sogenannte peer-to-peer Messaging behandelt. Beim peer-to-peer Messaging muß der Absender das Proxy oder die Identität des Empfängers kennen. Beim peer-to-peer Messaging muß der Absender das Proxy oder die Identität des Empfängers kennen. Solch eine starke Bedienung tritt nur begrenzt auf. Solch eine starke Bedienung tritt nur begrenzt auf. Die Alternative ist Message Multicasting! Die Alternative ist Message Multicasting!

63 63 Multicasting Message a b c Hello a b c d SubscribeAdvertise

64 64 Multicasting Message Jedes Aglet kann eine oder mehrere Multicasting Messages abonnieren Jedes Aglet kann eine oder mehrere Multicasting Messages abonnieren public final void Aglet.subscribeMessage(String kind); public final void Aglet.subscribeMessage(String kind); und sein Abonnement wieder ungültig machen. und sein Abonnement wieder ungültig machen. public final void Aglet.unsubscribeMessage(String kind); public final void Aglet.unsubscribeMessage(String kind); public final void Aglet.unsubscribeAllMessage(String kind); public final void Aglet.unsubscribeAllMessage(String kind); Wenn ein Aglet den Context verlässt, wird sein Abonnement automatisch gelöscht. Wenn ein Aglet den Context verlässt, wird sein Abonnement automatisch gelöscht.

65 65 Multicasting Message das Abonnement wird im Context gespeichert. das Abonnement wird im Context gespeichert. Eine Message wird an die Abonnenten durch Eine Message wird an die Abonnenten durch public ReplySet AgletContext.multicastMessage( public ReplySet AgletContext.multicastMessage( Message msg); verschickt. Als Rückgabewert bekommt man ein ReplySet, das mit einem Iterator durchlaufen werden kann. Als Rückgabewert bekommt man ein ReplySet, das mit einem Iterator durchlaufen werden kann. ReplySet enthält alle Replys der Abonnenten. ReplySet enthält alle Replys der Abonnenten.

66 66 Multicasting Message public class MulticastsubScriber extends Aglet{ public void onCreation(Object o){ subscribeMessage(Hello);} public boolean handleMessage(Message msg){ if(msg.sameKind(Hello){//..... return true; } else return false; }}

67 67 Aglets Framework Aglets Framework besteht aus drei Schichten: Aglets Framework besteht aus drei Schichten: Services und die von Benutzer definierte Aglets Services und die von Benutzer definierte Aglets Aglet API Aglet API Communication API Communication API

68 68 Aglets Framework User-Defined Aglets Aglet API Aglets Runtime Layer - Core Framework.............. -Management Components CachManager.......... SecurityManager...... PersistencyManager Communication API Communication Layer

69 69 Aglets Framework CoreFramework: eigentliche Implementierung der Aglet API CoreFramework: eigentliche Implementierung der Aglet API zuständig für: zuständig für: Ausführung des Aglets Ausführung des Aglets De-/Serialisierung des Aglets De-/Serialisierung des Aglets Laden und Transfer von Klassen Laden und Transfer von Klassen Aglet References Aglet References

70 70 Aglets Framework Management Komponente Management Komponente PersistenceManager: Speichern von deaktivierten Aglets PersistenceManager: Speichern von deaktivierten Aglets CacheManager: Verwalten von Daten CacheManager: Verwalten von Daten SecurityManager: Schutz von Hosts und Aglets gegen böswillige Eingriffe SecurityManager: Schutz von Hosts und Aglets gegen böswillige Eingriffe

71 71 Aglets Framework Communication Layer ist verantwortlich für Transport der Aglets über das Netzwerk Communication Layer ist verantwortlich für Transport der Aglets über das Netzwerk Agent Transfer Protokoll (ATP) Agent Transfer Protokoll (ATP) ATP basiert sich auf HTTP-Protokoll ATP basiert sich auf HTTP-Protokoll

72 72 ZusammenfassungZusammenfassung Aglets werden zur Zeit nirgends im industriellen Maßstab eingesetzt. Aglets werden zur Zeit nirgends im industriellen Maßstab eingesetzt. Man kann sie als ziemlich fortgeschrittener Forschungsprototyp ansehen, bei dessen Implementierung wichtige Erkenntnisse über die Realisierbarkeit und Probleme von mobilen Agenten gewonnen wurden. Man kann sie als ziemlich fortgeschrittener Forschungsprototyp ansehen, bei dessen Implementierung wichtige Erkenntnisse über die Realisierbarkeit und Probleme von mobilen Agenten gewonnen wurden. Ob sie im industriellen Maßstab eingesetzt werden und weiter entwickelt werden, hängt davon ab, ob man geeignete Anwendungsfelder findet. Ob sie im industriellen Maßstab eingesetzt werden und weiter entwickelt werden, hängt davon ab, ob man geeignete Anwendungsfelder findet.


Herunterladen ppt "1 Was sind Aglets? Was sind Aglets? Seminar Software Agenten Vortrag von Tatjana Tschupin und Sergej Lewin und Sergej Lewin."

Ähnliche Präsentationen


Google-Anzeigen