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.