User Tools

Site Tools


struktura:marklar-core:servicelocator

Service Locator

Jadro je navrzeno dle navrhoveho vzoru Service Locator, ktery poskytuje Servici nad DAO (SampleService, ExperimentService), DAO samotne, servicy pro konfiguraci aplikace pri spusteni, servicu zprostredkovavajici logiku kolem experimentu a InstrumentService (ten se pouzije jen pri inicializaci jadra). Trida ServiceLocator je singleton, je inicializovana pri startu aplikace. Jakakoliv service zprostredkovavana ServiceLocatorem musi byt volana jako ServiceLocator.getInstance.getXXXService().

DAOSingleton

Ackoliv trida DAOSingleton neni deklarovana jako Singleton, Singleton z ni dela prave ServiceLocator. DAOSingleton uchovava DAO pro jednotlive entity (SampleDAO, ExperimentDAO, SettingsDAO) a drzi v sobe thread-safe instanci EntityManagerFactory.

Dotazy na DB zprostredkovava EntityManager, ktery je vytvored EntityManagerFactory metodou v DAOSingleton, tj. je treba volat ServiceLocator.getInstance().getDaos().getEntityManager().

ConfigurationService

Zprostredkovava nacitani konfigurace ze dvou zdroju

  • z prikazove radky (trida CommandArgs - zatim nepouzito)
  • z konfiguracniho souboru confing.ini (trida ConfigFileService)

V konkretni implenetaci nacitani z config.ini se pouziva misto ConfigFileService trida ConfigDataService. Ta umoznuje navic definovat suffix, ktery pri zadosti o key z config.ini zada o key+suffix (pouziti, kdyz bude vice instrumentu, kazdy nacitajici konfiguraci ze stejneho souboru.

LogicModuleManager

Rozsahla trida, ktera ma nasledujici ulohy

  • Ma metody, ktere meni ExperimentStatus ExperimentInstance
  • Drzi v pameti aktivni experimenty
  • Spousti novy experiment (vzdy na novem vlakne)
  • Slouzi jako Subject v navrhovem vzoru Observer (tj. registruje Observery a kdykoliv je raisnut event, notifikuje observery)

Observery se vazi ke konretnim objektum a jsou registrovani pres registerListener(Object, Listener). Raisovani eventu probiha metodami raiseEvent(Event, Object). Object v obou pripadech muze byt ExperimentInstance (nejpouzivanejsi), ExperimentType (napr. prepinani log↔lin osy grafu), Instrument (napr. vypinani nekterych zalozek, pokud dany experiment bezi) a Sample (napr. zmena popisku v Sample).

K LogicModuleManageru patri LogicEventUtility, ktera se chova o raisovani patricnych eventu (jejich spousteni na vlakne, ktere ma pristup ke grafice, protoze vetsina eventu vede prave ke zmene v grafice).

struktura/marklar-core/servicelocator.txt · Last modified: 2016/07/20 09:54 by jlochman