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í:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE sitemap SYSTEM "cps.dtd"><!-- historicky daný základ konfiguračního souboru, který je includován z jiného místa konfigurace --><sitemap> <!-- definice modulu s nazvem "mujnazev" --> <mujnazevmodule classname="mojepackage.mujnazev.MujNazevModule" mujVolitelnyAtribut="hodnota"> <!-- vlastní konfigurace modulu - je vhodné nedefinovat značky použité na jiné úrovni, nebo v jiném modulu --> <mojeKonfiguraceHlavni atribut="hodnota"> <mojeKonfigurace>text</mojeKonfigurace> </mojeKonfiguraceHlavni> <mojeKonfiguraceDalsi /> </mujnazevmodule></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.
Příklady
Zpracování pomocí configHelper a následný přístup k instanci konfigurace
public class WorkflowModule extends CpsGuiSpringModuleAbstract {
@Override public CpsModuleConfiguration parseModuleConfiguration(CpsModuleConfigSupport configSupport) { // vlastni configuracni trida final WorkflowConfig cfg = new WorkflowConfig(); // prevod z XML podoby do pojo pomoci helper tridy final ConfigHelper helper = getConfigHelper(); helper.configureAccordingToSubElements( configSupport.getModuleConfigRootElement(), // root XML element cfg, // prazdna instance pro naplneni z XML new String[]{"gui", "injectedResources"} // ignorovat elementy s jinym vyznamem ); return cfg; }
@Override public String getModuleStatus() { // ziskani instance konfigurace final WorkflowConfig cfg = getModuleConfiguration(WorkflowConfig.class); return "initialized workflows:" + cfg.getWorkflowDefinitions()); }}Ruční získání a zpracování XML
public class MujNazevModule extends CpsGuiSpringModuleAbstract { @Override protected void setupModuleAfterSpringInitialization(Map<String, Object> config) throws CpsException { super.setupModuleAfterSpringInitialization(config); // ziskani XML root prvku ConfigElement rootElement = getModuleSupport().getConfigSupport(config).getModuleConfigRootElement(); // ziskani prvniho poduzlu ConfigElement mojeKonfiguraceHlavni = rootElement.getChildElement("mojeKonfiguraceHlavni"); if (mojeKonfiguraceHlavni!=null) { String hodnota = mojeKonfiguraceHlavni.getAttributeValue("atribut"); } // ziskani vsech poduzlu List<ConfigElement> mojeKonfiguraceDalsi = rootElement.getChildElements("mojeKonfiguraceDalsi"); // ziskani hodnoty pomoci XPATH ConfigElement mojeKonfigurace = rootElement.getElement("mojeKonfiguraceHlavni/mojeKonfigurace"); String text = mojeKonfigurace.getTextValueTrim(); // mozne NPE! // podminka s vychozi hodnotou if (rootElement.getOptionalAttributeValueAsBoolean("restApi", false)) { // ziskani nepovinne hodnoty String restApiPrefix = rootElement.getOptionalAttributeValue("restApiPathPrefix"); } // ziskani nepovinne hodnoty s konverzi Integer timeout = rootElement.getOptionalAttribute("timeout", Integer.class); }}Souhrn
- 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
Autowirekonfigurační třídy - případně další možnosti pro konfigurace Spring modulu
