Table of Contents

Instalace

Binární zdroje

Vývojové oddělení připraví k instalaci aplikace následující:

Instalace SQL skriptů

Dle typu SQL databáze je nutné spustit dodané skripty, aby se vytvořila struktura databázových objektů vyžadovaných aplikací exchanger.war.

Instalace WAR modulů

V následujícím textu se budu odkazovat na domovský adresář aplikačního serveru Tomcat pod proměnnou $CATALINA_HOME. Kroky k instalaci modulů jsou následující:

Po úspěšném spuštění aplikačního serveru budou jednotlivé WAR moduly rozbaleny v adresáři $CATALINA_HOME/webapps v adresářích odpovídajících jménům WAR modulů.

Podpora databází MS SQL a PostgreSQL

V dodávce z vývoje je defaultně v modulu exchanger.war nastavena podpora databáze HyperSQL. Jedná se o lehkou databázi, která není vhodná pro produkční nasazení. Proto je nutné v modulu exchanger.war provést dodatečné úpravy. Nyní jsou podporovány dvě plnohodnotné databáze - MS SQL a PostreSQL. Podporu produkční databáze lze získat těmito úpravami:

Dále se s modulem exchanger.war pracuje dle popisu v kapitole Instalace WAR modulů. Popis konfigurace přístupu k databázím je popsán v kapitole Konfigurace/Infrastrukturní.

Konfigurace

Konfigurace aplikace je uložena v souboru web.xml, který lze nalézt v cestě $CATALINA_HOME/webapps/exchanger/WEB-INF. Při úpravách konfigurace v tomto souboru doporučuji soubor zazálohovat. V případě aktualizace aplikace bude tento soubor nahrazen souborem z aktualizovaného modulu, a dojde tak ke ztrátě konfigurace. Po aktualizaci je tedy nutné zazálohovaný soubor nahrát zpět do adresáře $CATALINA_HOME/webapps/exchanger/WEB-INF, aby byla konfigurace aktuální pro dané prostředí. Po změně konfigurace je nutné restartovat aplikační server.

Konfigurace je realizována standardní cestou konfigurace webové aplikace, tedy množinou jmen a hodnot uložených v elementech context-param. Parametry lze rozdělit na skupinu závislých na infrastruktuře a skupinu ovlivňujících chování samotné aplikace.

Infrastrukturní

Nastavení ADUCID:

Nastavení přístupu k SQL databázi:

Nastavení přístupu k SMTP serveru:

Další nutné infrastrukturní parametry:

Aplikační

Globální parametry jsou následující:

Dále jsou uvedeny konfigurační položky automatických úloh, které jsou spouštěny na základě Cron definice. Jedná se rozšířenou Cron definici s podporou vteřin, více viz https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html. Konfigurační parametry jsou následující:

Logování

Aplikační kód zapisuje své chování do logu. Tento log je určený především pro počáteční ladění a nedoporučuji jej mít zapnutý v produkčním prostředí. Při dodání instalačních komponent pro instalaci do produkčního prostředí by měla být komponenta exchanger.war dodána již s vypnutým logováním.

Po úpravách konfigurace logování je nutné restartovat aplikační server.

Obecné

Konfigurace obecného logování aplikace je uložena v souboru $CATALINA_HOME/webapps/exchanger/WEB-INF/classes/log4j.properties. Obsah v produkční podobě může vypadat následovně:

log4j.rootLogger=WARN, CONSOLE
log4j.logger.com.aducid.database=WARN
log4j.logger.com.aducid.exchanger=WARN
log4j.logger.com.aducid.web.controller=WARN

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d [%-5p] Thread[%-21t] %m%n

V situaci zapnutého podrobného je obsah následující:

log4j.rootLogger=WARN, CONSOLE
log4j.logger.com.aducid.database=DEBUG
log4j.logger.com.aducid.exchanger=DEBUG
log4j.logger.com.aducid.web.controller=DEBUG

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d [%-5p] Thread[%-21t] %m%n

Hodnoty s prefixem log4j.logger.com.aducid byly tedy změněny z hodnoty WARN na DEBUG. Při tomto nastavení se veškeré zprávy zapisují do souboru $CATALINA_HOME/logs/catalina.out.

SMTP

Kromě obecného logování je možné navíc zapnout SMTP logování pro detailnější informace o komunikaci se SMTP serverem. Toto nastavení je uloženo v konfiguraci $CATALINA_HOME/webapps/exchanger/dispatcher-servlet.xml. Zde je zobrazena část konfigurace, kde lze měnit úroveň logování:

...
        <property name="javaMailProperties">
            <props>
                <prop key="mail.transport.protocol">smtp</prop>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.starttls.enable">true</prop>
                <prop key="mail.debug">false</prop>
            </props>
        </property>
...

Změnou hodnoty mail.debug na true lze docílit požadované změny. Informace se zapisují do logu nastaveném v obecné konfiguraci, defaultně tedy do souboru $CATALINA_HOME/logs/catalina.out.

Základní stavové diagramy

V některých diagramech se pracuje s počtem pokusů o opakované odeslání, tj. textem ve smyslu 5 resend attemps. Pracuje se tedy s konkrétní hodnotou pěti pokusů o odeslání. Důvodem je jednodušší pochopení celé problematiky. Hodnotu počtu pokusů o odeslání je možné nastavit na libovolnou hodnotu úpravou konfiguračního parametru maxResendAttempts.

Stavový diagram zásilky

Stavový diagram notifikace zásilky

Stavový diagram metadat souboru

Stavový diagram registrace uživatele/přidání dalšího emailu

Stavový diagram uživatele

Stavový obnovení účtu

Automatické úlohy

Součástí aplikace jsou automatizované úlohy, které provádí rozmanité úkoly. Podrobnější popis těchto úloh je zahrnut v kapitolách níže.

Opakované odesílání emailů

Tato úloha se stará o opakované odesílání emailů, pokud z nějakého technického důvodu nebyly odeslány. Každý neodeslaný email je označený jako *_NOT_SENT (prefix se liší dle typu emailu) a tato úloha se v pravidelných intervalech určených konfigurační hodnotou scheduler.resendEmailCron pokouší email znovu odeslat. Počet pokusů o doručení je určený konfigurační hodnotou global.maxResendAttempts. Při hodnotě Cron výrazu 0 0 * * * * a počtu pokusů o doručení nastavených na pět se úloha pokusí pětkrát odeslat email, a to každou celou hodinu. Pokud se ani poté email nepodaří doručit, je označen za nedoručitelný, tj. *_NOT_DELIVERABLE (prefix se liší dle typu emailu). Tato úloha se snaží odeslat následující neúspěšné emaily:

Kontrola vypršení platnosti zásilky

Úloha v pravidelných intervalech kontroluje datum vypršení platnosti zásilky. Pokud platnost zásilky vyprší, je zásilka označená za EXPIRED. V případě, že zásilka nebyla dosud stažena, je označena za EXPIRED_NOT_DOWNLOADED. Stavem EXPIRED jsou také označena metadata souboru a samotný soubor je fyzicky smazán v úložišti.

Notifikace příjemce

V okamžiku odeslání zásilky je vypočten datum, kdy má být příjemce zásilky notifikován, pokud si zásilku ještě nevyzvedl. Tento čas se nyní fixně rovná polovině doby platnosti zásilky. Pokud tedy odesílatel nastavil platnost zásilky na osm dní, je datum notifikace nastaveno na čtyři dny, a po těchto čtyřech dnech se v případě nestažení souboru příjemcem odešle příjemci notifikace. Pokud existuje problém s odesláním notifikace, vstupuje do hry úloha popsaná v kapitole Opakované odesílání emailů.

Kontrola vypršení obecného požadavku

Tato úloha řeší situace, kdy byl emailový požadavek úspěšně odeslán, ale nebyl v požadované zpracován. Email tedy dorazil uživateli, ale uživatel v dané době neklikl na odkaz ve zprávě, aby tak dokončil příslušný proces. Standardní nastavení platnosti požadavku je deset dní. Úloha má za cíl takto nezpracované požadavky mazat, aby tak nedocházelo například k trvalé blokaci emailové adresy. Jedná se konkrétně o tyto situace: