Die Methode create_agent() wird vom MASA System zur Erstellung
eines Voyager Agenten aufgerufen. Von den übergebenen Parametern sind
zur Erstellung eines Voyager Agenten folgende von Interesse:
agent_name, agent, place_name,
class_names. Der Name des Voyager Agenten soll die in agent_name übergebene Bezeichnung erhalten. Unter Beachtung der Randbedingung, daß für alle Voyager Agenten nur ein Namensraum existiert, wird zur Vermeidung der Namensgleichheit der gewünschte Name des Voyager Agenten folgendermaßen modifiziert:
Ist ein Agent des gleichen Namens schon vorhanden wird dem Agentennamen das Postfix <n>
hinzugefügt, wobei n standardmäßig mit 1 belegt ist und für jeden weiteren namensgleichen Agenten um 1 inkrementiert wird.
Der Voyager Server, auf dem der Agent erstellt werden soll, wird in
place_name angegeben. Die Java-Klasse, die die Implementation
des Agenten realisiert, wird in class_names angegeben. Hat
class_names die Länge 0, so wird die in agent_name angegebene Bezeichnung verwandt.
Im ersten Schritt zur Erstellung eines Agenten wird der Packagename
aus dem Parameter agent ausgelesen. Danach der zuvor
beschriebene Mechanismus zur Ermittlung des Klassennamens durchgeführt
und anschließend der Name des Agenten auf die ebenfalls zuvor
beschriebene Art und Weise berechnet. Nun kann in MASA ein
VoyagerProxyAgent zur Repräsentation des Voyager Agenten erstellt
werden. Schlägt dies fehl, wird die create_agent()-Methode ohne
Erstellung eines Voyager Agenten abgebrochen. Im fehlerfreien Fall
wird mit der Erstellung des Voyager Agenten fortgesetzt. Dazu wird
zunächst ein Voyager Client gestartet. Da parallel dazu in derselben
Java-Virtual-Machine (JVM) im Thread des NamingGateways ein
Voyager Client gestartet sein kann, kann der Versuch, durch den
VoyagerAgentManager hier einen Voyager Client zu starten, mit dem
Wurf einer StartupException fehlschlagen. Dies stellt jedoch
keinen Fehler dar und wird nur durch die Ausgabe einer Warnmeldung
angezeigt. Nach dem Start des Voyager Clients wird der Voyager Agent
erzeugt und dann zum Voyager Namespace mit seinem Namen und dem
Voyager Server samt Portnummer als Präfix gebunden. Die Eintragung in
den Voyager Namespace kann zwar auch zusammen mit der Erstellung
des Agenten mit einer Methode durchgeführt werden, doch durch die
Aufteilung ist eine differenziertere Fehlererkennung möglich. Nach
erfolgreicher Erstellung wird der Voyager Client wieder angehalten. Im
Fehlerfall muß zunächst ein Rollback bezüglich der Erstellung des
VoyagerProxyAgents erfolgen. Die jedoch einfache und konsistente
Terminierung eines MASA Agenten rechtfertigt auch die Reihenfolge, in
der zunächst der VoyagerProxyAgent und dann erst der Voyager Agent selbst erstellt werden. Als Rückgabewert wird der zur Vermeidung von Namensgleichkeit modifizierte Agentenname zruückgeliefert.