Krótki opis cyklu życia węzła obliczeniowego.

Węzeł AgENode jest klasą wykonywalną. Jako parametr wywołania przyjmuje ścieżkę do pliku konfiguracyjnego. Uproszczony cykl życia węzła AgE przedstawia poniższy diagram sekwencji:

Węzeł po uruchomieniu szuka pliku w miejscu podanym jako argument wywołania komendy (lub jeśli nie zdefiniowano w miejscu domyślnym: ./age.xml).

Następnie tworzona jest instancja konfiguratora plikowego (implementującego interfejs IFileConfigurator). W obecnej implementacji wykorzystywana jest klasa XmlFileConfigurator.

W pierwszej kolejności wyszukiwany jest we wczytanej konfiguracji obiekt typu AgENodeParams, reprezentujący parametry obowiązujące w całym węźle (musiały zostać wydzielone ponieważ nie dotyczą tylko wybranych komponentów lecz węzła jako całości). W obecnej wersji są to (w razie potrzeby można tę klasę rozwijać):

  1. flaga debug
  2. wspólny człon adresu agentów, obowiązujący w nazwach agentów czytanych przez użytkownika

W razie nieznalezienia obiektu typu AgENodeParams w konfiguracji, taki obiekt instancjonowany jest statycznie z domyślnymi ustawieniami. Dla ustawień z klasy AgENodeParams nie było konieczne definiowanie kontenera Pico, tak jak dla pozostałych komponentów. Domyślnych wartości dla tej klasy dostarcza prosty anonimowy IComponentInstanceProvider

AgENodeParams jest rozszerzeniem ClassPropertyContainera. Cała jego logika związana z konfiguracją jest zaimplementowana w nadklasie, sam posiada jedynie settery/gettery do propertiesów. Taka architektura pozwala go w łatwy sposób rozszerzyć lub przebudować.

Następnie instancjonowane są wszystkie opisane w konfiguracji komponenty systemu spełniające interfejs IAgEComponent. Komponenty z innych modułów mogą rozszerzać klasę AbstractSimpleAgEComponent która implementuje metody interfejsu IAgEComponent związane ze stanem (aktywny/nieaktywny).

Jako IComponentEnvironment komponentów jest ustawiany bieżący węzeł. Komponenty są przechowywane w węźle jako mapy z ID jako kluczem.

Węzeł spełnia IComponentEnvironment, a zatem pełni dla komponentów funkcję środowiska odpowiedzialnego za:

  1. pobieranie wewnętrznej konfiguracji (bo IComponentEnvironment rozszerza IConfigurator)
  2. instancjonowanie wewnętrznych komponentów (bo IComponentEnvironment rozszerza IComponentInstanceProvider)
  3. zarządzanie cyklem życia wewnętrznych komponentów, w szczególności zbieraniem informacji o ich zakończeniu (komponenty aktywne przechowywane są w liście i węzeł nie może zakończyć pracy dopóki lista ta nie stanie się pusta)

Po zakończeniu konfiguracji i zainstancjonowaniu wszystkich komponentów systemu są one inicjalizowane (metoda init()), a następnie wystartowane (metoda start()). Metoda init() odpowiada za pobranie wewnętrznej konfiguracji komponentu i skonfigurowanie go tak aby był gotowy do pracy, podczas gdy metoda start() odpowiada za rozpoczęcie pracy.

Po wystartowaniu komponentów AgENode wywołuje wait() i czeka aż wszystkie uruchomione komponenty wywołają na nim notifyStopped(), które poinformuje go o zakończeniu prac.

Na zakończenie prac węzeł wykonuje na komponentach metodę stop() aby dać im znać że mają się zatrzymać. Za ostateczną finalizację komponentu odpowiada wywołanie metody finish().