Java Persistence API

A Wikipédiából, a szabad enciklopédiából

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 Editiont és a Java Platform, 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óság,[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:

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 | forrásszöveg szerkesztése]

Az első Java perzisztencia 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 | forrásszöveg szerkesztése]

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 | forrásszöveg szerkesztése]

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 | forrásszöveg szerkesztése]

Enterprise JavaBeans[szerkesztés | forrásszöveg szerkesztése]

Az 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 Java Persistence API következő verziói különálló JSR-ben lesznek definiálva, nem pedig az EJB JSR-ben.

A Java Persistence API 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 | forrásszöveg szerkesztése]

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 kifejlesztetté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 | forrásszöveg szerkesztése]

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 | forrásszöveg szerkesztése]

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 | forrásszöveg szerkesztése]

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:

Támogatott adatbázisok[szerkesztés | forrásszöveg szerkesztése]

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

További információk[szerkesztés | forrásszöveg szerkesztése]

Dokumentáció[szerkesztés | forrásszöveg szerkesztése]

Tutorialok[szerkesztés | forrásszöveg szerkesztése]

  1. [Erik]: Szerializáció (magyar nyelven). Java. Codeguide, 2013. április 15