Zásah do interní konfigurace modulu

Zásah do interní konfigurace modulu

V systému jsou implementovaná zadní vrátka pro případy, kdy bychom potřebovali ovlivnit chování modulu ve větších detailech, než to co modul oficiálně podporuje ve své dokumentované konfiguraci.

Zkopírovat odkaz na sekcipro XML definice

Je možné vzít konkrétní XML soubor načítaný jakou součást aplikačního kontextu modulu a vyměnit ho za jiný, který dodáme jako vývojáři konkrétního zákaznického projektu. Z toho důvodu existuje v CpsSpringModuleAbstract metoda getOverridableConfigLocations, která vrací pole ukazatelů na konfigurační soubory. Každý prvek má kromě ukazatele na daný soubor také svoje unikátní id, přes které lze v sitemap nahradit původní definici konfiguračního souboru modulu za vlastní, nebo dodefinovat další konfigurační soubory, které mají být v aplikačním kontextu modulu načteny.

Přetížení se potom děje následujícím způsobem:

xml
1 <examplemodule>2  <configurationOverride>3    <config id="core" with="classpath:com/fg/webapp/cps/v1/modules/spring/module3-config.xml"/>4    <config id="data" with="file:/www/zakaznik/projekt/etc/mujDodatecnySouborProModulXY.xml"/> 5  </configurationOverride>6</examplemodule>

Registrace nové konfigurace:

xml
1 <examplemodule>2  <configurationOverride>3    <configClass>com.fg.tm.sso.config.SecurityConfig</configClass>4  </configurationOverride>5</examplemodule>

Do modulu je také možné přidat nové konfigurační soubory pomocí standardního elementu:

xml
1 <examplemodule>2  <spring>3    <location>file:${project.path}/libs_groovy/cps/src/main/resources/META-INF/web_cps/spring/blog-listener-business.xml</location> 4  </spring>5</examplemodule>

Tak je možné dodat novou funkcionalitu dovnitř modulu (tj. nové custom beany je možné propojit s interním API modulu).

Popsaný způsob není doporučený - jedná se o poslední páku, pokud nejsou jiné možnosti. Jde o zásah do prostoru, který autor modulu považoval za soukromý a proto může podléhat zpětně nekompatibilním změnám. S upgradováním modulu pak modifikace může přestat fungovat a s tím i celý modul.

Zkopírovat odkaz na sekcipro definice přes anotace

V modulu, který rozšiřuje modul původní - ať už na úrovni XML nebo Javy stačí zaregistrovat jen nový Spring Java config, který bude mít kromě @Configuration anotace také @SpringConfigurationOverride anotaci. V té je uvedena classa původní config třídy, která má být touto nahrazena.

Konfigurační třída, která overriduje by zároveň měla (ale nemusela) extendovat původní config třídu a přetížit jen některé factory metody, s tím, že použije @Override anotaci, aby případné změny pohlídal kompilátor.

Na úrovni konfigurace modulu pak lze alternativně provést následovně:

xml
1 <examplemodule>2  <configurationOverride>3    <configClass id="rest-api" with="com.fg.prj.custom.FixedConfig"/>4  </configurationOverride>5</examplemodule>

Kde třída extenduje původní a pouze přetíží požadované metody.

java
1 class FixedConfig extends StageRestApiSpringConfig {2
3    @Bean4    public StageRestApiSecurityFilter getStageRestApiSecurityFilter() {5        return new FixedFilter();6    }7
8}