1 public synchronized void 2 mobileAgentWantToMigrate(CfMAF.Name agentName, 3 AgentSystemService destination) 4 throws de.unimuenchen.informatik.mnm.masa.agent.CouldNotMigrate{ 5 while (_migrateAgent == true) { 6 try { // wait till agentManager read MigrateInfo 7 wait(); 8 } 9 catch (InterruptedException e) {} 10 } 11 // _migrateInfo has type MigrateInfo 12 _migrateInfo.setInfo(agentName,destination); 13 _migrateAgent = true; 14 notifyAll(); 15 try{ 16 wait(); 17 } 18 catch(java.lang.InterruptedException e){} 19 if ( ! _couldMigrate) 20 throw new CouldNotMigrate(); 21 }Als Parameter muß der Name des Agenten und das Zielagentensystem in Form einer CORBA-Objektreferenz angegeben werden. Eventuell muß der Agent warten, bis der AgentManager eine weitere Migration abgearbeitet hat (Zeile 5-10). Anschließend wird der eigentliche Migrationswunsch in das Attribut _migrateInfo geschrieben (Zeile 12). Der AgentManager wird durch den Aufruf von Methode notifyAll() (Zeile 14) aus seinem blockierenden Aufruf wait() in der Methode getMigrateInfo() unterbrochen (Zeile 4). Der Agent wird wiederum mit der Methode wait() solange blockiert (Zeile 16), bis das Quellagentensystem die Migration erfolgreich durchgeführt hat, oder ein Fehler aufgetreten ist und eine Ausnahmebehandlung eingeleitet wird (Zeile 20).