Next: 5.6.4 Terminierung eines Agenten
Up: 5.6 Lebenszyklus eines Agenten
Previous: 5.6.2 Erzeugung eines Agenten
Ähnlich wie bei der Erzeugung eines Agent gibt es beim Transfer eines Agenten
mehrere mögliche Wege, die Aktion auszulösen:
- ein beliebiger Client von außen, der über die
CORBA-Objektreferenz von Migration die Operation
migrateTo(...) aufruft
- ein anderer Agent innerhalb des Agentensystems, der Agent selbst, oder
das Agentensystem über die Klasse
Migrate mit der Methode mobileAgentWantToMigrate(...)
Nur Agenten die von der Klasse MobileAgent erben, können
migriert werden. Es soll damit verhindert werden, daß
Agenten, die z. B. von ihrer Programmierung her, nicht für einen Transfer
geeignet sind, auch nicht migriert werden können. Das wird vom
AgentManager durchgesetzt. Zusätzlich ruft der
AgentManager die checkSerialization()-Methode des Agenten
auf, damit dieser aktiv seine Serialierung beeinflussen kann.
Der Agent wird suspendiert (suspend_agent()) und anschließend mit Hilfe
von writeObject(...) der Klasse Agent zu einem Bytearray
serialisiert, wobei eine Kopie des Agenten angelegt wird.
Der Agent wird auf dem Quellagentensystem mittels
terminate_agent() terminiert.
Nun wird die Methode receive_agent(...) mit der CORBA-Objektreferenz des
Zielagentensystems aufgerufen. Das Quellagentensystem entfernt nun den Agenten
aus dem AgentTable und aus dem Naming Service.
Der AgentManager des Zielagentensystem stellt aus dem Bytearray mit der
Methode readObject(...) der Klasse Agent den Agenten
wieder her. Anschließend werden die transienten Attribute des Agenten
mit initTransient(...) neu belegt.
Die Tie-Klasse des Agenten wird über die Codebase nachgeladen.
Nun wird wie bei create_agent(...) der transferierte Agent als Thread
gestartet, falls der AgentStatus den Wert Running hat, eine
AgentReference erzeugt, die in der AgentTable eingetragen wird.
Schließlich wird der Agent noch in den Naming Service eingetragen.
Der migrierte Agent besitzt nun eine neue IOR. Damit wird bei Clients, die
noch die alte CORBA-Objektreferenz besitzen und auf den Agenten zugreifen
wollen, eine Ausnahmebehandlung eingeleitet, da der ORB keine Verbindung zum Agenten
herstellen kann. Der Client muß nun über den Naming Service die neue IOR
des Agenten herausfinden.
Next: 5.6.4 Terminierung eines Agenten
Up: 5.6 Lebenszyklus eines Agenten
Previous: 5.6.2 Erzeugung eines Agenten
Copyright Munich Network Management Team