Slide 1

Podobné dokumenty
enum

PowerPoint Presentation

DediĊnosť

Microsoft PowerPoint - OOP_prednaska_10.pptx

gis5 prifuk

PowerPoint Presentation

iot business hub whitepaper isdd_em_New.pdf

Objektovo orientované programovanie

História

Princípy tvorby softvéru Programovacie paradigmy

Katalóg služieb OTPdirekt-retail

GEODETICKÝ A KARTOGRAFICKÝ ÚSTAV BRATISLAVA Chlumeckého 4, Bratislava II Obsah 1. Export údajov ZBGIS do CAD formá

Identity Lifecycle Management

SAEAUT SNMP OPC Server

Úroveň strojového kódu procesor Intel Pentium Pamäťový operand Adresovanie pamäte Priama nepriama a indexovaná adresa Práca s jednorozmerným poľom Pra

7/1/2015 Úvod do databáz, skúškový test, max 25 bodov, 90 min

Úrad pre dohľad nad zdravotnou starostlivosťou Žellova 2, Bratislava Zoznam číselníkov používaných pre dátové rozhranie CKS pre zber údajov od

Slovenská technická univerzita v Bratislave

Microsoft Word - Priloha_1.docx

Microsoft PowerPoint - ITAPA07 Integracna platforma MF SR

Georeceive a Geoshopping

eKasa

Aktion.NEXT Novinky vo verzii 1.9

Integrácia Čo je SOA? Peter Rybár Daniel Buchta Jozef Sivek

Slovenská technická univerzita v Bratislave FAKULTA INFORMATIKY A INFORMAČNÝCH TECHNOLÓGIÍ Ilkovičova 3, Bratislava Tímový projekt Ponuka Grafi

Databázy (1) - Prednáška 03

Architektúra a návrh Zdôvodnenie navrhnutej architektúry Systém si architektonicky môžeme rozdeliť na viacero vrstiev. Najpodstatnejšie je oddelenie z

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY Informačný systém pre materské školy Bakalárska práca 2019 Monika Vlčková

EURÓPSKA KOMISIA V Bruseli C(2018) 6560 final ANNEX 1 PRÍLOHA k vyoknávaciemu rozhodnutiu Komisie, ktorým sa stanovuje metodika monitorov

User:Andrej Sedlacek

Microsoft PowerPoint - SLIDES_02DTD.ppt

Úvod do mobilného operačného systému ANDROID

eKasa

STRUČNÝ NÁVOD KU IP-COACHU

PowerPoint Presentation

midterm2014_1

INTERNET BANKING Ako zrealizovať hromadný prevod VŠETKO, ČO JE MOŽNÉ with.vub.sk, Bank of

Informačný systém pre externú časť a písomnú formu internej časti maturitnej skúšky Informačný systém pre EČ a PFIČ maturitnej skúšky Užívateľská prír

SK_mTransfer_Okamzita_notifikacia_ indd

Ness Technologies, Inc. Česká republika

Komunikácia deklarantských SW s IS CEP Bratislava OPIS je spolufinancovaný z ERDF

Microsoft Word - 11_Distribuované spracovanie dát nad MapReduce architektúrou _Hadoop a Hive_

MO_TČOZ_TLY_2018_2019

Microsoft Word - Manažment_tagov_tim24_tema12_2017.docx

s sol

Používateľská príručka Obsah Používateľská príručka... 1 Administrácia servera... 2 FTP... 2 Remote Desktop... 3 Administrácia databáze:... 3 Spusteni

Operačné systémy Prednáška č. 2 Windows 95 Windows 95 má povesť ľahko ovládateľného systému pre užívateľov a ťažkého systému pre programátorov. Začiat

Funkcionálne programovanie Cvičenie 9 Funkcionálne programovanie v Jave Sergej Chodarev 22. november 2017 Technická Univerzita v Košiciach

eKasa

Java a JEE Peter Girovský IBM

Identity Lifecycle Management

NSK Karta PDF

Snímka 1

MANUAL_PRE_UVODNU_PRACU_S_AIS

03_ControlFlow.dvi

0022-vub-mobilne-tokeny-200x200-v03.indd

Manuál aplikácie eoev

Portál VŠ a CEP

Microsoft Word Nextra_ADSLink.doc

Resolution

INTERNET BANKING Práca s tokenom VŠETKO, ČO JE MOŽNÉ with.vub.sk, Bank of

Pravidlá bezpečnosti pre majiteľov certifikátov certifikačnej autority DÔVERA zdravotná poisťovňa, a. s. Verzia 1.1 Platí od

portál scientia.sk

Tue Oct 3 22:05:51 CEST Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, kto

Používateľský manuál EZP

PowerPoint Presentation

Manažment v Tvorbe Softvéru 2018/2019

Databázy (1) - Prednáška 04

Microsoft Word - prirucka_katedry_nova

Úrad pre dohľad nad zdravotnou starostlivosťou Žellova 2, Bratislava Dátové rozhranie pre externý subjekt FR SR Strana 1 z 11 Dátové rozhranie

Finančné riaditeľstvo Slovenskej republiky 12/ORP/2019/IM Postup pre overenie pravosti pokladničného dokladu Informácia je určená pre subjekty (zákazn

Snímka 1

Výnimky

Návod na obsluhu CompactIO 1

Prezentácia programu PowerPoint

eKasa

Matej Kendera - PDF, word, lucene, java

Stravné - přecenění

Novinky v OpcDbGateway 5.0

Prezentácia programu PowerPoint

IT NEWS

Privátna zóna pre prevádzku Obsah Privátna zóna pre prevádzku 1 Obsah 1 Webová stránka 2 Úvodná stránka 2 Registrácia prevádzka/penzión

Ponuka Štart

13/1/2015 Úvod do databáz, skúškový test, max 25 bodov, 90 min 1. Daná je databáza (bez duplikátov a null hodnôt): capuje(krcma, Alkohol), lubi(pijan,

Cieľové požiadavky na vedomosti a zručnosti pri maturitnej skúške skupiny odborov 25 Informačné a komunikačné technológie Všeobecné - cieľové požiadav

Finančné riaditeľstvo Slovenskej republiky Testovacie scenáre

VSDC Free Video Editor stručný návod na používanie Link na sťahovanie softvéru: K prog

PowerPoint Presentation

Microsoft PowerPoint - Prog_p08.ppt

Prevádzka

Stravné - přecenění

Rozdeľovanie IT zákaziek UX Peter Kulich

7011

Kategória školenia Kurzy Project, Outlook obsahuje kurzy: Outlook základy Účastníci kurzu Outlook základy sa naučia využívať tento program na ov

Podpora metód operačného výskumu pri navrhovaní systému liniek doc. RNDr. Štefan PEŠKO, CSc. Katedra matematických metód, Fa

aplikácia do mobilého telefónu na stiahnutie digitálneho tachografu

5/1/2012 Úvod do databáz, skúškový test, max 25 bodov, 90 min 1. Daná je databáza: capuje(krcma, Alkohol, Cena), lubi(pijan, Alkohol) navstivil(idn, P

Centrum vedecko-technických informácií, Odbor pre hodnotenie vedy, Oddelenie pre hodnotenie publikačnej činnosti Vyhľadávanie a práca so záznamami - C

Ekon Supply of labour by John Pencavel

Prepis:

Vrstvy internetových a intranetových systémov RNDr. Ľubor Šešera, PhD. 1.10.2010

IS: Architektúra na báze vrstiev (1) Hlavný prístup k tvorbe inform. systémov (IS): Tvorba systému na báze vertikálnych vrstiev (Tiers vs. layers) Výhody vrstiev: Dekompozícia zložitosti systému Časti majú presne definované rozhrania Vrstvy môžu byť založené na štandardoch Zvyšujú opakovanú použiteľnosť Element na nižšej vrstve na viac. miestach vyššej vrstvy Umožňujú realizáciu rôznymi softvérovými prostriedkami Umožňujú prevádzku jednotlivých vrstvy na inom počítači Rozdelenie zodpovednosti vo vývojom tíme 2

IS: Architektúra na báze vrstiev (2) Nevýhody vrstiev: Nezapúzdrujú dobre všetky veci. Zmena v niektorej úrovni si niekedy vyžiada šírenie zmien. Môžu si vyžiadať netriviálne transformácie dát medzi vrstvami Tvorba vrstiev znižuje výkonnosť. 3

IS: Architektúra na báze vrstiev - história Do 90-tych rokov sa vrstvy v IS príliš nepoužívali V 90-tych rokoch: Systémy typu klient-server 2 vrstvy: klient a server Pozor: architekt. štýl klient-server je všeobecnejší Vyšlo z HW: PC v LAN a centrálny počítač Klient: graf. používateľský interfejs +aplikačný kód Server: relačná databáza Prostriedky: Visual Basic, Powerbuilder, Delphi,... Výhodné ak IS iba jednoduché zobrazovanie a jednoduchá aktualizácia dát aplikačný kód bol súčasťou obrazoviek problém spoločného kódu pre viacero obrazoviek a komplexnej business logiky 4

IS: Architektúra na báze vrstiev - história Objektovo-orientované programovanie prinieslo 3 vrstvovú architektúru model-view-controler v Smalltalku málo rozšírené, nie pre distrib. architektúru Skutočná zmena až nástupom internetu potreba využívania internetových prehliadačov je nákladné a zdĺhavé sťahovanie aplikačnej logiky z centra (+ bezpečnosť) preto sa aplikačná logika oddeľuje od prezentačnej časti a umiestňuje na server 5

IS: Architektúra na báze vrstiev - história Ďalšie faktory Bolestivá zmena existujúcich systémov z dôvodu prepletenia aplikačnej a prezentačnej vrstvy Ďalšie typy prezentačnej vrstvy, napríklad rozhrania pre mobilné zariadenia Jednoduchšia administrácia Na PC je iba internetový prehliadač Rozširovanie jazyka Java Nie je natoľko zviazaný s jazykom SQL a je vhodnejší pre vývoj aplikačnej logiky 6

Vrstvy moderných IS 1. Prezentačná vrstva Prístup používateľa k systému 2. Aplikačná vrstva Výpočtová časť systému 3. Dátová vrstva Trvalé (perzistentné) uchovávanie dát v databáze + Medzivrstvy 1.5 (Aplikačná) Servisná vrstva 2.5 Dátová servisná vrstva 7 (vrstva dátových služieb)

Vrstvy moderných IS Nie sú vrstvy abstrakcie, ale viacúrovňový architekt. štýl klient-server cmp 3.1-Vrstv y Prezentačná vrstva. Servisná vrstva. Aplikačná vrstva. Vrstva dátových služieb. Dátová vrstva. 8

Dôvody odčlen. prezentačnej vrstvy Používateľské rozhranie sa zvyčajne mení častejšie ako aplikačná logika Tie isté dáta zobrazovať rôznym spôsobom Rôzne časti prezentačnej vrstvy môžu využívať rovnaké funkcie aplikačnej vrstvy Rôzne technológie HTML versus Java Príklad rozdelenia prezentačná domén. vrstva Zobrazenie neplatičov červenou Aplikačná vrstva bool. funkcia: platič-neplatič Prezentačná vrstva farebné zobrazenie 9

Základné typy architektúr Jednoduchá PV spojená s AV, bez SV, jedn. DS Jedn. PV, jedn. AV, bez SV, jedn. DS Jedn. PV, jedn. AV, bez SV, komplexná DS Komplexná PV, jedn. AV, bez SV, komplexná DS Jednoduchá PV, komplex. AV, so SV, komplex. DS Komplexná PV, komplex. AV, so SV, komplex. DS 10

Fyzické vrstvy Internetový systém s tenkým klientom: dátová vrstva je na 1 HW serveri, AV a PV na inom HW serveri Internetový systém s poloťažkým klientom: PV je rozdelená medzi server a PC Internetový systém s oddeleným prezentačným a aplikačným serverom Intranetový systém s ťažkým klientom: PV je na PC Systém s rozdelenou aplikačnou vrstvou časť AV je v uložených procedúrach na DB serveri Systém so spoločným aplikačným a DB serverom 11

J2EE (1999) sada špecifikácií 1. Java Servlet, verzia 2.2 2. JavaServer Pages (JSP), verzia 1.1 3. Enterprise JavaBeans (EJB), verzia 1.1 4. Java Message Service (JMS), verzia 1.0.2 5. Java Naming and Directory Interface (JNDI), v. 1.2 6. JavaBeans Activation Framework (JAF), verzia 1.0 7. Java Transaction API (JTA), verzia 1.0.1 8. Java Transaction Service (JTS), verzia 0.95 9. Java Database Connectivity (JDBC), verzia 2.0 10.JavaMail API, verzia 1.1

J2EE / JEE Štandard J2EE bol priebežne (cca v trojročných intervaloch) aktualizovaný Najmä problémy so špecifikáciou EJB EJB 2.0 (2001) + lokálne volania metód EJB 3.0 (2006) zmena mapovania na relačné DB, pomocou Java Persistence API (JPA) Doplnenie ďalších špecifikácií, napr. Web Services for J2EE Využitie XML (JAXP a ďalšie) Novšia prezent. vrstva (Java Server Faces, JSF) (2006) nový názov Java EE verzia 5 (2009) JEE verzia 6 13

Základné architektúry v JEE 1. Implementácia bez EJB a bez JPA 2. Implementácia bez EJB a s ORM/JPA 3. Implementácia s EJB a s JPA 14

Architektúra v JEE bez EJB a bez JPA cmp 3.3 Vrstv y v JEE - alt. 1 «JSP,POJO» Prezentačná a aplikačná vrstva «JDBC» Vrstva dátových služieb. «SQL» Dátová vrstva 15

Architektúra v JEE bez EJB a s JPA cmp 3.3 Vrstv y v JEE - alt. 1 «JSF,JSP» Prezentačná vrstva «POJO» Aplikačná vrstva. «JPA» Vrstva dátových služieb «SQL» Dátová vrstva 16

Architektúra v JEE s EJB a s JPA cmp 3.5 Vrstv y v JEE - alt. 3 «JSF,JSP» Prezentačná vrstva «EJB» Aplikačná vrstva «SQL» Dátová vrstva «Session EJB» Servisná vrstva «Entity EJB» Doménová vrstva «JPA» Vrstva dátových služieb 17

Bankový systém príklad Jednoduchý príklad časti bankového systému účet klienta operácie s účtom: vklad, výber, prevod cez viacero kanálov: pokladník, call centrum, internet banking, mobil banking,... pri operáciách sa vyrubujú poplatky predpokladajme okamžite (nie dávkovo) pri operácii môže byť viacero poplatkov predpokladajme, že klient nemá balík služieb nad operatívnou úrovňou je metaúroveň typy účtov, operácií, poplatkov so vzájomnými vzťahmi sadzby poplatkov oddelené od typov poplatkov rôzne spôsoby výpočtu poplatkov fixný, percentuálny, percentuálny s ohraničením, hladinový,... neuvažujeme integráciu s inými systémami

Typ Uctu kod nazov TypPoplatku kod nazov TypOperacie iductu stavuctu Ucet idsadzby sposobvypoctu sadzba minsadzba maxsadzba sumaoperacieod sumaoperaciedo platnostod platnostdo SadzbaPoplatku idoperacie datum suma protiucet bankaprotiuctu Operacia. idpoplatku sumapoplatku Poplatok kodpoplatku * 1 * * kodoperacie * 1 idoperacie * 1 typuctu * 1 idsadzby * 1 * * iductu * 0..1

Aplikačná vrstva 20

Vzory pre aplikačnú a servisnú vrstvu Transakčný scenár procedurálny spôsob návrhu systému Doménový model objektovo orientovaný návrh systému Servisná vrstva Často dopĺňa Doménový model Rozhranie + špecifická a technická funkcionalita Príklad: Vytvorenie operácie vytvorenie inštancie operácie vypočítanie a zaznamenanie poplatkov

Transakčný scenár Procedúra, ktorá: 1. Preberie vstupy z prezentačnej vrstvy 2. Vykoná príslušné (netriviálne) kontroly a výpočty 3. Vyvolá vrstvu dátových služieb na získanie alebo uloženie dát 4. Výsledok vráti prezentačnej vrstve 22

Transakčný scenár Jeden Transakčný scenár pre každú akciu používateľa Zvyčajne tiež predstavuje jednu databázovú transakciu Odtiaľ názov vzoru Výhody: Priamočiara realizácia Nevýhody: Sklon k duplikovaniu kódu Horšia údržba a rozširovanie kódu 23

Transakčný scenár Prezentačná vrstva posiela transferový objekt (TO) Aplikačná vrstva Trieda transakčných scenárov pre Služby operácií Výpočet poplatkov funkcia využívaná viacerými transakčnými skriptami Vrstva dátových služieb napr. Brána k tabuľke obaľuje príkaz SELECT Príklad neskôr

Transakčný scenár class SluzbyOperacii { public vytvoroperaciu (TO toperacia) { try { ResultSet operacie = operaciatablegateway.vytvoroperaciu (TO toperacia); try { operacia.next(); Long idoperacie = operacia.getlong(1); String kodoperacie = toperacia.getkodoperacie(); BigDecimal sumaoperacie = toperacia.getsuma(); ResultSet typypoplatkov = typpoplatkutablegateway. najditypypoplatkov(kodoperacie); 25

Transakčný scenár while (typypoplatkov.next()) { String kodpoplatku = typypoplatkov.getstring ( kodpoplatku ); ResultSet vysledoksql = sadzbapoplatkutablegateway. najdisadzbu(kodpoplatku, new Date(),sumaOperacie); while (vysledoksql.next()) { Long idsadzby = new Long (vysledoksql.getlong(1)); String sposobvypoctu = vysledoksql.getstring(2); BigDecimal sadzba = vysledoksql.getbigdecimal(3);... BigDecimal vyskapoplatku = sluzbypoplatkov.vypocitajpoplatok ( sposobvypoctu, sadzba, minsadzba, ); poplatoktablegateway.vytvorpoplatok (idsadzby, ) } } } catch (SQLException e { }

Transakčný scenár public class SluzbyPoplatkov { public BigDecimal vypocitajpoplatok (SadzbaPoplatku sadzbapoplatku, BigDecimal sumaoperacie) { String sposobvypoctu = sadzbapoplatku.getsposobvypoctu(); BigDecimal sadzba = sadzbapoplatku.getsadzba(); BigDecimal minsadzba = sadzbapoplatku.getminsadzba(); BigDecimal maxsadzba = sadzbapoplatku.getmaxsadzba(); if (sposobvypoctu.equals( fixny )) { return sadzba; } else if (sposobvypoctu.equals( percentualny )) { return sumaoperacie.multiply(sadzba); 27

Transakčný scenár } } } else if (sposobvypoctu.equals( percentualnyohran )) { BigDecimal vyskapoplatku = sumaoperacie.multiply(sadzba); if (vyskapoplatku.compareto(minsadzba) < 0) { return minsadzba; } else if (vyskapoplatku.compareto(maxsadzba) > 0) { return maxsadzba; } else { return vyskapoplatku; } } 28

Doménový model Protipól Transakčného scenára Systém je štrukúrovaný dátovo Prirodzenejšie reprezentuje aplikačnú oblasť Transakčný scenár predstavuje viac algoritmický pohľad na realitu Lepšie podporuje rozširovateľnosť systému Dedenie, polymorfizmus, techniky návrhových vzorov 29

Doménový model Typy doménových modelov Jednoduchý podobný relačnému modelu Komplexný výrazne bohatší ako relačný model V minulosti: problém objektovo-relačného mapovača Tieto boli drahé (napr. TopLink) Viedlo k obchádzaniu ORM a následne k Transakčnému scenáru alebo Jednoduchému Doménovému modelu V súčasnosti nástroje ORM zdarma + JPA 30

Doménový model príklad TypUctu * * TypPoplatku kod nazov * * TypOperacie 1 kodpoplatku * SadzbaPoplatku idsadzby sposobvypoctu sadzba minsadzba maxsadzba sumaoperacieod sumaoperaciedo platnostod platnostdo 1 typuctu kod nazov 1 idsadzby * Ucet 1 kodoperacie * Operacia * Poplatok iducet stavuctu 0..1 iductu * idoperacie datum suma protiucet bankaprotiuctu 1 idoperacie * idpoplatku sumapoplatku

Doménový model príklad rozšíriteľnosť aj pre ďalšie operácie Operacia idoperacie datum suma protiucet bankaprotiuctu PrenajomBezpSchranky cisloschranky zacprenajmu koniecprenajmu poistnasuma

Doménový model príklad Rozšíriteľnosť sadzieb poplatkov Dedenie, polymorfizmus Rozšíriteľnosť spôsobu výpočtu poplatkov vzor Strategy

Doménový model príklad SadzbaPoplatku idsadzby sadzba sposobvypoctu platnostod sadzba platnostdo minsadzba maxsadzba vypocitajpoplatok() sumaoperacieod sumaoperaciedo platnostod platnostdo * PoplatokFixny 1 PoplatkovaFunkcia vypocitajpoplatok() PoplatokPercent PoplatokPercentOhraniceny vypocitajpoplatok() vypocitajpoplatok() vypocitajpoplatok() SadzbaPoplatkuOhranicena minsadzba maxsadzba vypocitajpoplatok() SadzbaPoplatkuHladinova sumaoperacieod sumaoperaciedo vypocitajpoplatok()

Organizácia výpočtu Funkčná dekompozícia je nahradená dátovou dekompozíciou s delegovaním zodpovednosti Pokladník Klient Operacia TypOperacie TypPoplatku SadzbaPoplatku PoplatkovaFunkcia vkladhotovosti vytvoroperaciu... vypocitajpoplatky... vypocitajpoplatok vypocitajpoplatok vypocitajpoplatok

Doménový model príklad public class Operacia { private TypOperacie typoperacie; private Set poplatky;... public TypOperacie gettypoperacie() { } public Set getpoplatky() { } public void vypocitajpoplatky() { gettypoperacie().vypocitajpoplatky(this); } public static void vytvoroperaciu(to operaciato) { Operacia operacia = new Operacia(operaciaTO); operacia.vypocitajpoplatky(); // uloženie zmeny objektu a jeho asoc. objektov do DB operacia.save(); } }

Doménový model príklad public class TypOperacie { public void vypocitajpoplatky(operacia operacia) { for (TypPoplatku typpoplatku : gettypypoplatkov()) { typpoplatku.vypocitajpoplatok(operacia); } } } public class TypPoplatku { public void vypocitajpoplatok(operacia operacia) { SadzbaPoplatku sadzbapoplatku = getaktualnasadzbapoplatku(operacia); sadzbapoplatku.vypocitajpoplatok(operacia); } }

Doménový model príklad public class SadzbaPoplatku { public void vypocitajpoplatok(operacia operacia) { BigDecimal sumapoplatku = getpoplatkovafunkcia().vypocitajpoplatok (this, operacia.getsuma()) Poplatok poplatok = new Poplatok(this, sumapoplatku); operacia.addpoplatok(poplatok); } }

Doménový model príklad interface PoplatkovaFunkcia { public vypocitajpoplatok (SadzbaPoplatku sadzbapoplatku, BigDecimal sumaoperacie); } class PoplatokFixny implements PoplatkovaFunkcia { public vypocitajpoplatok(sadzbapoplatku sadzbapoplatku, BigDecimal sumaoperacie) { return sadzbapoplatku.getsadzba(); } } class PoplatokPercentualny implements PoplatkovaFunkcia { public vypocitajpoplatok (SadzbaPoplatku sadzbapoplatku, BigDecimal sumaoperacie) { BigDecimal percent = sadzbapoplatku.getsadzba(); return sumaoperacie.multiply(percent); } }

Doménový model príklad class PoplatokPercentualnyOhraniceny implements PoplatkovaFunkcia { public vypocitajpoplatok(sadzbapoplatku sadzbapoplatku, BigDecimal sumaoperacie) { BigDecimal percent = sadzbapoplatku.getsadzba(); BigDecimal minsadzba = sadzbapoplatku.getminsadzba(); BigDecimal maxsadzba = sadzbapoplatku.getmaxsadzba(); BigDecimal vyskapoplatku = sumaoperacie.multiply(percent); if (vyskapoplatku.compareto(minsadzba) < 0) return minsadzba; else if (vyskapoplatku.compareto(maxsadzba) > 0) return maxsadzba; else return vyskapoplatku; } }

Servisná vrstva Doménový model by mal obsahovať doménové objekty a pravidlá týkajúce sa príslušnej oblasti Množstvo kódu, ktoré sú špecifické pre príslušý systém: Use cases, workflow a integráciu s inými syst. Plus technický kód samotnej aplikácie riadenie transakcií, auditovanie, autentifikáciu, Znižuje opakovanú použiteľnosť 41

Úlohy Servisnej vrstvy Odčleňuje špecifickú logiku od všeobecnej doménovej logiky Obsahuje technický kód, napríklad pre riadenie transakcií Rozhranie aplikačnej vrstvy vo forme Fasády Zapúzdruje elementy a umožňuje ich opakované použitie Uľahčuje integráciu systémov Napr. Zabalenie do webovej služby 42

Typy Servisnej vrstvy 1. Fasáda doménového modelu = tenká Fasáda Doménového modelu 2. Operačný scenár obsahuje aj implementáciu aplikačnej logiky Zvyčajne nie samostatná vrstva, ale podvrstva aplikačnej vrstvy 43

Typy Servisnej vrstvy cmp 3.9 Operačný scenár Aplikačná vrstva.. Prezentačná vrstva. Servisná vrstva. Doménová vrstva. Vrstva dátových služieb. Dátová vrstva. 44

Spôsob realizácie v JEE @Remote public interface OperaciaSluzby { void vytvoroperaciu (TO operaciato) ; } 45

Spôsob realizácie v JEE @Stateless public class OperacieServiceBean implements OperacieService { @PersistenceContext private EntityManager entitymanager; public void vytvoroperaciu (TO operaciato) { try { Operacia operacia = new Operacia (operaciato); operacia.vypocitajpoplatky();... entitymanager.persist (operacia); if (operacia.getucet().issmsnotificationenabled()) { getsmsservice().sendsms (operacia.createnotificationsms()); } } catch (Exception ex) { throw new EJBException (ex.getmessage()); } } } 46

Servisná vrstva Výhody prispieva k rozšíriteľnosti a znovupoužiteľnosti doménová vrstva väčšia šanca znovupoužiteľnosti servisná vrstva špecifický kód (malá znovupoužiteľnosť) Nevýhody oddelenie vrstiev je intelektuálne náročné extrém: doménová vrstva iba atribúty a aplikačná funkcionalita je v servisnej vrstve

Vrstva dátových služieb 48

Odlišnosti OO modelu a R-modelu Tradič. dátový zdroj relačná databáza objektový a relačný svet štruktúrujú dáta rôznym spôsobom Hlavné rozdiely OO a RDB modelu 1. Spájanie súvisiacich dát: Komplexné objekty. RDB iba n-tice (záznamy) a z nich multimnožiny (tabuľky) OO model aj zoznamy (list), polia,... OO komplexné objekty je možné skladať

Odlišnosti OO modelu a R-modelu Identita objektov. RDB: záznam je určený svojím primárnym kľúčom) OO model: objekt má identifikátor 2. Spájanie dát s funkciami Zapúzdrenie dát RDB: procedúry pristupujú priamo k dátovým štruktúram (databázovým tabuľkám) OO model: ukrývanie dát Zmena vnútornej dátovej štruktúry tak štatisticky zasiahne iba menšiu časť kódu

Odlišnosti OO modelu a R-modelu Typy objektov RDB: preddefinovaná množina atomických typov čísla, bitové a znakové reťazce, dátum a čas Komplexné objekty, t. j. záznamy sú beztypové -> run-time chyby OO model: deklarácia typov aj pre komplexné objekty Rozšíriteľnosť základných typov RDB: tabuľka je zabudovaná štruktúra údajov s pevnou množinou príkazov OO model: vývojár si definuje vlastné typy spolu s operáciami

Odlišnosti OO modelu a R-modelu Dedenie RDB: nie OO model: možná hierarchia typov s dedením atribútov a metód Polymorfizmus RDB: nie OO model: prekrývanie + inkluzívny polymorfizmus Inkluzívny polym. = všade tam, kde sa vyžaduje objekt nadtypu je možné použiť objekt podtypu

Odlišnosti OO modelu a R-modelu 3. Manipulácia s dátami Sekvenčný verzus množinový prístup RDB: množinové operácia (SQL) Spájanie dát: operácia Table join OO model: sekvenčný prístup Spájanie dát: operácia navigácie (prechádzanie cez smerníky) Otázka: OO dopytovacieho jazyka napr. JPQL

Kategórie vzorov (Fowler) 1. Architektonické vzory dátových služieb Stanovujú základný spôsob komunikácie aplikačnej a dátovej vrstvy 2. Štrukturálne vzory pre ORM Spôsob mapovania špecifických OO čŕt Asociácie, dedenie,... Vynecháme v tejto prednáške 3. Vzory správania pre ORM Spôsob, ako sa objekty čítajú z databázy a ukladajú do databázy Vynecháme v tejto prednáške

Archit. vzory vrstvy dátových služieb Alternatívy Brána do tabuľky (Table Data Gateway) Brána do riadku tabuľky (Row Data Gateway) Vynecháme v prednáške Aktívny záznam (Active Record) Vynecháme v prednáške Prostriedok pre objektovo-relačné mapovanie (Object-Relational Mapper, ORM) 55

Použitie JDBC JDBC = rozhranie jazyka Java na relačné databázy Príkazy sú nezávislé od konkrétneho výrobcu RDBMS Služby: Oracle, MS SQL Server, DB2, MySQL a iné Vytvorenie spojenia (connection) na RDB Odoslanie SQL príkazu INSERT, UPDATE, DELETE,... Spracovanie výsledku SQL príkazu JDBC Result Set + kurzor 56

Brána do tabuľky Objekt vo vrstve dátových služieb, ktorý zapúzdruje všetok prístup k jednej DB tabuľke Jeden objekt slúži pre všetky záznamy tabuľky, s ktorými sa pracuje Úlohy: Zapúzdriť operácie SELECT, INSERT, UPDATE, DELETE Dosadiť do SQL príkazu potrebné argumenty Vyvolať vykonanie SQL príkazu Vrátiť výsledok (v tvare ResultSet) 57

Brána do tabuľky - príklad public class SadzbaPoplatkuTableGateway { private static final String sadzbapoplatkuselect = SELECT + STLPCE + FROM SadzbyPoplatkov + WHERE kodpoplatku =? + AND? >= platnostod AND? <= platnostdo + AND (sumaoperacieod IS NULL OR sumaoperacieod <=?) + AND (sumaoperaciedo IS NULL OR sumaoperaciedo >?) ; private static final String STLPCE = idsadzby, sposobvypoctu, sadzba, platnostod, + platnostdo, minsadzba, maxsadzba, + sumaoperacieod,sumaoperaciedo ; 58

Brána do tabuľky príklad (pokr.) public static ResultSet najdisadzbu (String kodpoplatku, Date datum, BigDecimal sumaoperacie) { Connection dbconnection = DriverManager.getConnection( ); PreparedStatement prikaz = dbconnection.preparestatement(sadzbapoplatkuselect); prikaz.setstring(1, kodpoplatku); prikaz.setdate(2, datum); prikaz.setdate(3, datum); prikaz.setbigdecimal(4, sumaoperacie); prikaz.setbigdecimal(5, sumaoperacie); ResultSet vysledok = prikaz.executequery(); return vysledok; } 59

Brána do tabuľky príklad (pokr.) ResultSet vysledoksql = sadzbapoplatkutablegateway.najdisadzbu( kodpoplatku, new Date(), sumaoperacie); while (vysledoksql.next()) { Long idsadzby = new Long (vysledoksql.getlong(1)); String sposobvypoctu = vysledoksql.getstring(2); BigDecimal sadzba = vysledoksql.getbigdecimal(3); BigDecimal minsadzba = vysledoksql.getbigdecimal(4); BigDecimal maxsadzba = vysledoksql.getbigdecimal(5);... BigDecimal vyskapoplatku = sluzbypoplatkov.vypocitajpoplatok (sposobvypoctu, sadzba, minsadzba, maxsadzba, sumaoperacie); 60

Prostriedok pre ORM RDB a OO model: podobnosť aj odlišnosť Podobné: Trieda Tabuľka, Atribút Stĺpec Odlišné Identifikácia objektov, komplexné objekty, dedenie,... Prostriedok pre ORM Umožňuje deklaratívne (meta-jazyk) definovať určité transformácie OO modelu do RDB 61

História ORM Najprv samostatné nástroje TopLink pre Smalltalk (The Object People) TopLink pre Java (1996-1998) Od roku 2002 patrí firme Oracle Hibernate (2001, open source) JBoss Red Hat Súčasť aplikačných serverov: EJB 1.x a 2.x - vlastný mechanizmus mapovania OO na RDB (ťažkopádny) EJB 3.0 obsahuje JPA (Java Persistence API) Vychádza z Hibernate a TopLink 62

Automatický ORM Vstupom je súbor pre metadátové mapovanie, ktorý špecifikuje, ako sa jednotlivé atribúty tried mapujú na jednotlivé stĺpce DB tabuliek. Súbor = tzv. Deployment descriptor (orm.xml) 63

Deployment descriptor v JPA <entity-mappings version= 2.0 > <persistence-unit-metadata> <persistence-unit-defaults> <schema>bankovypriklad</schema> </persistence-unit-defaults> </persistence-unit-metadata> 64

Deployment descriptor v JPA <named-native-query name= sadzbapoplatkuselect > <query> SELECT idsadzby, sposobvypoctu, sadzba, platnostod, platnostdo, minsadzba, maxsadzba, sumaoperacieod,sumaoperaciedo FROM SadzbyPoplatkov WHERE kodpoplatku =? AND? >= platnostod AND? <= platnostdo AND (sumaoperacieod IS NULL OR sumaoperacieod <=?) AND (sumaoperaciedo IS NULL OR sumaoperaciedo >?) </query> </named-native-query> 65

Deployment descriptor v JPA <entity name= SadzbaPoplatku class= SadzbaPoplatku > <table name= SadzbyPoplatkov /> <attributes> <id name= idsadzby > <column name= idsadzby > </id> <basic name= sposobvypoctu > <column name= sposobvypoctu > </basic> <basic name= sadzba > <column name= sadzba > </basic> <basic name= platnostod > <column name= platnostod > </basic>... </attributes> </entity> </entity-mappings> 66

Anotácie v JPA (pre atribúty) @Entity @Table (name= SadzbyPoplatkov ) public class SadzbaPoplatku { @Id @Column (name= idsadzby ) public Long idsadzby; @Column (name= sposobvypoctu ) String sposobvypoctu; } @Column (name= sadzba ) BigDecimal sadzba;... 67

Anotácie v JPA (pre atribúty) +defaults @Entity public class SadzbaPoplatku { @Id public Long idsadzby; String sposobvypoctu; BigDecimal sadzba; BigDecimal minsadzba; BigDecimal maxsadzba; BigDecimal sumaoperacieod; BigDecimal sumaoperaciedo; Date platnostod; Date platnostdo;... } 68

Anotácie v JPA (pre get metódy) @Entity @Table (name= Ucet ) public class Ucet { private String iductu; private String stavuctu;... @Id @Column (name= idsadzby ) public String getiductu() {return iductu;} public void setiductu (String iductu) {this.iductu = iductu;} } @Column (name= stavuctu ) public String getstavuctu() {return stavuctu;} public void setstavuctu (String stavuctu) {this.stavuctu = stavuctu;} 69

Anotácie vs. Deployment descriptor Výhody anotácií Všetko na jednom mieste (pri malých modeloch) Kontroly pri kompilácii Nevýhody anotácií Drôtovanie schémy DB do aplikačného kódu Zneprehľadňuje kód (pri väčších modeloch) Rekompilácia pri zmenách 70

JPA EntityManager ORM zabezpečuje objekt typu EntityManager public void persist (Object entity) uloží objekt do databázy a zoberie ho do svojej správy; public <T> T merge (T entity) pridá existujúci objekt medzi objekty, ktoré spravuje daný EntityManager a následne tak zabezpečí jeho zápis do databázy; public void remove (Object entity) vymaže objekt z databázy; public void refresh (Object entity) obnoví objekt hodnotami z databázy; 71

JPA EntityManager public <T> T find (Class<T> entityclass, Object primarykey) vyhľadá objekt v databáze podľa primárneho kľúča; public Query createquery (String jpqlstring) vytvorí dynamický dopyt v tvare JPQL; public Query createnamedquery (String name) vytvorí inštanciu dopytu na základe definovaného pomenovaného dopytu; public Query createnativequery (String sqlstring) vytvorí dynamický dopyt v tvare SQL; 72

JPA EntityManager Neobsahuje metódu update Ak je objekt v správe, EntityManager dokáže automaticky rozpoznať, že sa objekt zmenil a pred ukončením transakcie aktualizovať zodpovedajúci záznam v databáze 73

JPA príklady Vytvorenie účtu: Ucet ucet = new Ucet(); ucet.setiductu ( 1234567890 ); ucet.setstavuctu ( otvoreny ); entitymanager.persist (ucet); Vyhľadanie podľa primárneho kľúča: String cislouctu = 1234567890 ; Ucet ucet = entitymanager.find (Ucet.class, cislouctu); Vymazanie účtu: entitymanager.remove (ucet); entitymanager.remove (entitymanager.merge(ucet)); Ak nie je v správe 74

Dátová navigácia a OO dopyty RDB poskytujú SQL OO dopyt Využitie bohatých vlastností SQL plus Kolekcia typov. objektov vs. množina záznamov Získavanie asociovaných objektov navigáciou (bodková notácia) V histórii viac pokus o OO dopytovací jazyk Nedosiahli rozšírenosť SQL JPA: Jazyk JPQL (Java Persistence Query Language) 75

JPQL Plne objektovo orientovaný dopytovací jazyk Na rozdiel od JDBC: dopyt nie je znakový reťazec, ktorému rozumie iba RDBMS, ale veta v jazyku, ktorej rozumie procesor dopytov => kontroly Príklad dopytu s navigáciou: Poplatky k danému účtu SELECT p FROM Poplatok p WHERE p.operacia.ucet LIKE?1 76