Konfigurace modulu
Konfigurace modulu
Modul libovolně definuje svoji konfiguraci v příslušném XML souboru - doporučená konvence využívá cestu config/module-muj-nazev/module-muj-nazev.xml.
Obsah konfiguračního souboru modulu je pak např. následující:
1 <?xml version="1.0" encoding="utf-8"?>2<!DOCTYPE sitemap SYSTEM "cps.dtd">3<!-- historicky daný základ konfiguračního souboru, který je includován z jiného místa konfigurace -->4<sitemap>5 <!-- definice modulu s nazvem "mujnazev" -->6 <mujnazevmodule classname="mojepackage.mujnazev.MujNazevModule" mujVolitelnyAtribut="hodnota">7 <!-- vlastní konfigurace modulu - je vhodné nedefinovat značky použité na jiné úrovni, nebo v jiném modulu -->8 <mojeKonfiguraceHlavni atribut="hodnota">9 <mojeKonfigurace>text</mojeKonfigurace> 10 </mojeKonfiguraceHlavni>11 <mojeKonfiguraceDalsi />12 </mujnazevmodule>13</sitemap>
CPS dle konfigurace vytvoří instanci modulu, XML konfigurace je pak dostupná ve vybraných fázích životního cyklu pomocí CpsModuleConfigSupport.
Pro zpracování konfigurace je přímo určena metoda parseModuleConfiguration, která je volána ještě před setup fází. Metoda vrací instanci konfiguračního objektu specifikované pouze marker interfacem CpsModuleConfiguration.
Výchozí implementace vrací BaseCpsModuleConfiguration, kde jsou XML atributy (v příkladu jako mujVolitelnyAtribut) pouze převedeny do mapy vlastností a dostupné pomocí com.fg.webapp.cps.v1.modules.BaseCpsModuleConfiguration.getProperty metody.
Typicky modul definuje vlastní konfigurační objekt. Pro rychlý převod XML konfigurace do pojo reprezentace lze využít třídu configHelper, případně zpracovat XML reprezentované v podobě ConfigElement.
Zkopírovat odkaz na sekciPříklady
Zpracování pomocí configHelper a následný přístup k instanci konfigurace
1 public class WorkflowModule extends CpsGuiSpringModuleAbstract {2 3 @Override4 public CpsModuleConfiguration parseModuleConfiguration(CpsModuleConfigSupport configSupport) {5 // vlastni configuracni trida6 final WorkflowConfig cfg = new WorkflowConfig();7 // prevod z XML podoby do pojo pomoci helper tridy8 final ConfigHelper helper = getConfigHelper();9 helper.configureAccordingToSubElements(10 configSupport.getModuleConfigRootElement(), // root XML element11 cfg, // prazdna instance pro naplneni z XML12 new String[]{"gui", "injectedResources"} // ignorovat elementy s jinym vyznamem13 );14 return cfg;15 }16 17 @Override18 public String getModuleStatus() {19 // ziskani instance konfigurace20 final WorkflowConfig cfg = getModuleConfiguration(WorkflowConfig.class);21 return "initialized workflows:" + cfg.getWorkflowDefinitions());22 }23}
Ruční získání a zpracování XML
1 public class MujNazevModule extends CpsGuiSpringModuleAbstract {2 3 @Override4 protected void setupModuleAfterSpringInitialization(Map<String, Object> config) throws CpsException {5 super.setupModuleAfterSpringInitialization(config);6 // ziskani XML root prvku7 ConfigElement rootElement = getModuleSupport().getConfigSupport(config).getModuleConfigRootElement();8 // ziskani prvniho poduzlu9 ConfigElement mojeKonfiguraceHlavni = rootElement.getChildElement("mojeKonfiguraceHlavni");10 if (mojeKonfiguraceHlavni!=null) {11 String hodnota = mojeKonfiguraceHlavni.getAttributeValue("atribut");12 }13 // ziskani vsech poduzlu14 List<ConfigElement> mojeKonfiguraceDalsi = rootElement.getChildElements("mojeKonfiguraceDalsi");15 // ziskani hodnoty pomoci XPATH16 ConfigElement mojeKonfigurace = rootElement.getElement("mojeKonfiguraceHlavni/mojeKonfigurace");17 String text = mojeKonfigurace.getTextValueTrim(); // mozne NPE!18 // podminka s vychozi hodnotou19 if (rootElement.getOptionalAttributeValueAsBoolean("restApi", false)) {20 // ziskani nepovinne hodnoty21 String restApiPrefix = rootElement.getOptionalAttributeValue("restApiPathPrefix");22 }23 // ziskani nepovinne hodnoty s konverzi24 Integer timeout = rootElement.getOptionalAttribute("timeout", Integer.class);25 }26}
Zkopírovat odkaz na sekciSouhrn
- modul může mít libovolnou konfiguraci, kterou modul může zpracovat (ideálně v parseModuleConfiguration)
- instance konfiguračního objektu vzniká před setup fází a je dostupná pomocí metod getModuleConfiguration, případně CpsModuleSupport#getModuleConfiguration
- je připraven mechanizmus pro převod XML do POJO podpoby - configHelper
- Spring moduly mohou ve svých třídách bezpečně používat Autowire konfigurační třídy - případně další možnosti pro konfigurace Spring modulu