720 likes | 860 Views
Was sind Aglets?. Seminar „Software Agenten“ Vortrag von Tatjana Tschupin und Sergej Lewin. Überblick. Einführung Basiskomponenten des Agletsystems Aglet, Aglets Lebenszyklus und Context Aglets Messaging Aglets Framework. Was sind Aglets?.
E N D
Was sind Aglets? Seminar „Software Agenten“ Vortrag von Tatjana Tschupin und Sergej Lewin
Überblick • Einführung • Basiskomponenten des Agletsystems • Aglet, Aglets Lebenszyklus und Context • Aglets Messaging • Aglets Framework
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.
Aglet Programming Interface (API) • Eine Bibliothek von Klassen und Interfaces • Wurde vom IBM Tokyo Forschungslaboratorium in Japan entwickelt, um eine einheitliche Plattform für mobile Agentensysteme zu schaffen.
Aglet Software Development Kit (ASDK) • www.trl.ibm.com/aglets (Download) • 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) • alle Ausführungen in diesem Vortrag basieren sich auf Java 1.1.x.
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
Basiskomponenten des Agletsystems • 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 . • Schirmt die public-Methoden eines Aglets vor einem direkten Zugriff durch andere Aglets ab • Versteckt den tatsächlichen Aufenthaltsort des Aglets (location transparency) Client Proxy Aglet Interaktion
Basiskomponenten des Agletsystem • 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 • 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 Namen bestimmt. • Identifier. Er ist während des ganzen Lebenszyklusen des Aglets eindeutig.
Das Verhaltensmodell • 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: • Man kann ein neues Aglet-Objekt erzeugen (Creation) • Es wird von einem existierenden Aglet geklont (Cloning) • Um die Aglets zu kontrollieren, kann man sie zerstören (Disposal). • Aglets sind auf zwei verschiedene Weise mobil: • Aktiv • 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 Informationen austauschen, um eine vorgegebene Aufgabe zu erfüllen (Messaging).
Hauptoptionen eines Aglets • 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: • seine eigene ID • seine eigene Ausführungthreads • Dispatching. Das Aglet wird von seinem aktuellen Context entfernt und in den Ziel-Context eingefügt.
Hauptoptionen eines Aglets • 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. • 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 Contextentfernt, wobei alle seine Threads geschlossen werden.
Hauptoptionen eines Aglets Context A Context B Dispose Dispatche Aglet Aglet Retract Clone Create Deactivate Activate Class File Disk Storage
Aglet Event Model • Der Clone Listener ist für Cloning Event‘s vorgesehen. Man benutzt den Clone Listener, um zu reagieren: • wenn ein Aglet geklont wird • wenn ein Aglet Clone erzeugt ist • nach dem Cloning. • Der Mobility Listener ist für Mobility Event‘s vorgesehen. Man benutzt diesen Listener, um zu reagieren: • wenn sich ein Aglet von einem Context zu anderem bewegt • wenn es von einem Context angefordert wird • wenn es bei einem neuen Context ankommt. • Der Persistence Listener ist für Persistence Event‘s vorgesehen, um auf Activation bzw. Deactivation eines Aglets zu reagieren.
Aglet Communication Model • Aglets kommunizieren mittels message passing. • Messages werden nacheinander verarbeitet. • Eine Message ist ein Objekt, das zwischen Aglets ausgetauscht wird. • Synchrone Kommunikation • Asynchrone Kommunikation Message Aglet Message Proxy Aglet Reply Reply
Aglet Package • Die wichtigsten Klassen bzw. Interfaces der Aglets API sind : • Aglet • AgletProxy • AgletContext • Message • FutureReply • AgletID
Die Klasse Aglet • Die Klasse Aglet ist die zentrale Klasse in der Aglet API . • Sie enthält die Methoden, die den Lebenszyklus eines Aglets bestimmen: • Cloning • Dispathing • Deactivating • Disposing • Sie enthält aber auch die Methoden, die das Verhalten von einem Aglet festlegen und die von einem Programmierer überschrieben werden sollen .
Die Klasse Aglet • Das ObjektAgletInfo, das von getAgletInfo() geliefert wird, enthält die Attribute des Aglets : • Zeit, wann das Aglet erzeugt wurde • code-base • Ankunft-Zeit • die Adresse seines aktuellen Context.
Die Klasse Aglet • Erzeugen eines Aglets import com. ibm.aglet public class MyFirstAglet extends Aglet { // Die Methoden vom Aglet }
Die Klasse Aglet • Initialisierung eines Aglets public void onCreation (Object init) { //hier wird das Aglet initialisiert }
Die Klasse Aglet • Start der Ausführung public void run() { // Aglet wird gestartet } • Um das Aglet zu einem entfernten Context zu schicken, soll die Methode dispatch(new URL („atp://some.host.com/context“)); aufgerufen werden
Dispatching State 1. Byte Code Host Host Sending Receiving 2. State 3. Byte Code Host Host
AgletProxy Interface • 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 AgletProxy ermöglicht auch die sogenannte Orttransparenz (location transparency)
AgletProxy Interface • Methoden, die das Proxy des neu erzeugten Aglets zurückgeben: • public abstract AgletProxy AgletContext.createAglet (URL codeBase, String code, Object init) • public abstract AgletProxy AgletContext.retractAglet (URL location, AgletID id) • public abstract AgletProxy AgletProxy.dispatch (URL destination)
AgletProxy Interface • Proxies des existierendes Aglets bekommt man auch auf die folgenden Weise : • public abstract AgletProxy Aglet.getProxy() • public abstract AgletProxy AgletContext.getAgletProxy(AgletID id) • public abstract Enumeration AgletContext.getAgletProxy()
AgletContext Interface • Der Contextist eine Ausführungsumgebung für Aglets . • 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 context = getAgletContext();
AgletContext Interface • Das Aglet kann durch Zugreifen auf den Context ein neues Aglet erzeugen: 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: context.retractAglet(remoteContextURL, agletID);
Aglet, Aglets Lebenszyklus und Context • Wichtige Ereignisse im Leben eines Aglets • Creation: Erzeugung und Klonen eines Aglets • Disposal: Tod eines Aglets • Mobility: dispatch und retract • Persistence: De- und Aktivierung eines Aglets
Realisierung des Event Modells • Events Klassen: • CloneEvent, MobilityEvent, PersistencyEvent • Listener-Interfaces: • CloneListener, MobilityListener, PersistencyListener • Adapter-Klassen • CloneAdapter, MobilityAdapter, PersistencyAdapter
Events • Einige Methoden von CloneEvent: • public AgletProxy getAgletProxy(); gibt AgletProxy des geklonten Aglets zurück • Einige Methoden von MobilityEvent • public AgletProxy getAgletProxy(); gibt AgletProxy des gesendeten Aglets zurück • public URL getLocation(); gibt den Bestimmungsort für das Aglet zurück • Einige Methoden von PersistencyEvent • public AgletProxy getAgletProxy(); gibt das AgletProxy des de/aktivierten Aglets zurück
Creation • Zwei Erzeugungsarten des Aglets • Direkt: Instanz einer Aglet Klasse • Indirekt: Klonen eines Aglets
Creation(direkt) • das Erzeugen einer Aglet-Instanz durch • public AgletProxy AgletContext.createAglet(URL codeBase, String code, Object init); • (nicht durch Konstruktor protected Aglet.Aglet();) • die Manipulation des Aglet Verhaltens • public void Aglet.onCreation(Object init); • public void Aglet.run(); (diese Methoden sollen überschrieben werden)
Creation(direkt) • Zusammenarbeit der Methoden createAglet() Aglet() onCreation() run()
Creation(indirekt) • Klonen eines Aglets mittels • public final Object Aglet.clone(); • Steuerung des Klonens mittels CloneListener • public CloneAdapter.CloneAdapter(); • public final Aglet.AddCloneListener(CloneListener c); (public final Aglet.removeCloneListener(CloneListener c);)
Creation(indirekt) • drei Methoden von CloneListener für die Steuerung des Klonens • public void onCloning(Clone Event); • public void onClone(Clone Event); • public void onCloned(Clone Event); • Mit diesen Methoden kann auch das Verhalten des Aglets und des Clones festgelegt werden.
Creation(indirekt) • Die Zusammenarbeit der Methoden run() onCloning() onCloned() Original Clone onClone() run()
Creation(indirekt) public class CloningExample extends Aglet{ boolean _theClone = false; public void onCreation(Object o){ addCloneListener(new CloneAdapter(){ public void onCloning(CloneEvent e){ //Ausgabe } public void onCloning(CloneEvent e){ _theClone=true; //Ausgabe } public void onCloning(CloneEvent e){ //Ausgabe }); }
Creation(indirekt) public void run() { if(!_theClone){ //The parent runs here clone(); }else { //The clons runs here } } }
Disposal • Das Entfernen eines Aglets aus dem Context mittels • public final Aglet.dispose(); • Das Entfernen eines Aglets kann durch • public void Aglet.onDisposing(); beeinflusst werden.
Disposal • Aufrufreihenfolge und Zusammenarbeit von Methoden dispose() onDisposing() run()
Mobility • zwei Mobilitätsarten eines Aglets • aktiv: Dispatching • passiv: Retraction
Mobility(aktiv) • Ein Aglet kann sich selbst mittels • public final void Aglet.dispatch( URL destination); zum anderen Context destination bewegen. • Dispatching- Prozess kann durch MobilityListener beeinflusst werden. • public MobilityAdapter.MobilityAdapter(); • public final Aglet.AddMobilityListener(CloneListener l); (public final Aglet.removeMobilityListener(CloneListener l);)
Mobility(aktiv) • zwei Methoden für Steuerung des Dispatchings • public void MobilityAdapter.onDispatching(); (bereitet das Aglet zur „Reise“ vor) • public void MobilityAdapter.onArrival(); (initialisiert das Aglet im Remote-Context)
Mobility(aktiv) • Die Zusammenarbeit der Methoden Aktuelles Context run() dispatch() onDispatching() onArrival() run() Remote-Context
Mobility(passiv) • Ein Aglet kann aber auch von einem Remote- Context zurückgeholt werden mittels • public AgletProxy AgletContext.retractAglet(URL contextAddress, AgletID identity); • Beispiel: • AgletID aid=proxy.getAgletID() proxy.dispatch(destination); getAgletContext().retractAglet(destination, aid);
Mobility(passiv) • Retraction kann durch MobilityListener gesteuert werden mittels onArrival() und • public void MobilityAdapter.onReverting( MobilityEvent); • Retraction unterstützt auch disconnected operation
Mobility(passiv) • Die Zusammenarbeit der Methoden lokal retractAglet() onArrival() run() remote run() onReverting()
Mobility(passiv) • 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 • Die PropertyList kann mittels • public abstract Object getProperty(String key); • public abstract Object getProperty(String key,Object value); • public abstract Object setProperty(String key, Object value); verwaltet werden
Persistence • Ein Aglet kann deaktiviert werden mittels • public final Aglet.deactivate(long duration); • De- bzw. Aktivierung kann durch den PersistencyListener beeinflusst werden • public PersistencyAdapter.PersistencyAdapter(); • public final void Aglet.addPersistencyListener( PersistencyListener p); • public final void Aglet.removePersistencyListener( PersistencyListener p);
Persistence • zwei Methoden von PersistencyListener zur Steuerung von De- bzw. Aktivierung des Aglets • public void PersistencyAdapter.onDeactivating( PersistencyEvent event); • public void PersistencyAdapter.onActivation( PersistencyEvent event);
Persistence • Die Zusammenarbeit der Methoden vorher run() deactivate() onDeactivating() nachher onActivation() run()