Sposób działania

Drzewo zależności klasy PicoWorkplaceManager naszkicowano poniżej:

Pośrednią klasę abstrakcyjną WorkplaceManager implementującą jedynie metody odpowiedzialne za zarządzanie workplace'ami (ale bez inicjalizacji) wprowadzono aby umożliwić w przyszłości testy innych implementacji IWorkplaceManagera nieopartych o PicoContainer.

Konfigurowanie modułu core rozpoczyna się gdy na zainstancjonowanym obiekcie typu PicoWorkplaceManager wywołana zostanie metoda init().

Metoda pobiera ze środowiska pracy (interfejs IComponentEnvironment spełniany przez węzeł AgENode) wewnętrzne definicje komponentów określone dla konfigurowanego obiektu. IComponentEnvironment (a właściwie IConfigurator, którego rozszerza) zwraca listę definicji komponentów. Za wyprodukowanie PicoContainera agregującego komponenty wewnętrzne IWorkplaceManagera odpowiada fabryka PicoContainerMaker.

Następnie instancjonowane i konfigurowane poprzez PicoContainer są wszystkie obiekty spełniające interfejs IWorkplace.

Jeśli w konfiguracji nie zdefiniowano żadnego workplace'a praca systemu się kończy. W przeciwnym wypadku wszystkie workplace'y są inicjalizowane metodą init(), co pociąga za sobą pobranie przez nie ich wewnętrznych definicji komponentów oraz zainstancjonowanie tych komponentów. WorkplaceManager spełnia interfejs środowiska pracy Workplace'a (IWorkplaceEnvironment) i wstrzykuje się jako środowisko w każdym z zainstancjonowanych Workplace'ów.

Następnie na tych komponentach zostaje wywołana metoda init() i tak proces konfiguracji postępuje aż do wyczerpania hierarchii w pliku konfiguracyjnym.

W obecnej wersji jedyną klasą implementującą IWorkplace jest IsolatedSimpleWorkplace, w przyszłości jednak system musi być przygotowany na obecność Workplace'ów działających w środowisku wielowątkowym i rozproszonym.

W rezultacie otrzymujemy ułożoną hierarchicznie, zainicjalizowaną i skonfigurowaną strukturę agentów gotowych do rozpoczęcia pracy.