Elementy modułu common

Na moduł common składają się następujące elementy:

1. Definicja komponentu jAgE (IAgEComponent) oraz jego środowiska. Komponent jAgE pozwala na jego zainicjowanie, wystartowanie, zastopowanie i sfinalizowanie. Umożliwia także pobranie ID oraz ustawienie środowiska. W porównaniu do wcześniejszych wersji usunięty został getter do obiektu ComponentInfo (obiekt ten w ogóle został usunięty jako zbędny).

Środowisko IComponentEnvironment jest rozszerzeniem IConfigurator oraz IComponentInstanceProvider (patrz niżej). Ponadto udostępnia metodę notifyStopped przeznaczoną do wywoływania dla komponentów które za jej pomocą dają znać że kończą pracę.

2. Podstawowe interfejsy konfiguracyjne oraz ich domyślna implementacja. Obiektem opakowującym konfigurację jest implementacja interfejsu IConfigurator, umożliwiającego pobranie konfiguracji wszystkich komponentów lub jednego wybranego po ID.

Interfejs IComponentProvider odpowiada za instancjonowanie obiektów opisanych w konfiguracji. Rozszerzeniem konfiguratora jest konfigurator plikowy (IFileConfigurator) który umożliwia wczytanie konfiguracji z pliku na podstawie jego ścieżki.

Domyślną implementacją tego ostatniego jest XmlFileConfigurator, który używa fabryki XmlConfigurationBuilder w celu zbudowania konfiguracji najwyższego poziomu. Z tej konfiguracji istotne są obiekty będące komponentami IAgEComponent, przechowywane w mapie z ID komponentu jako kluczem.

Kluczowym interfejsem dla konfiguracji jest IComponentDefinition - opis bytu występującego w systemie który posiada nazwę, klasę oraz definicje bytów względem niego podrzędnych. Interfejs pozwala określić także czy byt ten jest singletonem i po ustawieniu odpowiedniego IComponentInstanceProvidera zainstancjonować go.

Istnieją 4 standardowe implementacje IComponentDefinition:

Klasa Configuration jest niczym innym jak kolekcją definicji komponentów.

3. Klasy związane z obsługą properties w komponentach. Powiązane z klasami konfiguracyjnymi poprzez PropertyInitializera, inicjalizującego odpowiednie property wartością z konfiguracji. Kluczową klasą wśród nich jest Property reprezentująca i obsługująca pojedyncze property.

Dla programistów komponentów jAgE ogromne znaczenie mają annotacje PropertyField, PropertySetter i PropertyGetter, służace do oznaczania w kodzie pól lub metod odpowiadających danemu property z konfiguracji.

4. Ogólne interfejsy i klasy dotyczące adresacji agentów. Podstawowym interfejsem z tej grupy jest IAddress, określający dowolny adres w systemie jAgE. Rozszerzają go IAgentAddress (i jego prosta implementacja AgentAddress, czyli adres agenta wpiętego w środowisko), a także INodeAddress czyli adres węzła środowiska obliczeniowego. Zdefiniowany jest także monitor IAgentAddressConstructionMonitor posiadający metodę przeznaczoną do wywołania w momencie poprawnego skonstruowania adresu.

Interfejs IInternalAddressRegister określa wewnętrzny rejestr osadzony na węźle obliczeniowym i generujący nazwy czytelne dla użytkownika związane z tym węzłem. Interfejs IAgENodeAddressProvider z kolei odpowiedzialny jest za generowanie unikalnych adresów węzłów obliczeniowych.

5. Ogólny interfejs monitora IMonitor a także interfejs IChangesNotifier - klasy zdolnej do informowania o zmianie swojego stanu poprzez monitory IChangesNotifierMonitor (IChangesNotifierem jest między innymi Property a także wszystkie implementacje IPropertyContainera)

6. Podstawowy abstrakcyjny Event czyli zdarzenie o którym może być informowany monitor, a także wyspecjalizowane Eventy wykorzystywane przez interfejsy tego modułu, a więc: