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).