Ugrás a tartalomhoz

Java Persistence API

A Wikipédiából, a szabad enciklopédiából
A lap korábbi változatát látod, amilyen Zafir (vitalap | szerkesztései) 2012. május 1., 21:51-kor történt szerkesztése után volt. Ez a változat jelentősen eltérhet az aktuális változattól. (Milyen adatbázisokat támogat?)

A Java Persistence API, vagy röviden JPA, egy keretrendszer a Java programozási nyelvhez, fő feladata Java Platform, Standard Editiont és a Java Platform, Enterprise Editiont használó alkalmazásokban relációs adatok kezelése. 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 Javában, ezek közül néhány: JDBC, szerializáció, JCA, XML adatbázisok. Ugyanakkor 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

Az első Java perzisztencia specifikáció az OMG (Object Management Group) perzisztencia service 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

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

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

Enterprise JavaBeans

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 annak érdekében, 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

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 lett kifejlesztve. 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

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 service orientált architektúrák számára lett tervezve, Java verzióját a Java Community Process kezeli, C++ verzióját az OASIS.

Hibernate

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

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 végül 2009. december 10-én lett jóváhagyva. 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

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
  • pessimistic locking
  • generált kulcsok és szekvenciák
  • frissítő és törlő lekérdezések
  • outer join-ok
  • függvények
  • LOB-ok

Külső hivatkozások

Dokumentáció

Tutorialok