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

Methode create_agent(...)

Die Erzeugung eines Agenten ist eine der wichtigsten Methoden der Klasse AgentManager. Diese Methode hat u. a. den Parameter 'agent', einem Bytearray, das der AgentManager benötigt um den Agent zu instanziieren. In diesem Parameter sind mehrere Objekte in serialisierter Form enthalten, die ausgelesen werden müssen:
 1   java.util.Vector agentArgs= null;
 2   int numberOfObjects= 4;
 3   if ( agent.length > 0 ) { // is array greater than one
 4     agentArgs= new java.util.Vector(numberOfObjects);
 5     try { // read from stream
 6       java.io.ObjectInputStream input= 
 7         new java.io.ObjectInputStream(
 8           new java.io.ByteArrayInputStream(agent));
 9       while( true ){ // read till end of stream
10         agentArgs.addElement(input.readObject());
11       }
12     }
13     catch(java.io.EOFException eofe){
14       //Ok, stream full read
15     }
16     catch(java.lang.Exception e){//Error during input.readOject()
17       e.printStackTrace();
18       throw new CfMAF.ArgumentInvalid();
19     }
20   }
Die zu lesenden Objekte sollen zur Weiterverarbeitung in einen Vektor namens agentArgs gespeichert werden (Zeile 1). Eine Instanz der Klasse java.io.ObjectInputStream wird erzeugt, indem es mit dem Bytearray agent instanziiert wird (Zeile 6-8). Dieser Stream input wird solange gelesen (Zeile 10) und in den Vektor agentArgs eingetragen, bis das Ende des Streams erreicht ist. Dann wird die Ausnahmebehandlung java.io.EOFException eingeleitet und im zugehörigen catch-Block abgefangen (Zeile 13). Sollte ein unerwarteter Fehler beim Lesen dieses Parameters auftreten, so wird die Exception auf der Standardausgabe angezeigt (Zeile 17) und die Abarbeitung dieser Methode beendet, indem die Ausnahmebehandlung CfMAF.ArgumentInvalid() angestoßen wird.

Das Laden der Agenten-Klasse wird mit der Klasse java.rmi.server.RMIClassloader vorgenommen. Dazu muß aus dem übergebenen Package-Namen und dem Namen des Agenten die zu ladende Klasse zusammengesetzt werden. Mit Hilfe des Parameter code_base, welches eine URL in Stringformat sein muß, wird die Klasse und die zugehörige Tie-Klasse geladen. Nun werden der Reihe nach folgende Schritte durchgeführt:

1.
der Konstruktor der Agenten-Klasse wird aufgerufen
2.
die init(...)-Methode des Basisagenten wird aufgerufen
3.
der Agent wird durch seine Tie-Klasse an den BOA gehängt
4.
die Referenzen des Agenten werden in den AgentTable gespeichert
5.
der Agent wird in den Naming Service eingehängt
6.
es wird in den Standard Event Channel ein 'AgentUp' geschickt
7.
der Agent wird als Thread gestartet

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