next up previous contents
Next: 6.3.3 Klasse Migrate Up: 6.3.2 Klasse AgentManager Previous: Methode migrateAgent(...)

Methode receive_agent(...)

Die Methode receive_agent(...) hat vom logischen Aufbau her die gleiche Struktur wie create_agent(). Nur mit dem Unterschied, daß der Agent nicht mit dem Classloader geladen, sondern aus einen Bytearray deserialisiert wird:
 1  try{// read state of the agent and then the agent
 2    java.io.ByteArrayInputStream in = 
 3    new java.io.ByteArrayInputStream(agent);
 4    java.io.ObjectInputStream inputStream = 
 5    new java.io.ObjectInputStream(in);
 6
 7    state= (CfMAF.AgentStatus)inputStream.readObject();
 9    newAgent= (Agent)inputStream.readObject();
10    inputStream.close();
11  }
12  catch(java.IOException ioe){//Error
13    ioe.printStackTrace();
15    throw new CfMAF.DeserializationFailed();      
16  }
Zu Beginn wird der java.io.ObjectInputStream mit dem Agenten agent instanziiert (Zeile 5). Aus dem Bytestream wird der Zustand state des Agenten ausgelesen (Zeile 7). Anschließend wird der eigentliche Agent newAgent deserialisiert (Zeile 9). Falls ein Fehler bei der Deserialisierung aufgetreten ist, wird die Exception abgefangen und dem aufrufenden Client dies mit der Exception CfMAF.DeserializationFailed() angezeigt.

Da als Codebase der Agenten stets eine URL angegeben werden muß, kann man davon ausgehen, daß es prinzipiell von jedem Agentensystem aus möglich ist, die benötigte Tie-Klasse zu laden.

Die als 'transient' gekennzeichneten Attribute des Agenten werden mit Hilfe der initTransient(...)-Methode initialisiert. Anschließend ist der Ablauf wie bei create_agent(...), mit der Ausnahme, daß der Agent nur gestartet wird, wenn der Zustand state gleich CfMAF.Running ist.

Es bleibt anzumerken, daß beim Start des Thread, die Methode run() wieder von Beginn an abgearbeitet wird. Das liegt daran, daß ein Thread selbst nicht serialisiert werden kann und deshalb auf dem Zielagentensystem ein neuer Thread für den Agenten instanziiert werden muß. Das bedeutet aber nicht, daß es sich hierbei um eine neue Instanziierung des Agenten handelt, da seine Attributewerte transferiert worden sind.


next up previous contents
Next: 6.3.3 Klasse Migrate Up: 6.3.2 Klasse AgentManager Previous: Methode migrateAgent(...)
Copyright Munich Network Management Team