Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 10. Adatkezelés JPA-Hibernate Dr. Bilicki Vilmos Szegedi.

Hasonló előadás


Az előadások a következő témára: "UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 10. Adatkezelés JPA-Hibernate Dr. Bilicki Vilmos Szegedi."— Előadás másolata:

1 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 10. Adatkezelés JPA-Hibernate Dr. Bilicki Vilmos Szegedi Tudományegyetem Informatikai Tanszékcsoport Szoftverfejlesztés Tanszék

2 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Tartalom  JDBC ■Connection ■Statements ■Resultset ■Tranasactions  JPA ■Entitás ■ORM ■Lekérdezések  Hibernate ■Betöltés ■Gyrostárak 2014. 07. 15.2Programrendszerek fejlesztése

3 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Problémák  Adatbázis elérés Java-ból - JDBC  ACID vs. Hosszú Munkamenetek (Unit of Work?)  Relációs vs. Objektum Orientált  Memória vs. Adatbázis 2014. 07. 15.3Programrendszerek fejlesztése

4 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Perzisztencia  Perzisztens objektum: a létrehozó program állapotától függetlenül is létezik  Az objektumhierarchia egy részének kimentése/betöltése transzparens módon ■Fájlba (Object Serialization API) –Kevésbé típusos (bájtsorozat) –Objektum referenciák?Keresések?Biztonság? ■Objektum orientált adatbázisba –Nem kellene átkonvertálni(objektum  relációk) –Még nem elég hatékony az adatkezelés –Nem népszerűek, kiforratlanok, nincs komplett implementáció ■Relációs adatbázisba –Nagyon macerás a leképezés/átkonvertálás 4 Programrendszerek fejlesztése

5 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 5 JDBC  Platform és szállító független  Egy egyszerű Java API a programozók számára  JDBC meghajtó menedzser  Gyártó specifikus meghajtók mellyel az egyes gyártók optimalizálhatják a kapcsolatot  Hasonló megoldás mint a Microsoft igen sikeres ODBC megoldása (C nyelv)  Az adatok titkosítása az szállító meghajtó feladata Programrendszerek fejlesztése

6 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 6 JDBC kapcsolat felépítés  Connection Pooling ■ConnectionPoolDataSource interfész –1:X kapcsolat –fizikai kapcsolatok helyett logikai kapcsolatok –a kliens nem érzékel semmit –Alkalmazás szerver biztosítja ezt a funkciót Programrendszerek fejlesztése

7 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 7 JDBC objektumok Programrendszerek fejlesztése

8 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 8 Statement  paraméter nélküli kifejezések  egyszerű SQL kifejezések létrehozására használandó  executeQuery ( ■egyszerű lekérdezés Select * from t  executeUpdate ■INSERT ■UPDATE ■DELETE ■CREATE TABLE ■DROP TABLE ■a visszatérési értéke egy integer mely az érintett sorok számát adja meg egyébként 0  execute ■olyan esetekben használják amikor több mint egy válasz érkezik Connection con = DriverManager.getConnection(url, "sunny", ""); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2"); Programrendszerek fejlesztése

9 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 9 Prepared Statement  a Statement alosztálya  előre fordított SQL kifejezések  egy-vagy több paramétere lehet (IN)  több metódust használhatunk az IN paraméterek beállítására  sokkal hatékonyabb lehet mint a Statement objektum (előre fordított)  gyakran használt kifejezések létrehozására használandó  többször futtatható, a beállított paraméterek megmaradnak Programrendszerek fejlesztése

10 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 10 Callable Statement  segítségével SQL tárolt eljárásokat futathatunk  supportsStoredProcedures()  getProcedures()  {? = call procedure_name[(?, ?,...)]}  IN paraméterek  OUT paraméterek ■regisztrálni kell ■nincs külön lehetőség nagy adatok kezelésére  INOUT paraméterek Programrendszerek fejlesztése

11 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 11 Result Set  Az előző három objektum eredménye  Alapesetben nem írható és nem görgethető (csak egyszer lehet rajta végigmenni)  A JDBC 2.0 API ezeket lehetővé teszi  Nem minden meghajtó képes erre (pl.: postgresql)  getXXX(név vagy sorszám) metódusok (select a, select * )  getMetaData  updateRow(), insertRow(), deleteRow(), refreshRow()  JDBC 2.0 ■previous ■first ■last ■absolute ■relative ■afterLast ■beforeFirst SZTE-Siemens JEE alapok

12 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 12 Result set (JDBC 3.0)  Kurzor: ■TYPE_FORWARD_ONLY ■TYPE_SCROLL_INSENSITIVE ■TYPE_SCROLL_SENSITIVE  Párhuzamosság ■CONCUR_READ_ONLY ■CONCUR_UPDATABLE  Tarthatóság: ■HOLD_CURSORS_OVER_COMMIT ■CLOSE_CURSORS_OVER_COMMIT  Használata: Connection conn = ds.getConnection(user, passwd); Statement stmt = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT); ResultSet rs = stmt.executeQuery(“select author, title, isbn from booklist”); SZTE-Siemens JEE alapok

13 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 13 Tranzakciók  bankbetét átutalás ■A helyen csökken ■B helyen növekszik  egy tranzakció egy vagy több kifejezést tartalmaz melyek csak együtt hajtódnak végre (egyébként visszaállítja az eredeti állapotot - rollback)  a kapcsolat objektum auto-commit módban van azaz minden egyes kifejezést külön külön hajt végre  ha ez le van tiltva akkor a tranzakció addig nem ér véget amíg a commit vagy rollback metódusokat meg nem hívják  a tranzakció kezdete az auto-commit mód letiltásával kezdődik  a JDBC 2.0 API segítségével elosztott tranzakciókat is végrehajthatunk  JDBC 3.0 SavePoint SZTE-Siemens JEE alapok

14 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 14 con.setAutoCommit( false ); bError = false; try { for(... ) { if( bError ) { break; } stmt.executeUpdate(... ); } if( bError ) { con.rollback(); } else { con.commit(); } } / catch ( SQLException SQLe) { con.rollback();... } // end catch catch ( Exception e) { con.rollback();... } // end catch SZTE-Siemens JEE alapok

15 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 15 Elosztott tranzakciók Tranzakció kezelő (JTA) JDBC meghajtó:  XADataSource  XAConnection  XAResource Alkalmazás szerver Programrendszerek fejlesztése

16 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Problémák  ORM  Gyorstítótárazás  Szolgáltatás logika  Tranzakciók 2014. 07. 15.16 Programrendszerek fejlesztése

17 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS ORM kérdések  Hogyan nézzen ki a lementet objektum?  Hogyan definiáljuk a leképezést leíró metaadatot?  Hogyan képezzük le a származási hierarchiákat?  Hogyan kezeljük az objektumok egyezőségét?  Hogyan működik együtt az ORM az üzelti logikával futási időben?  Mi az objektum életciklusa?  Milyen aggregáló és rendező megoldásokat biztosít?  Hogyan kezeljük az asszociációkat?  Tranzakciók, párhuzamosság?  Gyorsítótárazás? 17 Programrendszerek fejlesztése

18 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS ORM paradigma ütközés  Kollekciók  Identitás  Származás  Navigáció 2014. 07. 15.18Programrendszerek fejlesztése

19 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS ORM előnyök  Fejlesztési ciklus (CRUD - @Entity + @Id)  Karbantarthatóság  Sebesség  Gyártó függetlenség 19 Programrendszerek fejlesztése

20 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Java Persistence API  Java Community Program: JSR 317  Entitások kezelése (annó EJB 2.x < Entitás Bab) ■Könnyűsúlyú perzisztens domain objektum ■Öröklődés, Polymorfikus viselkedés ■Absztrakt, Konkrét ■Az állapota a JavaBab konvencióknak megfelelő tulajdonságok halmaza 2014. 07. 15.Programrendszerek fejlesztése20

21 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Entitás  @Entity + @Id  Mező vs. Tulajdonság hozzáférés ■Mellékhatások (Mező+)  Tábla @Table ■Több tábla @SecondaryTable ■View ■Replikációs ■History 2014. 07. 15.Programrendszerek fejlesztése21

22 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Viszonyok  Viszonyok (egyirányú, kétirányú) ■@OneToOne (JoinTable, mappedBy) ■@OneToMany (JoinColumn, JoinTable, mappedBy) ■@ManyToOne (JoinTable) ■@ManyToMany (JoinTable, mappedBy) 2014. 07. 15.Programrendszerek fejlesztése22

23 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Identitás  Referencia vs. Adatbázis elsődleges kulcs  Nem célszerű adatbázis alapú azonosítást használni  Célszerű adatbázis alapú azonosítást használni  Sok fajta ID generáló megoldás 2014. 07. 15.23Programrendszerek fejlesztése

24 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Származás  A gyökér osztály dekorálásával határozható meg a tárolási stratégia ■Egy tábla osztály hierarchiánként –Megkülönböztető oszlop ■Egy tábla minden osztálynak –Gyenge a polymorfikus viselkedése (Union) ■Join stratégia ahol csak a saját adatagok vannak a táblában –Lassú (sok JOIN) 2014. 07. 15.24Programrendszerek fejlesztése

25 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Navigáció  Navigáció? ■Java egzakt –Obejktum gráf bejárás x.d.g.getZ(); ■SQL tetszőleges: –N+1 select problémája –Minimalizálni kell a kérések számát – join –Előre kell tudnunk mit akarunk lekérni »User »User join Billing details 25 Programrendszerek fejlesztése

26 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Entitás állapotok  Tranziens: ■Az újonnan példányosított (a new operátorral) objektumok még nem perzisztensek. ■Ezek az objektumok nem lehetnek tranzakcionálisak, azaz a rajtuk végrehajtott bármely módosítási művelet nem lehet része tranzakciónak. ■Ha egy tranziens objektumot perzisztálni akarunk, vagy más szóval a tranziens állapotból perzisztensbe akarjuk helyezni, a perzisztencia menedzser save függvényét kell meg hívni az objektumra, vagy egy perzisztens objektumból hivatkozni kell a tranziens objektumra.  Perzisztens: ■A perzisztens állapotban lévő objektumpéldány rendelkezik egy elsődleges kulccsal azonosított érvényes adatbázis bejegyzéssel. ■A tranzakció végeztével csak azok a perzisztens entitások kerülnek szinkronizálásra, amelyek módosultak. Ezt a folyamatot dirty chechking-nek nevezik..  Leválasztott (detached): ■A perzisztens objektumok a tranzakció végeztével is léteznek és tartalmaznak adatokat, azonban leválasztódnak a viszony bezáródásával. 2014. 07. 15.26Programrendszerek fejlesztése

27 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Életciklus  Adatbázis vs. Gyorstár vs. Memória  Entitás létrehozása  Entitás törlése  Szinkronizálás  Frissítés  Lecsatolt entitások  Menedzselt entitások  Állapot betöltése 2014. 07. 15.27Programrendszerek fejlesztése

28 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Entitás Menedzser  Az entitásokat az Entitás Menedzser – EM kezeli ■Konténer által kezelt –Automatikusan propagálódik ■Alkalmazás által kezelt –A tranzakciókat nem propagálja automatikusan  Nem szálbiztos  Fontosabb metódusai: ■persist() ■find() ■update() ■remove() 2014. 07. 15.28Programrendszerek fejlesztése

29 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Párhuzamosság  Párhuzamos hozzáférés esetén az adtaforrásban lévő adathoz egy időben többen is hozzáférnek  Optimista zárolás ■Írás előtt megnézi, hogy módosították-e ■Verzió mező  Pesszimista zárolás ■Amíg az adatot módosítja addig zárolja 2014. 07. 15.Programrendszerek fejlesztése29

30 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Zárolási szintek  OPTIMISTIC – olvasási zárolás  OPTIMISTIC_FORCE_INCREMENT – olvasási zárolás és megnöveli a verziószámot  PESSIMISTIC_READ – Hosszú távú olvasási zárolás. Más tranzakciók olvashatják, de nem írhatják  PESSIMISTIC_WRITE – Írási zárolás, mások nem olvashatják  PESSIMISTIC_FROCE_INCREMENT – Olvasási zárolás és verzió növelés  READ - OPTIMISTIC  WRITE - PESSIMISTIC_FROCE_INCREMENT  NONE 2014. 07. 15.Programrendszerek fejlesztése30

31 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Bab Validálás  Nem csak JPA képesség  A Web és az EJB konténernek is része  Mező és tulajdonsághoz köthető szabályok  Javax.validation.c onstrains – bővíthető  Idő + minta + érték 2014. 07. 15.Programrendszerek fejlesztése31

32 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Lekérdező nyelv  SQL-hez hasonló de Objektum Orientált  Lehetővé teszi az objektumgráfon lévő elemek címzését 2014. 07. 15.32Programrendszerek fejlesztése

33 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Hibernate 33 Programrendszerek fejlesztése

34 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Fogalmak:  SessionFactory (net.sf.hibernate.SessionFactory): Egy tárolóhely a lefordított mappingek részére. Innen érhető el a Session és a ConectionProvider. Tartalmazhat egy másod-szintű tárolót, ami a tranzakciók között használhatók fel processz vagy klaszterszinten.  Session (net.sf.hibernate.Session): Ez egy rövid életű objektum, ami egy kapcsolatot reprezentál a tároló és az applikáció között, Magába foglal egy JDBC kapcsolatot. Innen kérhetőek el a tranzakció objetumok. Egy elsőszintű tároló tartozik hozzá a perzisztens objektumok számára. Amikor lépkedünk az objektum gráfban, vagy azonosító alapján keresünk, akkor van rá szükség.  Perzisztens Objektumok: Szintén rövid életű objektumok, amelyek pontosan 1 session-el vannak kapcsolatban. Amikor a session bezárul, akkor szabaddá válnak és más applikációs szintek is használhatják.  Tranziens Objektumok: Akkor beszélünk tranziens objektumokról amikor még sohasem voltak elmentve (tehát még nem voltak perzisztensek), így például ezeknek általában még nincs azonosítójuk. 34 Programrendszerek fejlesztése

35 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Fogalmak:  Tranzakció (net.sf.hibernate.Transaction): Rövid életű objektum ami egy atomi egységet valósít meg (tehát vagy teljesül az összes művelet vagy egyik sem, ha valamilyen hiba folytán nem teljesül akkor vissza kell tudni vonni a már bekövetkezett módosításokat). Egy session-ben több tranzakció is megvalósulhat.  ConnectionProvider (net.sf.hibernate.connection.ConnectionProvider): Innen kérhetjük el a JDBC kapcsolatokat (itt a kapcsolatok tárolódnak is). Leválasztja az alkalmazást az alsóbb rétegektől (DataSource, DriverManager). A fejlesztő által implementálható.  TransactionFactory (net.sf.hibernate.TransactionFactory): Itt kérhetjük el a tranzakció objektumokat. A fejlesztő által implementálható. 35 Programrendszerek fejlesztése

36 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Perzisztencia 36 Programrendszerek fejlesztése

37 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Perzisztencia menedzser  CRUD  Lekérdezés  Tranzakció  Gyorstár 37 Programrendszerek fejlesztése

38 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Objektumok betöltése  Azonosító alapján  HQL  Kritérium alapján  Minta alapján 38 Programrendszerek fejlesztése

39 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Betöltés  Lazy ■Csak proxy  Batch ■Ha egy proxy-t fel kell oldani akkor többet is felold  Eager ■Mindent betölt 39 Programrendszerek fejlesztése

40 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Optimalizálás - Gyorstárak 40 Programrendszerek fejlesztése

41 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Tartalom  JDBC ■Connection ■Statements ■Resultset ■Tranasactions  JPA ■Entitás ■ORM ■Lekérdezések  Hibernate ■Betöltés ■Gyrostárak 2014. 07. 15.41Programrendszerek fejlesztése


Letölteni ppt "UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS 10. Adatkezelés JPA-Hibernate Dr. Bilicki Vilmos Szegedi."

Hasonló előadás


Google Hirdetések