VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA

Slides:



Advertisements
Podobné prezentace
Tabulkový procesor Práce se souborem – otevření, tvorba a použití šablony, tisk, propojení tabulky Excel s Wordem, nastavení Excelu, uložení Autorem materiálu.
Advertisements

Téma: Využití Accessu pro tvorbu evidence našeho podnikání Vypracovala: Jana Wasserbauerová.
Úhel Převody jednotek velikosti úhlů Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Radomír Macháň. Dostupné z Metodického portálu.
Inf Používání a tvorba databází. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
Výukový materiál zpracovaný v rámci projektu EU peníze školám Registrační číslo projektu:CZ.1.07/1.4.00/ Šablona:III/2 Inovace a zkvalitnění výuky.
Období vzniku: duben _inovace_FG.9.48 Autor : Vladimír TesaříkČlověk a svět práce, finanční gramotnost, nové auto.
ELEKTRONICKÉ ZABEZPEČOVACÍ SYSTÉMY. Název projektu: Nové ICT rozvíjí matematické a odborné kompetence Číslo projektu: CZ.1.07/1.5.00/ Název školy:
Warez scéna, crack. Warez, co to je? Warez je termín počítačového slangu označující autorská díla, se kterými je nakládáno nelegálně, zejména v rozporu.
K OMUNIKACE VERBÁLNÍ A NEVERBÁLNÍ Zpracovala: Mgr. Kateřina Holá Speciální základní škola, Česká Kamenice, Jakubské nám. 113, příspěvková organizace.
Vypracováno kolektivem autorů České společnosti pro technickou normalizaci Úřad pro technickou normalizaci, metrologii a státní zkušebnictví
Publicita v projektech financovaných z ESF v rámci Operačního programu Lidské zdroje a zaměstnanost Seminář pro žadatele.
Inf Tabulkový procesor - funkce. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
NÁZEV ŠKOLY: Masarykova základní škola a mateřská škola Melč, okres Opava, příspěvková organizace ČÍSLO PROJEKTU:CZ.1.07/1.4.00/ AUTOR:Mgr. Vladimír.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o, Orlová Lutyně AUTOR: Ing. Oldřich Vavříček NÁZEV: Podpora výuky v technických oborech TEMA: Základy elektrotechniky.
IP adresace (IPv4) Velikost a určení IP adresy I. Epocha (dělení na třídy) II. Epocha (zavedení masky) Speciální adresy Příklady a řešení IP adres Souhrn.
Petr Kielar Seminář o stavebním spoření Část VI: Podmínka rovnováhy a SKLV.
NÁZEV ŠKOLY: ZŠ J. E. Purkyně Libochovice AUTOR: RNDr. Adéla Lipšová NÁZEV: VY_52_INOVACE_23_BEZPEČNOST PRÁCE TÉMA: BEZPEČNOST PRÁCE ČÍSLO PROJEKTU: CZ.1.07/1.4.00/
Příjezd k místu dopravní nehody a ustavení vozidel STČ 08/IZS.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_242_TÉMA_ Doklady a evidence Název školy Masarykova střední škola zemědělská a Vyšší.
Software Licence a distribuce Karel Nymsa Dotkněte se inovací CZ.1.07/1.3.00/
Databáze © Mgr. Petr Loskot
Microsoft Excel verze 2010 Mgr. Přemysl Kejzlar.
Seminář o stavebním spoření
Základy automatického řízení 1
Systémové databáze v SQL Serveru
ZÁKLADY ÚČETNICTVÍ A PODVOJNÝ ZÁPIS
Internet.
Název projektu: Drogové závislosti - násilníci a oběti Bc
Evaluace předmětů studenty (Anketky)
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Výukový materiál zpracován v rámci projektu
INTERNET Číslo projektu CZ.1.07/1.5.00/ Název školy
Název projektu: Moderní výuka s využitím ICT
Programování v jazyce C++
Financováno z ESF a státního rozpočtu ČR.
Zkušenosti s nasazením J2EE aplikací na AS GlassFish
METODICKÝ LIST PRO ZŠ Pro zpracování vzdělávacích materiálů (VM)v rámci projektu EU peníze školám Operační program Vzdělávání pro konkurenceschopnost   
8.1 Aritmetické vektory.
Číslo projektu Číslo materiálu název školy Autor Tématický celek
Znakový jazyk Znakovaná čeština
Základní jednorozměrné geometrické útvary
Procvičení vzorců a funkcí v rámci jednoho i více listů
Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,
Název: Práce s tabulátory Autor: Hokr Jan
Souběh Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Schvalovací proces + hodnoticí kritéria
Vykazování postupu nebo stavu
Kvadratické nerovnice
Obchodní akademie, Střední odborná škola a Jazyková škola s právem státní jazykové zkoušky, Hradec Králové Autor: Mgr. Martina Slánská Kalhousová Název.
Stavební fakulta ČVUT, B407
Informatika pro ekonomy přednáška 8
Číslo projektu školy CZ.1.07/1.5.00/
Škola: Základní škola Trávníky Otrokovice, příspěvková organizace
Stahování eBooks ~ Podrobný průvodce prvním stahováním
© 2012 STÁTNÍ ÚSTAV PRO KONTROLU LÉČIV
Základy účetnictví změny rozvahových položek
Microsoft Office Access
Materiál byl vytvořen v rámci projektu
1.
Remote login.
Teorie chyb a vyrovnávací počet 1
A5M33IZS – Informační a znalostní systémy
Procenta kolem nás Jednoduché úrokování VY_42_INOVACE_34_01.
Věcné učení První pomoc
Informatika pro ekonomy přednáška 8
Informatika – Základní operace s buňkami
Seminář o stavebním spoření
Seminář o stavebním spoření
Hromadné dokumenty opakující se pro kolekci osob
Kód materiálu: VY_32_INOVACE_09_DEN_ZEME Název materiálu: Den Země
Transkript prezentace:

VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage Část 9.

Transakce Jedna či více operací s jasným začátkem a koncem Jednotka práce (unit of work) Operace v transakci musí být provedeny všechny, aby byl úkol splněn Selhání jedné operace je ekvivalentní selhání všech operací Příklad: Převod peněz z jednoho účtu na druhý Dvě základní operace: výběr ze zdrojového účtu a vklad na cílový účet Musí dojít k oběma operacím, aby se mohla transakce považovat za dokonanou Úvod atomičnosti

Transakce Na konci transakce musí být systém konzistentní Za předpokladu konzistence na začátku, samozřejmě Součet vkladů na zdrojovém a cílovém účtu musí být stejný před i po provedení převodu Neprovedení jedné z operací by narušilo tento "zákon zachování" "Zákony zachování" = Invarianty (constraints) Invarianty nesmí mít narušeny V případě selhání nějaké operace v transakci se musí "zamést" již provedené změny Úvod konzistence a invariantů

Transakce Provádění transakce nesmí být rušeno souběžnými transakcemi Převod peněz na účet nesmí být ovlivněn souběžně probíhajícím převodem na stejný účet. Výsledný efekt musí být stejný, jako kdyby tyto dvě transakce byly provedeny za sebou v libovolném pořadí Změny prováděné jednou transakcí nejsou viditelné v jiných transakcích Úvod izolace transakcí

Transakce Změny provedené úspěšnou transakcí musí být trvalé I když dojde k výpadku elektrické energie, po re- startu systému musí být změny zachovány Během převodu peníze visí jaksi ve vzduchu. Po této choulostivé operaci jsou data (peníze) zpět v perzistentním úložišti. Úvod trvanlivosti transakcí

ACID vlastnosti transakcí Atomicity Jednotka práce je nedělitelná – buď se provede celá, nebo vůbec Consistency "Zákony zachování" v systému zůstávají po transakci zachovány Isolation Souběžné transakce se vzájemně neovlivňují Durability Změny provedené úspěšnou transakcí jsou trvalé

Commit vs. Rollback Commit Rollback Potvrzení změn provedených transakcí Může být voláno Explicitně aplikací – např. connection.commit() Automaticky, např. po kontejnerem po skončení metody nebo po každé operaci (Connection.setAutoCommit(true)) Rollback Odvolání změn provedených transakcí Explicitně aplikací – např. connection.rollback() Automaticky, např. kontejnerem při vyhození výjimky během transakce

Lokální transakce Application Např. JDBC nebo JMS Resource Specific API Resource

Lokální transakce Transakce probíhající nad jedním perzistentním úložištěm (Resource) Např. práce s databází prostřednictvím JDBC nebo JMS Tato specifická API umožňují řízení transakcí Metody commit a rollback Zahájení transakce je často automatické – první operace nad úložištěm v rámci sezení od poslední transakce Ukončení transakce může být také automatické – viz. JDBC Connection.setAutoCommit(true)

Lokální transakce Application JTA Transaction Manager JTA Resource Manager Např. JDBC nebo JMS, případně nestandardní API Resource

Lokální transakce Lze využít také obecné API pro řízení transakcí – Java Transaction API (JTA) Odhlíží od specifik perzistentních úložišť Transaction Manager Řídí průběh transakcí, koordinátor Umí řídit transakce nad více úložišti Resource Manager Reprezentant jednoho úložiště v transakčním systému Komunikuje s Transakčním manažerem 'Rozumí' specifickému úložišti

Lokální transakce nad databází Application XAConnection JTA Transaction Manager XADataSource JTA Resource Manager JDBC Database

Globální transakce Application JTA Transaction Manager JTA/XA JTA/XA Resource Manager Resource Manager Resource Resource

Globální transakce Transakce, které probíhají nad více než jedním úložištěm Výběr peněz z databáze o odeslání pomocí fronty Dvě různé technologie (JDBC, JMS) Dva různé produkty (Oracle DB, Sun Message Queue) Vzniká potřeba specifikovat komunikaci mezi heterogenními transakčními systémy (ACID) XA Specifikace, iniciativa Open Group Zavádí pojem DVOUFÁZOVÝ KOMIT Java Transaction API (JTA) podporuje XA v Javě

Globální transakce Application XAConnection A XAConnection B JTA Transaction Manager XADataSourceA XADataSourceB JTA/XA JTA/XA Resource Manager A Resource Manager B JDBC JDBC Database A Database B

Dvoufázový komit Prepare phase Commit phase Resource Manager 2:prepared 4:committed Transaction Manager Transaction Manager 1:prepare 2:prepared Resource Manager 3:commit 4:committed Resource Manager Prepare fáze je obvykle náročnější, Commit by měla být co nejkratší

Distribuované transakce Transakce, které probíhají mezi síťově propojenými systémy Převod peněz mezi dvěma bankami Fyzicky oddělené databáze Propojené přes internet Vzniká potřeba specifikovat komunikaci mezi síťově propojenými transakčními systémy Object Transaction Service (OTS) Iniciativa Object Management Group (OMG) Komunikace prostřednictvím protokolu IIOP Java Transaction Service (JTS) implementuje OTS v Javě

Distribuované transakce Application Application JTA JTA Transaction Manager JTS/OTS Transaction Manager JTA/XA JTA/XA Resource Manager Resource Manager Resource Resource

Podpora transakcí v EJB Programátor se nemusí zabývat složitostmi JTA a JTS jako jsou dvoufázový komit nebo propagování kontextu transakce mezi oddělenými systémy Dvě strategie Container-managed transaction (CMT) – DEFAULT Transakce je řízena kontejnerem Bean-managed transaction (BMT) Aplikace si řídí transakci sama

Container-Managed Transactions CMT = Default mód Aplikace se nestará o vymezení transakce O vymezení transakce se stará kontejner K řízení transakcí používá metadata (anotace/XML)

Container-Managed Transactions

Transakční atributy Určují chování pro případ, že je metoda volána v již běžící transakci Příklad: metoda log na beanu LoggerBean

TA - default chování

Transakční atributy metod Sdělují kontejneru, jaké mají metody požadavky na kontext transakce Kontejner může před voláním metody např. Vytvořit novou transakci Potlačit probíhající transakci Vyhodit výjimku, neboť metoda nesmí běžet v transakci Vyhodit výjimku, neboť metoda musí běžet v transakci Nedělat nic a volat metodu v probíhající transakci Nedělat nic a volat metodu bez transakce Anotace metody @TransactionAttribute(value)

REQUIRED Metoda musí být vždy volána v transakci Pokud žádná transakce neběží, kontejner zahájí novou Používá se, pokud není jisté, že klient zahájil transakci

REQUIRES_NEW Metoda vyžaduje musí být spuštěna v nové transakci Pokud je již nějaká transakce zahájena, kontejner ji pozastaví Na konci metody je původní transakce obnovena Použití Nechceme, aby selhání metody vyvolalo rollback probíhající transakce (nastavení setRollbackOnly()) Nechceme, aby selhání transakce po skončení metody vyvolalo rollback na změnách provedených metodou (např. logovací metoda zapisující do databáze)

SUPPORTS Metoda může, ale nemusí, běžet v transakci Používá se, pokud metoda pouze čte z perzistentního úložiště (read-only metoda)

MANDATORY Metoda musí běžet v již probíhající transakci V opačné případě je vyhozena výjimka javax.ejb.EJBTransactionRequiredException Použití: Pomocné metody volané z jiných metod (jiných beanů) běžících v transakci.

NOT_SUPPORTED Metoda není určena pro běh v transakci Případná probíhající transakce je před voláním metody pozastavena a obnovena po návratu z metody Použití: V případech, kdy chci pozastavit transakci po dobu provádění metody Vzor Gateway: kromě metody save() musí být všechny ostatní volány mimo transakci, jinak by došlo k uložení stavu rozpracované entity do databáze

NEVER Metoda nesmí být volána v transakci. Pokud je volána v probíhající transakce, je vyhozena výjimka javax.ejb.EJBException Použití: Ve vzoru Gateway: místo atributu NOT_SUPPORTED by se mohl použít přísnější atribut NEVER

Tabulka pro určení transakčního atributu metody New Transaction Do Nothing Throw Exception Suspend Pending No Pending In A Pending Transaction Action Situation R S RN NS M N RN – REQUIRES_NEW R – REQUIRES S – SUPPORTS M – MANDATORY NS – NOT_SUPPORTED N - NEVER

Jak pracovat s tabulkou? Při návrhu metody si musíme rozmyslet, co se očekává od kontejneru, že udělá ve dvou situacích: Metoda je volána mimo transakci Metoda je volána v probíhající transakci V obou případech je třeba rozhodnout, zda kontejner má Vytvořit novou transakci Nedělat nic Vyhodit výjimku Potlačit probíhající transakci (má smysl pouze v 2)

Jak pracovat s tabulkou? Řádky v tabulce odpovídají situacím 1 a 2 Sloupce odpovídají požadovaným akcím kontejneru V obou řádkách vybereme jednu buňku Lze do ní psát zdůvodnění Symbol šipky spojující tyto dvě buňky identifikuje hledaný transakční atribut

Pro metodu LoggerBean::log New Transaction Do Nothing Throw Exception Suspend Pending No Pending Provádí se zápis do databáze. In A Pending Transaction Nechceme, aby hláška zmizela, pokud se náhodou nepovede probíhající transakce. Výsledek: REQUIRES_NEW

LoggerBean::log

"Zavržení" transakce Při používání CMT se programátor nestará o zahájení transakce ani commit a rollback Nemá k tomu ani prostředky Někdy je zapotřebí oznámit kontejneru, že se musí provést rollback, který by se jinak neprovedl

SetRollbackOnly - použití Business logika chce provést rollback, ale nevyhazovat nekontrolovanou výjimku Před jejím vyhozením se zavolá SessionContext.setRollbackOnly() Business logika zjistí nějaký nesoulad a chce vyhodit kontrolovanou výjimku, která standardně nezpůsobí rollback SessionContext lze injektovat @Resource SessionContext ctx;

Použití setRollbackOnly()

Výjimky a transakce Aplikační výjimky Systémové výjimky Vztahují se k business logice – např. kontrola parametrů Nevyvolávají automaticky rollback Potomci java.lang.Exception, nikoliv však java.lang.RuntimeException Systémové výjimky Způsobené selháním systému – JVM, JNDI, připojení k databázi, java.lang.NullPointerException Způsobí rollback Potomci java.lang.RuntimeException nebo java.rmi.RemoteException

@javax.ejb.ApplicationException Touto anotací lze řídit chování kontejneru při vyhození anotované výjimky Atribut rollback určuje, zda má výjimka způsobit rollback Dědí z @ApplicationException Popis Exception není Nezpůsobí rollback - default rollback=true Způsobí rollback rollback=false Nezpůsobí rollback RuntimeException Způsobí rollback - default

Použití @ApplicationException

Transakce řízené aplikací (BMT) Bean-managed transactions (BMT) Někdy je zapotřebí mít větší kontrolu nad granularitou transakcí, než nám umožňuje CMT BMT umožňuje explicitní vymezení transakcí JTA operacemi begin, commit, rollback BMT mód se nastaví anotací @javax.ejb.TransactionManagement na třídě beanu Hodnota: TransactionManagementType.BEAN

Použití BMT package cz.vse.javaee.prednaska9; import javax.annotation.Resource; import javax.ejb.EJB; import javax.ejb.EJBException; import javax.ejb.LocalBean; import javax.transaction.*; import java.math.BigDecimal; /** * <p/> * Created by IntelliJ IDEA. * User: zslajchrt * Date: Apr 10, 2010 * Time: 1:51:26 PM */ @LocalBean public class MoneyTransferBean { @EJB private AccountServiceLocal accountService; private LoggerBean logger; @Resource private UserTransaction ut; public void transfer(Account source, Account destination, BigDecimal amount) throws InsufficientFundsException { try { // log se volá ve své vlastní transakci logger.log("Begin transfer from " + source + " to " + destination); // withdraw a deposit běží ve jedné transakci ut.begin(); accountService.withdraw(source, amount); accountService.deposit(destination, amount); ut.commit(); // log se volá v nové transakci logger.log("Successfully transferred "); } catch (Exception e) { ut.rollback(); logger.log("Problem with transfer: " + e.getMessage()); } } catch (NotSupportedException e) { throw new EJBException(e); } catch (SystemException e) {

Zdroje Burke, Bill – Monson-Haefel, Richard; Enterprise Java Beans 3.0; O'Reilly Goncalves, Antonio; Beginning Java EE 6 Platform With GlassFish 3; APRESS