!!! Od 1.6.2022 nastupuji do Komerční banky tvořit novou digitální banku. Školení se nechci úplně vzdávat, v současnosti přemýšlím nad tím, jak alespoň pár školení za rok uskutečnit. Pokud by mi někdo se školeními chtěl pomoci, tak se mi ozvěte. Na JavaDays opět budu, to si nenechám ujít :-) Teď budu mít v KB hodně práce než si všechno sedne, ale jakmile to nastane, tak hned budu přemýšlet nad tím, jak alespoň pár školení za rok uskutečnit, protože je hromada lidí, které bych opět strašně moc rád viděl a považuji je za přátele. Časem (nejspíš v příštích pár měsících) vytvořím nový blog na separátní doméně a novinky Java a SQL školení dále rozšiřovat nebudu. Pokud se něco změní, tak to dám včas vědět zde na webu a na blogu. !!!

Java 14 records: zkušenosti

publikováno: 12.2.2022

Právě jsem přepsal pár mikroservis, kde jsem změnil DTOčka na recordy, tak jsem sepsal pár poznatků:

  • U aktuální verze Spring Boot 2 fungují out-of-the-box, není zapotřebí žádná další konfigurace (zkoušeno na verzi 2.6.3).
  • Record může mít custom metody (z hello world příkladů to nebývá zřejmé).
  • Negenerují se gettery, tudíž pro získání atributu "count" je u recordu metoda "count()", nikoli "getCount()". Na jednu stranu je zápis čistší, na druhou stranu přepisování stávajících aplikací je trošku víc pain, ale to si časem sedne.
  • Jackson má podporu pro recordy od 2.12.0 (verze z konce roku 2021) https://carloschac.in/2021/03/04/jacksonrecords/
  • U Jacksona když vytvoříte na recordu vlastní custom gettery, tak musí mít předponu "get", což mě neskutečně irituje (kontrakt té třídy není konzistentní). Mohou se jmenovat jinak, ale pak před každým z nich musí být anotace @JsonProperty
  • Chybí builder, což je škoda. Existuje tento projekt, který to napravuje: https://github.com/Randgalt/record-builder Tento projekt funguje hezky, do stejného balíčku vygeneruje NázevRecorduBuilder.class třídu. Když se pak do recordu dá custom statická builder metoda vracející instanci tohoto objektu, pak máme klasický Builder Design Pattern.
  • To, že jsou recordy immutable je samozřejmě báječná věc, ale občas je to opruz (například jsem měl situaci, kdy jsem potřeboval nastavit jeden atribut objektu na null, dřív jsem na to použil setter, teď to je trošku složitější). Na druhou stranu to člověka víc nutí přemýšlet a ve výsledku je kód a design aplikace lepší.
  • JAXB zatím s recordy pracovat neumí: https://github.com/eclipse-ee4j/jaxb-api/issues/183 (issue otevřeno v dubnu 2021, zatím na tom nikdo nepracuje).
  • Mapstruct má od 1.4.0 podporu pro recordy (verze z konce roku 2020): https://mapstruct.org/news/2020-09-28-mapstruct-1_4_0_Final-is-out/
  • Pár dalších (a zajímavých) drobností:

Předchozí:
OpenJ9 (IBM Semeru) 17
Následující:
Docker Desktop alternativy
Reference

Školení mi pomohlo ujasnit si jak má správně probíhat testování kódu, představilo užitečné knihovny a nástroje. Vše bylo podáno zábavnou formou, takže nebyl problém udržet pozornost. Navíc byl výhodou dostatek

Certicon
David

Jedno z nejlepších školení za poslední roky. Kromě seznámení se Springem apod. mě velmi příjemně překvapila hluboká znalost probírané látky a schopnost ji srozumitelně vysvětlit v případě ad hoc dotazů.

Jaroslav

Přestože jsem Cčkař, tak jsem se na školení JUnit dozvěděl nové věci. Zejména co se týče metodiky jednotkového testování a některých odborných termínů.

Retia
Jaromír


Novinky

16.4.2022: Docker Desktop & High CPU usage

5.4.2022: Spring4Shell 0-day vulnerability

30.3.2022: Online důchodová kalkulačka
Do důchodu daleko, ale je dobré vědět co nás bude čekat a mít v dokumentech pořádek.