Hlavní menu
Nástroje |
Repository (úložisko pre Spring context jednotlivých modulov) je súčasť základného modulu commons distribúcie OpenCms pre KIV. Je implementovaný v balíku cz.zcu.kiv.repository. Sprístupňuje a uľahčuje prácu s frameworkom Spring. Slúži ako prostredník, ktorý sa stará o to aby ste mohli použiť Spring bez veľkých zásahov do súčastného kódu. Úlohou tohto programu je zaobstarať komunikáciu a správu Spring frameworku, tak aby jednotlivé moduly boli čo najmenej postihnuté jeho zavedením. Stará sa o vytvorenie kontextov pre jednotlivé moduly, uchováva vytvorené kontexty, poskytuje kontexty a pri odobraní modulu kontext vymaže (deje sa to napr. pri znovuzavedení aplikácie). Prečo zaviesť SpringExistuje viacero výhod od sprehľadnenia kódu až po testovanie. Podorobnejšie príklady je možné nájsť tu VyhodySpringu Zmeny z pohľadu serveruRepository musí byť zavedené ešte predtým ako sa zavedie štandardný (základný) kontext Springu. Sú potrebné zmeny na úrovni aplikácie. Presnejšie zmeny vo web.xml. Tu je nutné zapísať repository ako listener, presnejšie ako prvý listener (na poradí v súbore záleží). Ako listener slúži trieda cz.zcu.kiv.repository.support.web.RepositoryLoader?. Ak máte vo web.xml štandardný loader Spring-u (org.springframework.web.context.ContextLoader? Listener) odstráňte ho, pretože RepositoryLoader? plne nahradí jeho funkčnosť. Listenery vo web.xml by to vyzerať napríklad takto: <!-- definice Spring listeneru --> <listener> <listener-class> cz.zcu.kiv.repository.support.web.RepositoryLoader </listener-class> </listener> <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> <listener> <listener-class>org.opencms.main.OpenCmsListener</listener-class> </listener> Zmeny z pohľadu moduluSpring nie je potrebnýAk modul nepotrebuje kontext Spring-u vtedy sa jedná o triviálnu situáciu. Nie je nutné nič meniť. Potrebujem vlastný kontext aj so základným kontextomV tomto prípade sú potrebné zmeny na úrovni modulu. Ak aplikácia nebola písaná pre Spring, bude nutná fáza refactoringu a dekomponovania. Pripojiť Spring je veľmi jednoduché. Do classpath (najlepšie však do balíkov špecifických pre Váš modul, aby sme zamedzili možným kolíziam s inými modulmi) pridáme config.xml, ktorý bude obsahovať konfiguráciu Spring-u pre modul. Pridáme aj triedu (na názve nezáleží), ktorá bude dediť od cz.zcu.kiv.repository.support.opencms.AbstractAction?. Jej obsah bude tvoriť cesta ku konfigurácií a jedinečný názov, ktorým sa bude možné odkazovať na danný kontext. (Názov musí byť jedinečný inak dôjde k výnimke). Ukážka ako má vyzerať taká trieda: public class Action extends AbstractAction{ public static final String NAME = "MODULE_XY_NAME"; @Override public String getName() { return NAME; } @Override public String[] getConfigLocations() { return new String [] { "/cesta/v/classpath/ku/config.xml" }; } } Posledným nastavením je nastavenie OpenCms, a to v administrácií modulu je nutné nastaviť cestu k Action class. Potrebujem len vlastný kontextV tomto prípade bude postup veľmi podobný, ako v pripade so základným kontextom, avšak je nutné oddediť od cz.zcu.kiv.repository.support.opencms. AbstractNoParentAction?. Ako pristupovať ku kontextuKontext je dostupný ihneď po inicializácií OpenCms a všetkých jej modulov. Na prítup používajte triedu cz.zcu.kiv.repository.support.web.RepositoryUtils?. V nej nájdete statickú metódu getContext. Ak chceme používař bean-y iného modulu B, získame jeho kontext podobne(rovnaká metóda), len je nutné zadať identifikátor kontextu B ako parameter. Používajte ju výlučne v JSP, pretože výlučne k tomuto účelu bola trieda vytvorená. Používať ju v beanoch Spring-u ide priamo proti jeho všetkým konvenciám a aj proti výhodám spring-u ako jednoduchá konfigurácia a testovanie. Táto trieda bola vytvorená ako kompromis k stávajúcim riešeniam v OpenCms. |