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

Programrendszerek Fejlesztése 14/4 1. A mai előadás tartalma 2  Perzisztencia  Object serialization API  ORM  Hibernate  Bevezetés  Architektúra.

Hasonló előadás


Az előadások a következő témára: "Programrendszerek Fejlesztése 14/4 1. A mai előadás tartalma 2  Perzisztencia  Object serialization API  ORM  Hibernate  Bevezetés  Architektúra."— Előadás másolata:

1 Programrendszerek Fejlesztése 14/4 1

2 A mai előadás tartalma 2  Perzisztencia  Object serialization API  ORM  Hibernate  Bevezetés  Architektúra  Hello world  Java File  Mapping file  Műveletek  Konfiguráció  Interfaces  Mappelés (Kollekciók,Asszociációk,Leszármazások)  Lekérdezések  Optimalizálás(fetching and caching)  Tesztelés

3 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 3

4 Perzisztencia megvalósítása  Közös bázisosztály  Közös tulajdonságok egybegyűjtése  Magunknak kell megírni a műveleteket  Adatmanipulációs nyelv  Kiterjeszti a nyelv szintaxisát  Könnyen megvalósítható  konkurens hozzáférés  tranzakciók  Sérül a hordozhatóság  Hibrid megoldás (így a leghatékonyabb)  A Java felépítése támogatja  Wrapper osztályok, interfészek, adatfolyamok 4

5 Object serialization API  Sokszor ez is megfelelő lehet, felesleges a Hibernate  Java 1.1 java.io csomag része volt  Bázisosztály alapú megoldás (Serializable interface)  A referenciákat, kapcsolatokat is megőrzi  Hierarchiák is menthetőek vele (fa,gráf, körkörös hivatkozások) Elmentés:Visszaolvasás: 5

6 Egy összetettebb példa 6

7 Obektum Relációs Leképezés (ORM)  Objektumok automatikus és transzparens perzisztálása  Java applikációból relációs adatbázisba  Metadata segítségével írja le a kapcsolatot  Konverzió 2 reprezentáció között  A Metadata használata kevesebb idő mint kézzel megírni  Egy ORM megoldás 4 része:  API az objektumok CRUD (create/read/update/delete) műveleteire  Lekérdező nyelv/API az osztályokra és azok adattagjaira vonatkozóan  A leképezések definiálására egy keretrendszer  „Piszkos adatok” ellenőrzése,laza kapcsolatok felderítése, egyéb optimalizáló funkciók megvalósítása 7

8 ORM megoldások  Relációs – minden relációs modell szerint készül el  Portabilitás?  Karbantarthatóság?  Tárolt eljárások?  Könnyűsúlyú objektum leképezés  Manuális leképezés  Ismert tervezési minták rejtik el az SQL kódot  Középsúlyú objektum leképezés  Java alapú tervezés  Az SQL fordítás időben generálódik  Az objektumok gyorstárazva vannak 8

9 ORM megoldások  Teljes objektum leképezés  Fejlett objektum modellezés  Kompozíció  Öröklődés  Laza, Buzgó betöltés  Gyorsítótárazási stratégiák 9

10 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? 10

11 ORM előnyök  Fejlesztési ciklus  Karbantarthatóság  Sebesség  Gyártó függetlenség 11

12 Hibernate  ORMF (Object-Relational Mapping Frameworks) javahoz  Híd az objektumorientált és a relációs szemlélet között  Réteg a DB és az alkalmazás között  A JEMS (JBoss Enterprise Middleware System) része  Nyílt forráskód  A leképezéssel kapcsolatos munka 95% át megspórolja  Támogatja:  OO perzisztens osztályok kezelése,  asszociációt, öröklődést, polimorfizmust,  kompozíciót, kollekciót 12

13 Hibernate  Adat perzisztencia  Relációs adatbázis  Objektum vs. Rekord  Tárolt eljárások  Kézzel elkészített CRUD (create/read/update/delete)?  SQL dialektusok (DDL/DML)?  Objektum orientált adatbázisok?  Object Relational Mapping – ORM  Adatbázis kezelés  Üzleti logika  Serializáció  Csak együtt kezelhető  EJB 2.1  Objektum orientált adatbázisok  ODMG - Nem népszerűek, kiforratlanok, nincs komplett implementáció 13

14 Paradigma ütközés/Granularitás 14

15 Paradigma ütközés/Granularitás  Cím mint  Külön tábla  Külön oszlopok  Külön típus  User Defined Type – SQL kiterjesztés  Oszlopként 15

16 Öröklődés/Polimorfizmus  Hogyan tároljuk le?  Polimorfikus lekérdezés? 16

17 Azonosítás  Java  Referencia szerint (==)  Érték szerint (Equals())  SQL  Elsődleges kulcs  Mi legyen az? Név? Független kulcs? 17

18 Viszonyok  Java  M:M  SQL  1:M  1:1 18

19 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 19

20 Az eltérés ára  30% a programozó idejéből  Bonyolult adatbázis absztrakciós réteg  Projekt bukás lehet  Az objektum réteg átalakítása, hogy megfeleljen a relációs rétegnek  JDBC  Strukturális kényszereket legalább háromszor meg kell adni (insert/update/delete)  DAO 20

21 Architektúra 21

22 Architektúra 22

23 Architektúra 23

24 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. 24

25 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ó. 25

26 Hibernate- felépítés  3 rész:  Java osztály  Relációs adatbázisbeli táblák  Leíró (descriptor)  Definiálja a konverziós szabályokat  A nyelvezete inkább java-centrikus  2 fajtája van:  Xml file (*.xml.hbm kiterjesztés)  Annotáció  Sokan kézzel szerkesztik pedig  XDoclet, Middlegen, AndroMDA. 26

27 Hello World – Java osztály 27  Id  Elsődleges kulcs az adatbázisban (hibernate automatikusan generálja)  Getter-Setter minden adattaghoz (JavaBean)  A java kódban nem kell Hibernate specifikus dolgokat használni! (nem „erőszakos”)  Ugyanugy használjuk az osztályt ahogyan eddig:  Message message = new Message("Hello World");  System.out.println( message.getText() );  Nem kell külön konténer ahogyan EJB-ben

28 Hello World - Leíró 28

29 Hello – World fő applikáció 29

30 Hello – World fő applikáció 30

31 Hello World – hibernate.cfg.xml 31

32 Hello World – hibernate.cfg.xml 32

33 A hibernate konfigurálása  Mivel sok a változó azért széles a config paraméterlista  A hibernate.propertiesből sok ötletet meríthetünk.  2 lehetőségünk van konfigurálásra:  Progaramból állítjuk be a dolgokat  A hibernate.cfg.xml  A keresési útvonal gyökerébe kell tenni  Egyben ki vannak gyűjtve a beállítások  A hbm.xml –ek helyét is meg lehet adni benne  A SessionFactory elkérése : SessionFactory sf = new Configuration().configure().buildSessionFactory();  Több konfig file-t is létrehozhatunk, majd később dinamikusan válogathatunk köztük:  SessionFactory sf = new Configuration().configure("/my/package/catdb.cfg.xml").buildSessionFactory(); 33

34 Példák programból történő konfigurációra:  Egy mappinf file regisztrálása:  Configuration cfg = new Configuration().addResource("Message.hbm.xml");  Alternatív mód (az osztály regisztrálása)  Configuration cfg = new Configuration().addClass(helloWorld.Message.class);  A Properties objektum használata:  Properties props = new Properties();... Configuration cfg = new Configuration().addClass(org.hibernate.auction.Item.class).addClass(org.hibernate.auction.Bid.class).setProperties(props); 34

35 Néhány egyéb config property: 35 Property namePurpose hibernate.connection.driver_classjdbc driver class hibernate.connection.urljdbcURL hibernate.connection.usernamedatabase user hibernate.connection.passworddatabase user password hibernate.connection.pool_sizemaximum number of pooled connections Property namePurpose hibernate.connection.datasourcedatasource JNDI name hibernate.jndi.urlURL of the JNDI provider (optional) hibernate.jndi.class class of the JNDI InitialContextFactory (optional) hibernate.connection.usernamedatabase user (optional) hibernate.connection.passworddatabase user password (optional) A Hibernate a kapcsolatokat olykor a Jndi ből kéri el : A legfontosabb JDBC kapcsolatért felelős property-k:

36 Interfészek I.  Session  Könnyűsúlyú  A Hibernate viszonyok nem szálbiztosak !  SessionFactory  Nem könnyűsúlyú  Szálak között megosztva használható  Egy adatbázis/egy SessionFactory  A második szintű gyorstár itt található  Configuration interface  Konfigfájlok helye, ….  Transaction interface  Nem kötelező használni – az adatbázis tranzakcióit használja 36

37 Interfészek II.  Query, Criteria  HQL/SQL lekérdezések futtatása  Könnyűsúlyú  Callback interfaces  Lifecycle, Validate – CRUD műveletek  Extension  Primary key generator  Sql dialect  … 37

38 Alap konfiguráció  Menedzselt környezet  Gyűjteményez (adatbázis kapcsolat, …)  Jboss/GlassFish, …  Nem menedzselt környezet  Alap párhuzamosság kezelés (szál gyűjteményekkel)  Tomcat/Jetty 38

39 Types  Egy java típus egy vagy több oszlophoz rendel  Currency  Calendar  Byte[]  …  Saját típus  UserType  CompositeUserType 39

40 Alkalmazsáfejlesztés  Gazdag domain model  Csak a domainra vonatkozó kódot tartalmazza  Aggodalom/Gond csorgás  EJB interceptor  Transzparens perzisztencia  A kód független a perzisztencia típusától  Kollekciók az interfészből származzanak ne az implementációból  Argumentum nélküli konstruktor  POJO  Üzleti metódusok  Tulajdonságok  Automatizált perzisztencia 40

41 Követelmények  Transzparens perzisztencia  Nincs ősosztály, interfész követelmény  Bárhol felhasználható  POJO  Üzleti logika  Tulajdonságok  Kollekció típusok  A kollekció interfész szerint legyenek létrehozva (HashSet -> Set)  Kötelező az üres konstruktor  Java Bean elnevezési konvenciók 41

42 Alap tulajdonság és osztály leképezés  Sok default megoldás   Leszármaztatott értékek (csak select):  42

43 Tulajdonság kezelő stratégiák  Hozzáférő függvényen keresztül  Közvetlenül   Inster/Update kezelés  43

44 Elnevezési konvenciók  public class CENamingStrategy implements NamingStrategy {  public String classToTableName(String className) {  return tableName(  StringHelper.unqualify(className).toUpperCase() );  }  public String propertyToColumnName(String propertyName) {  return propertyName.toUpperCase();  }  public String tableName(String tableName) {  return "CE_" + tableName;  }  public String columnName(String columnName) {  return columnName;  }  public String propertyToTableName(String className,  String propertyName) {  return classToTableName(className) + '_' +  propertyToColumnName(propertyName);  } 44

45 Használata  Configuration cfg = new Configuration();  cfg.setNamingStrategy( new CENamingStrategy() );  SessionFactory sessionFactory =  cfg.configure().buildSessionFactory(); 45

46 Objektum identitás  Objektum azonosság  Objektum egyenlőség  Adatbázis egyenlőség  ...   Sok kulcs generáló megoldás  Sajátot is lehet írni 46

47 Objektum modellek  Több objektum mint tábla  Entitás  Érték  Komponensek 47

48 Származás leképezése  Minden osztálynak egy tábla  Egy tábla osztály hierarchiaként  Alosztályonként tábla 48

49 Asszociációk  Asszociáció  Egyirányú  Kétirányú  Szülő gyermek viszony  Láncolt műveletek 49

50 Perzisztencia 50

51 Perzisztencia menedzser  CRUD  Lekérdezés  Tranzakció  Gyorstár 51

52 Objektumok betöltése  Azonosító alapján  HQL  Kritérium alapján  Minta alapján 52

53 Betöltés  Azonnali  Laza/Lusta  Mohó  Kötegelt 53

54 Optimalizálás - Gyorstárak 54

55 Tranzakció  Adatbázis szintű  Alkalmazás szintű 55

56 A következő előadás tartalma 56  Alkalmazás keretrendszerek  J2EE  JNDI  RMI  EJB


Letölteni ppt "Programrendszerek Fejlesztése 14/4 1. A mai előadás tartalma 2  Perzisztencia  Object serialization API  ORM  Hibernate  Bevezetés  Architektúra."

Hasonló előadás


Google Hirdetések