Certifikace Java EE 6 JPA Developer
Sbírám certifikace a navlíkám je na nit, jako korálky. Už je jich pěkná šňůra. Tak nějak mě to i baví. A člověk si přitom přečte spoustu zajímavých knížek. Tuhle jsem si zase říkal, co mi tak ještě chybí ve sbírce? Ahá! Oracle Certified Expert, Java EE 6 Java Persistence API Developer, to bude něco pro mne.
Trocha historie
JPA vychází historicky z Entity Bean, které byly původně součástí EJB specifikace. V Java EE 5 byla sice už definovaná první verze JPA, která ale pořád tak nějak zůstávala součástí EJB. V aktuální verzi Java EE 6 už jsou EJB 3.1 a JPA 2.0 dvě samostatné technologie (byť stále úzce kooperující).
Tomuto vývoji odpovídají i certifikace: pro Java EE 5 byla k dispozici pouze certifikace Business Component Developer, která obsahovala jak EJB 3.0, tak JPA 1.0. Pro Java EE 6 už jsou to dvě oddělené větve — Enterprise JavaBeans Developer a Java Persistence API Developer.
A právě tu posledně jmenovanou certifikaci jsem čerstvě absolvoval (jak říkám, sbírám to jak houby :-) tak bych se rád podělil o své studijní úsilí. Ještě než se k tomu dostanu, předestřu pár informací o certifikaci samotné.
Certifikace v kostce
Jako u všech certifikací téhle úrovně, jedná se o test na počítači v nějakém testovacím středisku. Pokud vás zajímají věci jako cena, trvání, passing score, nebo detailnější rozpis témat, můžete se podívat na stránku zkoušky. Já bych uvedl jen hrubší přehled témat:
- Configure and package JPA Entity classes in enterprise modules
- Create basic JPA Entity classes
- Design a Java application that uses a RDMS
- Ensure data integrity by using Transactions and Locking
- Java Persistence Criteria API
- Java Persistence Query Language
- Optimize database access
- Use JPA relationships
- Use advanced JPA features
- Utilize Entity classes by creating code that uses the EntityManager API
Ne všechny témata jsou zastoupena rovnoměrně — tak nějak subjektivně mi přijde, že velký důraz se kladl na věci jako:
- používání Criteria API
- mapování Map (@Entity a @Embeddable typy jako klíče a jako hodnoty, tj. kdy použít @OneToMany a kdy @ElementCollection)
- transakce a vyhazování výjimek (tohle není až tak JPA, jako spíš EJB a JTA)
- typy a chování zámků (LockModeType) na EntityManageru
- nastavení Cache Mode v persistence.xml, cachování pomocí @Cacheable a čištění cache pomocí Cache.evict()
- použití různých typů EntityManagera (aplikační, transakční, extended)
- přepisování atributů a asociací v @Embeddable pomocí anotací @AttributeOverride a @AssociationOverride
- dostupnost persistence unit v rámci různých typů archivů (JAR, WAR, EAR)
Naopak v minimální míře jsem zaznamenal témata jako základní mapování a Java Persistence Query Language (JPQL).
Co studovat
Kniha Pro JPA 2
Když jdu do certifikace, začínám knihou. Nic lepšího se mi neosvědčilo. V případě JPA 2.0 existuje bezkonkurenční bible Pro JPA 2. Knížka je sice z roku 2009, ale to (výjimečně) vůbec nevadí — pokud vám jde o verzi 2.0, ještě s ní pár let vydržíte. Přece jenom, specifikace tak rychle nestárnou.
(Nicméně pokud netrpělivě vyhlížíte Java EE 7, jejíž součástí bude JPA 2.1, tak už vyšla second edition téhle knihy.)
Podtitul tohohle “špalku” je Masterinig Java Persistence API a titul nelže — provede vás všemi zákoutími JPA a byť z vás neudělá mistra (to bez praxe jaksi nepůjde), poměrně významně pozvedne úroveň vašich znalostí.
Kniha je velmi dobře napsaná, má promyšlený koncept a jednotlivá témata a kapitoly na sebe logicky a plynule navazují. Může po ní sáhnout jak úplný (JPA) začátečník, tak někdo kde přechází z předešlé verze 1.0 a stejně tak, pokud si jen potřebujete oživit některé oblasti. A dá s použít i jako prvotní reference (pokud nepotřebujete jít příliš do hloubky). Tak všestranná kvalitní kniha se jen tak nevidí. A je to ideální zdroj pro přípravu na certifikaci.
Aby byla tahle kniha briliantová, chybí jí jen jeden aspekt — propojení JPA se Springem. Je pochopitelné, že je JPA provázáno s EJB, poněvadž obojí je součástí Java EE. Na druhou stranu, kombinace Spring + Hibernate táhla v uplynulých letech vítězně světem a to tak masivně, že bych čekal, že to nelze opominout. Lze. Takže ve výsledku je kniha jen diamantová :-)
Kniha Java Persistence with Hibernate
Když to jde, tj. je čas a je to vůbec k dispozici, snažím se, pro přípravu na certifikaci, přečíst knihy dvě. V tomto případě byl mojí sekundární volbou opus Java Persistence with Hibernate, na kterém mě lákaly dvě věci — jednak je od Manningu, jehož počiny mě, když ne nadchnou, tak aspoň nezklamou; a jednak je jedním z autorů Gavin King, stvořitel zmiňovaného Hibernate. Plus navíc je tahle kniha žhavě aktuální — ještě stále je ve stavu early access (MEAP) a finální by měla být letos v březnu.
Na tuhle knihu jsem se hodně těšil, ale mám z ní rozporuplný pocit. Předně, je hrozně ukecaná. Ale hrozně. Než se autoři k něčemu podstatnému dostanou, tak to trvá a vysvětlí vám to fakt pořádně.
Pak mi tady chybí, to co se mi tak líbilo na předešlé knize — propracovaný koncept. Přijde mi, že byť autoři směřují k určitému cíli, plují proti větru a křižují perzistentní vody sem a tam. S tím souvisí i další věc: tuhle knihu určitě nepoužijete jako referenci — jakékoliv téma se v ní bude obtížně hledat.
Co je naopak na tomto počinu cenné, je popis vlastností, které má Hibernate nad rámec JPA. Hibernate je totiž jeho implementací:
- Hibernate 3.2 implementoval JPA 1.0
- Hibernate 3.5 implementoval JPA 2.0
- Hibernate 4.3 implementuje JPA 2.1
Protože Hibernate je starší a zralejší technologií, než JPA, tak nijak nepřekvapí, že je i bohatší na různé vlastnosti a je v lecčems napřed. A právě tyhle aspekty (kromě samotného JPA), kniha popisuje. Za všechny bych zmínil třeba možnost definovat anotace platné pro celou persistence unit (třeba @NamedQuery) na tříde package-info.java, což JPA neumí.
Celkovému hodnocení téhle knihy bych se prozatím vyhnul. Ovšem čistě z pohledu certifikace to není moc dobrý zdroj — je příliš rozvláčný, ne vhodně strukturovaný a nejspíš (z hlediska JPA) ani kompletní. Nicméně pro rozšíření kontextu to rozhodně není špatné.
Training tests
Pokud má někdo hodně dobrou paměť, orientovanou na detaily a přesné znění, možná může jít do certifikace jen po načtení literatury. To není můj případ. Většinou si po čase pamatuju cosi ve stylu něco takového tam je, ale přesně si to už nepamatuju.
Takže vždy tak maximálně 14 dní před zkouškou a poslední dobou spíš už jen týden, používám nějakou sadu zkušebních testů, které mi pomohou se “naladit” na ostrý test. Pro JPA jsem dal na doporučení na JavaRanch a si vybral sadu od Enthuware.
Jedná se o sadu čtyř testů, které rozsahem odpovídají certifikaci (tj. 64 otázek, 135 minut). Testy jsou o něco težší, než ten reálný. Po vyhodnocení testu se dají otázky znovu projít, tentokrát s vysvětlením, které je sice dost úsporné, ale pokud jste se předtím neflákali, mělo by to být dostačující. A cena $20 není špatná.
Co mě to přineslo?
Jedním z hlavních přinosů certifikací pro mne vždycky bylo prohloubení znalostí. V případě JPA jsem:
- upgradoval z verze 1.0 na 2.0,
- naučil se pořádně Criteria API,
- přeorientoval se z cachování poskytovaném providerem k tomu definovanému ve specifikaci,
- oživil si věci, které se v nové verzi JPA “až tak neměnily”
- a přečetl dvě dobré knihy.
To vůbec není špatné. Já jsem spokojený :-)