Programrendszerek Fejleszt - PowerPoint PPT Presentation

1 / 56
About This Presentation
Title:

Programrendszerek Fejleszt

Description:

Title: Fejlett Programoz si Technik k 2. Author: Vanda Last modified by: Vili Created Date: 2/1/2002 7:50:30 PM Document presentation format: Diavet t s a ... – PowerPoint PPT presentation

Number of Views:50
Avg rating:3.0/5.0
Slides: 57
Provided by: Van9158
Category:

less

Transcript and Presenter's Notes

Title: Programrendszerek Fejleszt


1
Programrendszerek Fejlesztése
  • 14/4

2
A mai eloadás tartalma
  • Perzisztencia
  • Object serialization API
  • ORM
  • Hibernate
  • Bevezetés
  • Architektúra
  • Hello world
  • Java File
  • Mapping file
  • Muveletek
  • 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épszeruek, kiforratlanok, nincs komplett
    implementáció
  • Relációs adatbázisba
  • Nagyon macerás a leképezés/átkonvertálás

4
Perzisztencia megvalósítása
  • Közös bázisosztály
  • Közös tulajdonságok egybegyujtése
  • Magunknak kell megírni a muveleteket
  • 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

5
Object serialization API
  • Sokszor ez is megfelelo 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 megorzi
  • Hierarchiák is menthetoek vele (fa,gráf, körkörös
    hivatkozások)
  • Elmentés Visszaolvasás

6
Egy összetettebb példa
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 ido mint kézzel
    megírni
  • Egy ORM megoldás 4 része
  • API az objektumok CRUD (create/read/update/delete)
    muveleteire
  • Lekérdezo nyelv/API az osztályokra és azok
    adattagjaira vonatkozóan
  • A leképezések definiálására egy keretrendszer
  • Piszkos adatok ellenorzése,laza kapcsolatok
    felderítése, egyéb optimalizáló funkciók
    megvalósítása

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önnyusú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 idoben generálódik
  • Az objektumok gyorstárazva vannak

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

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 egyezoségét?
  • Hogyan muködik együtt az ORM az üzelti logikával
    futási idoben?
  • Mi az objektum életciklusa?
  • Milyen aggregáló és rendezo megoldásokat
    biztosít?
  • Hogyan kezeljük az asszociációkat?
  • Tranzakciók, párhuzamosság?
  • Gyorsítótárazás?

11
ORM elonyök
  • Fejlesztési ciklus
  • Karbantarthatóság
  • Sebesség
  • Gyártó függetlenség

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öklodést, polimorfizmust,
  • kompozíciót, kollekciót

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 kezelheto
  • EJB 2.1
  • Objektum orientált adatbázisok
  • ODMG - Nem népszeruek, kiforratlanok, nincs
    komplett implementáció

14
Paradigma ütközés/Granularitás
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

16
Öröklodés/Polimorfizmus
  • Hogyan tároljuk le?
  • Polimorfikus lekérdezés?

17
Azonosítás
  • Java
  • Referencia szerint ()
  • Érték szerint (Equals())
  • SQL
  • Elsodleges kulcs
  • Mi legyen az? Név? Független kulcs?

18
Viszonyok
  • Java
  • MM
  • SQL
  • 1M
  • 11

19
Navigáció
  • Navigáció?
  • Java egzakt
  • Obejktum gráf bejárás x.d.g.getZ()
  • SQL tetszoleges
  • N1 select problémája
  • Minimalizálni kell a kérések számát join
  • Elore kell tudnunk mit akarunk lekérni
  • User
  • User join Billing details

20
Az eltérés ára
  • 30 a programozó idejébol
  • 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

21
Architektúra
22
Architektúra
23
Architektúra
24
Fogalmak
  • SessionFactory (net.sf.hibernate.SessionFactory)
    Egy tárolóhely a lefordított mappingek részére.
    Innen érheto el a Session és a ConectionProvider.
    Tartalmazhat egy másod-szintu 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
    életu objektum, ami egy kapcsolatot reprezentál a
    tároló és az applikáció között, Magába foglal egy
    JDBC kapcsolatot. Innen kérhetoek el a tranzakció
    objetumok. Egy elsoszintu 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 életu
    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.

25
Fogalmak
  • Tranzakció (net.sf.hibernate.Transaction) Rövid
    életu objektum ami egy atomi egységet valósít meg
    (tehát vagy teljesül az összes muvelet 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.Co
    nnectionProvider) Innen kérhetjük el a JDBC
    kapcsolatokat (itt a kapcsolatok tárolódnak is).
    Leválasztja az alkalmazást az alsóbb rétegektol
    (DataSource, DriverManager). A fejleszto által
    implementálható.
  • TransactionFactory (net.sf.hibernate.TransactionFa
    ctory) Itt kérhetjük el a tranzakció
    objektumokat. A fejleszto által implementálható.

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.

27
Hello World Java osztály
  • Id ? Elsodleges 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 eroszakos)
  • 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ó
29
Hello World fo applikáció
30
Hello World fo applikáció
31
Hello World hibernate.cfg.xml
32
Hello World hibernate.cfg.xml
33
A hibernate konfigurálása
  • Mivel sok a változó azért széles a config
    paraméterlista
  • A hibernate.propertiesbol sok ötletet
    meríthetünk.
  • 2 lehetosé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 gyujtve 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().buildSessionFacto
    ry()
  • Több konfig file-t is létrehozhatunk, majd késobb
    dinamikusan válogathatunk köztük
  • SessionFactory sf new Configuration().configure(
    "/my/package/catdb.cfg.xml") .buildSessionFactory(
    )

34
Példák programból történo konfigurációra
  • Egy mappinf file regisztrálása
  • Configuration cfg new Configuration().addResourc
    e("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)

35
Néhány egyéb config property
A legfontosabb JDBC kapcsolatért felelos
property-k
Property name Purpose
hibernate.connection.driver_ classjdbc driver class
hibernate.connection.url jdbcURL
hibernate.connection.username database user
hibernate.connection.password database user password
hibernate.connection.pool_size maximum number of pooled connections
A Hibernate a kapcsolatokat olykor a Jndi bol
kéri el
Property name Purpose
hibernate.connection.datasource datasource JNDI name
hibernate.jndi.url URL of the JNDI provider (optional)
hibernate.jndi.class class of the JNDI InitialContextFactory (optional)
hibernate.connection.username database user (optional)
hibernate.connection.password database user password (optional)
36
Interfészek I.
  • Session
  • Könnyusúlyú
  • A Hibernate viszonyok nem szálbiztosak !
  • SessionFactory
  • Nem könnyusúlyú
  • Szálak között megosztva használható
  • Egy adatbázis/egy SessionFactory
  • A második szintu gyorstár itt található
  • Configuration interface
  • Konfigfájlok helye, .
  • Transaction interface
  • Nem kötelezo használni az adatbázis
    tranzakcióit használja

37
Interfészek II.
  • Query, Criteria
  • HQL/SQL lekérdezések futtatása
  • Könnyusúlyú
  • Callback interfaces
  • Lifecycle, Validate CRUD muveletek
  • Extension
  • Primary key generator
  • Sql dialect

38
Alap konfiguráció
  • Menedzselt környezet
  • Gyujteményez (adatbázis kapcsolat, )
  • Jboss/GlassFish,
  • Nem menedzselt környezet
  • Alap párhuzamosság kezelés (szál gyujteményekkel)
  • Tomcat/Jetty

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

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észbol származzanak ne az
    implementációból
  • Argumentum nélküli konstruktor
  • POJO
  • Üzleti metódusok
  • Tulajdonságok
  • Automatizált perzisztencia

41
Követelmények
  • Transzparens perzisztencia
  • Nincs ososztá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 -gt Set)
  • Kötelezo az üres konstruktor
  • Java Bean elnevezési konvenciók

42
Alap tulajdonság és osztály leképezés
  • Sok default megoldás
  • ltproperty name"description" column"DESCRIPTION"
    type"string"/gt
  • ltproperty name"description" column"DESCRIPTION"/
    gt
  • Leszármaztatott értékek (csak select)
  • ltproperty name"totalIncludingTax"
  • formula"TOTAL TAX_RATE TOTAL"
  • type"big_decimal"/gt
  • ltproperty
  • name"averageBidAmount"
  • formula"( select AVG(b.AMOUNT) from BID b
  • ?where b.ITEM_ID ITEM_ID )"
  • type"big_decimal"/gt

43
Tulajdonság kezelo stratégiák
  • Hozzáféro függvényen keresztül
  • Közvetlenül
  • ltproperty name"name"
  • column"NAME"
  • type"string"
  • access"field"/gt
  • Inster/Update kezelés
  • ltproperty name"name"
  • column"NAME"
  • type"string"
  • insert"false"
  • update"false"/gt

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)

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

46
Objektum identitás
  • Objektum azonosság
  • Objektum egyenloség
  • Adatbázis egyenloség
  • ltclass name"Category" table"CATEGORY"gt
  • ltid name"id" column"CATEGORY_ID" type"long"gt
  • ltgenerator class"native"/gt
  • lt/idgt
  • ...
  • lt/classgt
  • Sok kulcs generáló megoldás
  • Sajátot is lehet írni

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

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

49
Asszociációk
  • Asszociáció
  • Egyirányú
  • Kétirányú
  • Szülo gyermek viszony
  • Láncolt muveletek

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

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

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

54
Optimalizálás - Gyorstárak
55
Tranzakció
  • Adatbázis szintu
  • Alkalmazás szintu

56
A következo eloadás tartalma
  • Alkalmazás keretrendszerek
  • J2EE
  • JNDI
  • RMI
  • EJB
Write a Comment
User Comments (0)
About PowerShow.com