Java Persistence API
A Java Persistence API, vagy röviden JPA, egy keretrendszer a Java programozási nyelvhez, melynek fő feladata a relációs adatok kezelése a Java Platform Standard és a Enterprise Editiont használó alkalmazásokban. A Java Persistence API a JSR 220 Expert Group, a JPA 2.0 a JSR 317 Expert Group munkája.
A perzisztencia szót az informatikában olyan adatra használjuk, mely túléli az őt létrehozó folyamatot. A Java perzisztenciát hasonlóképpen definiálhatjuk, csak ez esetben arról van szó, hogy a tárolás a Java programozási nyelv segítségével történik. Az adatok perzisztálására többféle mód is létezik Javaban, ezek közül néhány: JDBC, szerializáció,[1] JCA, XML adatbázisok. Legtöbb esetben az adat nagy része főként relációs adatbázisokban tárolódik, melyekhez sokféle módon hozzáférhetünk a Java programból – ezen módok közül egy a JPA.
A perzisztencia ebben a kontextusban a következő három területet fedi le:
- maga az API, a javax.persistence csomagban definiálva
- a Java Persistence Query Language (JPQL)
- objektum-relációs metaadatok
A JPA tulajdonképpen egy interfészt ad, melyet implementálni lehet. Ugyanakkor léteznek már hozzá mind nyílt forráskódú, mind kereskedelmi forgalomban kapható implementációk is, melyek közül szintén választhatunk.
Története
[szerkesztés]Az első Java Persistence API specifikáció az OMG (Object Management Group) perzisztencia szolgáltatás volt, mely azonban sosem lett igazán sikeres. Ezt követte az EJB 1.0 CMP Entity Beans, mely nagy sikert aratott, mert több jelentős Java EE szolgáltatást nyújtó cég alkalmazta (pl. BEA, IBM). Mások ugyanakkor úgy gondolták, hogy az Entity Bean-ek követelményei túl bonyolultak, a költség és a teljesítmény rossz. Az EJB 2.0 CMP próbálta csökkenteni az Entity Bean-ek komplexitását, de nem túl nagy sikerrel, a megkötések nagy része megmaradt. Az EJB nehézségei vezettek egy újabb Java perzisztencia specifikációhoz, a JDO-hoz (Java Data Objects), melyet azonban az igazán nagy cégek körében sosem váltak népszerűvé.
A JPA-t eredetileg azért készítették, hogy kiegészítse az EJB 2 CMP-t, a JDO, valamint egyéb olyan megoldásokat, mint a Hibernate és a TopLink API-k. A JPA 1.0 specifikáció 2006. május 11-én jelent meg végleges formában a JSR 220 részeként. A JPA 2.0 specifikáció 2009. december 10-én jelent meg. A JPA a sokat kritizált EJB 2.0 és EJB 2.1 entitás bean-ek leváltására született, és igen sikeressé vált.
Entitások
[szerkesztés]A perzisztencia entitás egy olyan Java osztály, mely tipikusan perzisztálva van egy táblához egy relációs adatbázisban, példányai adattáblák egyes sorainak felelnek meg. Az entitások általában kapcsolatban állnak más entitásokkal, és ezeket a kapcsolatokat az objektum-relációs metaadatok fejezik ki. Objektum-relációs metaadatokat meghatározhatunk közvetlenül az entitás osztályt tartalmazó fájlban annotációk segítségével, vagy egy – az alkalmazáshoz tartozó, de az entitás osztálytól különálló – XML leíró fájlban. A JPA definiál egy Entity Manager API-t is, ami futási időben dolgozza fel a lekérdezéseket és a tranzakciókat az objektumokon az adatbázis felé.
Java Persistence Query Language
[szerkesztés]A Java Persistence Query Language (JPQL) egy objektum szintű lekérdező nyelv, segítségével a relációs adatbázisban tárolt entitások kérdezhetők le. A lekérdezések szintaxisa hasonló az SQL lekérdezésekhez, de ezekben a lekérdezésekben entitás objektumokat kezelünk, nem közvetlenül adattáblákat.
Kapcsolódó technológiák
[szerkesztés]Enterprise JavaBeans
[szerkesztés]Az Enterprise JavaBeans (EJB) 3.0 specifikáció (mely a Java EE 5 platform része) magában foglal egy definíciót a Java Persistence API-ról. Ugyanakkor a végfelhasználóknak nincsen szükségük EJB konténerre vagy Java EE alkalmazás szerverre azért, hogy olyan alkalmazást futtassanak, mely a JPA-t használja. A JPA következő verziói különálló JSR-ben lesznek definiálva, nem pedig az EJB JSR-ben.
A JPA az EJB 2.0 CMP (Container Managed Persistence) perzisztencia megoldását váltja fel. Utóbbival ellentétben a JPA megengedi POJO-k (Plain Old Java Object) perzisztálását anélkül, hogy ehhez megkövetelné bármilyen interfész implementálását.
Java Data Objects API
[szerkesztés]A Java Persistence API a Java Data Objects API és az EJB 2.0 CMP (Container Managed Persistence) API egységesítésének részeként fejlesztették ki. 2009 óta minden termék, ami ezen API-kat támogatja, az támogatja a JPA-t is. A Java Persistence API relációs perzisztenciát határoz meg kizárólag a relációs adatbázis-kezelő rendszerek (RDBMS-ek) számára (bár léteznek szolgáltatók, akik más adatforrásokat is támogatnak). A Java Data Objects specifikációk gondoskodnak a relációs perzisztenciáról (ORM, objektum-relációs leképezés), valamint a más típusú adattárak felé való perzisztenciáról is.
Service Data Object API
[szerkesztés]Ahogy Java Persistence API fejlődött, leváltotta az EJB 2.0-t, ennek bizonyítéka, hogy az EJB 3.0-nak már része. A Service Data Objects (SDO) API-nak (JSR 235) más a célja, és a Java Persistence API kiegészítőjeként tartják számon. Az SDO API a szolgáltatásorientált architektúrák számára tervezték, Java verzióját a Java Community Process kezeli, C++ verzióját az OASIS.
Hibernate
[szerkesztés]A Hibernate egy nyílt forráskódú objektum-relációs leképező keretrendszert nyújt Java-hoz. A 3.2-es és az ennél későbbi verziók a Java Persistence API-hoz is implementációt adnak. A Hibernate alapjait Gavin King fektette le.
JPA 2.0
[szerkesztés]A JPA új verziójának, a JPA 2.0 JSR 317-nek fejlesztése 2007 júliusában kezdődött, és a JPA 2.0-t végül 2009. december 10-én hagyták jóvá. A JPA 2.0 fő jellemzői:
- kiterjesztett objektum-relációs leképezés funkcionalitás
- beágyazott objektumokat tartalmazó kollekciók támogatása
- több szinten beágyazott objektumok
- rendezett listák
- hozzáférés típusok kombinálása
- criteria query API
- további metaadatok szabványosítása a DDL generáció támogatására
- validálás támogatása
A JPA 2.0-t támogató cégek:
- DataNucleus (korábban JPOX)
- EclipseLink (korábban TopLink|Oracle TopLink)
- Hibernate
- ObjectDB
- Apache OpenJPA
- IBM, az OpenJPA-alapú Feature Pack for OSGi Applications and JPA 2.0 for WebSphere Application Server-en keresztül
- Versant JPA
JPA 2.1
[szerkesztés]A JPA 2.1 új verziója 2011 júliusában kezdődött a JSR 338 alatt. 2013. május 22-én adták ki a végső változatát.
Főbb funkciói a következők:
- Converters - lehetővé teszi a konverziót az adatbázis és az objektum típusok között
- Criteria Update/Delete - lehetővé teszi a tömeges update-eket és delete-eket a Criteria API-n keresztül
- Tárolt eljárások - lehetővé teszi a lekérdezések definiálását adatbázis tárolt eljárásokba
- Séma generálás
- Entitás gráfok - lehetővé teszi az objektumok részleges vagy megadott fetch-elését és összeolvasztását
- JPQL/Criteria bővítések - matematikai al-lekérdezések, generikus adatbázis függvények, JOIN ON, TREAT opciók
JPA 2.1-et támogató gyártók:
Támogatott adatbázisok
[szerkesztés]A legtöbb JPA szolgáltató támogatja a legnépszerűbb adatbázisok, mint az Oracle, MySQL, PostgreSQL, DB2, SQL Server. Ugyanakkor némelyik JPA sajátosság adatbázis specifikus támogatást igényel, ilyen funkciók lehetnek:
- séma létrehozása
- lapszámozás
- pesszimista lockolás
- generált kulcsok és szekvenciák
- frissítő és törlő lekérdezések
- külső join-ok
- függvények
- LOB-ok
Jegyzetek
[szerkesztés]- ↑ [Erik]: Szerializáció (magyar nyelven). Java. Codeguide, 2013. április 15. [2014. november 7-i dátummal az eredetiből archiválva]. (Hozzáférés: 2014)
További információk
[szerkesztés]- JCP Persistence page
- GlassFish's Persistence page
- Documentation for the final version of the EJB3 spec (called JSR220)
- Wikibooks: Java Persistence
Dokumentáció
[szerkesztés]Tutorialok
[szerkesztés]- Java EE 6 Persistence API tutorial
- Java EE 6 Persistence API Javadoc
- Hibernate EntityManager User guide
- Hibernate Javadoc: org.hibernate.ejb
- EclipseLink JPA tutorials for Application Servers[halott link]
- DataNucleus JPA tutorial for RDBMS Archiválva 2012. november 19-i dátummal a Wayback Machine-ben
- Versant JPA Getting Started Tutorial