Jak mám Spring rád a všude ho chválím, tak co se týče jejich certi­fi­kace, přijde mi, že to se svou nenažra­ností přehnali. Je normální, že programátorská zkouška stojí kolem 250 dolarů, ale podmiňovat to účastí na povin­ném, drahém kurzu, se mi zdá příliš. Naštěstí jedna z výhod práce v korpo­racích je, že na taková školení prostředky jsou. Sepsal jsem pár poznámek ze školení, které jsem absol­vo­val, i Spring certi­fi­kace, kterou jsem právě složil.

Školení

Samotné školení probíhalo online a trvá čtyři dny (náročné na pozor­nost, zíval i školi­tel), ale troufnu si tvrdit, že spíš potře­bu­jete čtyři roky praxe. Podle mého názoru si mohli odpustit dlouhý úvod, obecný popis JPA, JMS, security, mocků… (to přeci musí každý senior programátor umět) a místo toho věnovat víc prostoru proxy nebo hierar­chickým kontex­tům. Na druhou stranu jsem někde četl (prav­děpo­dobně to byla novinářská poučka), že by se neměly přeceňovat znalosti a podceňovat inteli­gence publika. Čekal bych víc o podpoře Java 8. A poslední výtka, Java, i Spring, spějí k annota­tion hell. Naštěstí ukazují i xml, kterému osobně dávám přednost.

Příklady měli připra­vené pro cvičené opice, plné TODO, které jste měli doplnit. Přesto, kdo neumí s Eclipse nebo Mavenem, případně vidí Spring poprvé v životě, nemůže stíhat. Ovšem má možnost vypra­covat je jako domácí úkoly, protože jsou k dispo­zici řešení. Prezen­to­vali materiály už se Springem 4.1, ale my dostali jen verzi 4.0

Celkově mi školení přišlo výrazně kvalit­nější než ta od Oraclu. Nejen materiály, ale hlavně tím, že školitel byl zkušený odborník.

Co jsem se naučil

Podepsal jsem NDAčko, že nepro­zradím, co bylo za otázky v testu. Nicméně chtěl bych se podělit o pár svých poznámek, ze kterých jsem se na certi­fi­kaci učil.

Jedna z klíčových tříd, respek­tive rozhraní, ve Springu je BeanFactoryPostProcessor. Tento post procesor může modifi­kovat definici bean. Nejznámější imple­men­tací je nejspíš PropertySourcesPlaceholderConfigurer. Oproti tomu BeanPostProcessor (přichází na řadu až po BeanFac­to­ry­Pos­t­P­ro­cessoru) může modifi­kovat instance bean před nebo i poté, co jsou inicia­li­zo­vané. Jako příklad imple­men­tace uveďme CommonAnnotationBeanPostProcessor, který proce­suje například anotace PostCon­st­ruct a PreDest­roy. Pozor, PreDestroy se nevolá pro beany se scopem prototype. Navíc se volá jen v případě, kdy se JVM ukončí normálně. Pokud vás zajímá, jak toho dosáhli, podívejte se na AbstractApplicationContext#registerShutdownHook(), kde se využívá Runti­me#add­Shutdown­Hook(Thread hook). V souvis­losti s anota­cemi, kterými můžete ověnčit definici beany, jsem úplně jsem zapom­něl, že existuje anotace Required.

Schema version

K život­nímu cyklu aplikač­ního kontextu ještě poznámka, že annota­tion injection se provede před xml injection. Obě metody lze totiž kombi­novat a tohle pořadí vám umožňuje konfi­gu­raci kniho­ven, jejíchž zdrojový kód nemáte pod kontro­lou, ale potře­bo­vali byste překrýt jejich konfi­gu­raci defino­vanou anota­cemi. K injek­tování proto­type do single­tonů slouží tzv. lookup method. V xml konfi­gu­raci nemusíte u schématu uvádět verzi, použije se poslední, což vám usnadní upgrade.

Named pointcut

Je potřeba porozumět AOP. A to je dobře, protože se ve Spring frameworku hojně používá. Udělejte si jasno v termínech join point, pointcut (a jejich zápisu), advice, aspect, target a weaving. Je důležité znát i oba způsoby vytváření proxy: JDK pro inter­facy a CGLib pro classy. Z použití AOP jsem si odnesl pěknou inspi­raci Using Spring AOP to Retry Failed Idempo­tent Concurrent Operations. Pěkný „chyták“ i na zkušené programátory je situace, kdy metoda a() volá metodu b() na té samé třídě, tak se advice nezavolá (vysvětlení). Užitečný je koncept named point­cut, který vám pomůže odstranit dupli­city v konfi­gu­raci, viz obrázek.

Obvykle jsem dělal s větším mírou abstrakce než JdbcTemplate, takže se hodilo zopakovat si rozdíl mezi RowMapper (co řádek to objekt), RowCallbackHandler (void) a ResultSetExtractor (celý Resul­tSet najed­nou). Nikdy jsem zatím nevyužil TransactionDefinition#PROPAGATION_NESTED, tak mě ani nenapadlo, jak je to imple­men­továno (jedna fyzická trans­akce s více safe pointy).

Spring 4 přináší ještě něco sofis­ti­ko­vanějšího než jsou profily a to anotaci Conditional. Verze 4.1 má další anotační novinku, Sql, pro spouštění skriptů v testech. Když už je řeč o testech, tak o anotaci @DirtiesContext jsem tušil, ale zatím nepoužil. Třída anoto­vaná @Confi­gu­ra­tion může být přímo součástí testo­vací třídy, ale musí být static.

Ke studiu můžete využít refcard Sprin­g 4 – An­no­ta­tion-D­riven Dependency-Injection.

Certifikace

Jak už jsem se rozči­lo­val, kvůli certi­fi­kaci musíte absol­vovat povinné školení. Ale nebývalo tomu tak vždy. Existo­valo něco, čemu říkali Grandfather Criteria, kdy stačilo doložit příspěvek na fóru, patch, článek na blogu nebo zapojení do user groupy.

Je možné si za 40 USD zakoupit neofi­ciální ukázkové testy. Hodily se mi, ale nutno podotknout, že přístup k nim je pouze on-line, mají tam (podle mě) chyby, nejde odtud kopírovat text a ani si dělat poznámky.

V oficiálním study guidu se dočtete (a je to pravda), že nezkouší ze jmen tříd a signa­tury metod. Rovněž tam nalez­nete seznam otázek, na které byste měli znát odpověď. Test trvá 90 minut a z 50 otázek jich musíte správně zodpovědět 38 (76%). Pokud má otázka více možností, nevíte bohužel kolik.

Související