Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti
Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV) Ing. Zdeněk Troníček, Ph.D. Katedra softwarového inženýrství Fakulta informačních technologií ČVUT v Praze Letní semestr 2010/2011, přednáška č. 5
© Zdeněk Troníček, 2011
Agenda Transakce Řízení Zámky Izolační úrovně
Security
2
BI-EJA 5: Transakce, security
Ing. Zdeněk Troníček, Ph.D.
Transakce (opak.) Transakce je posloupnost operací, která se tváří jako jedna velká, atomická operace.
převod peněz účet 1
3
účet 2
BI-EJA 5: Transakce, security
BEGIN COMMIT ROLLBACK
nákup v elektronickém obchodě: 1) platnost karty 2) zboží na skladě 3) platba kartou 4) expedice zboží Ing. Zdeněk Troníček, Ph.D.
Programové řízení transakcí @Stateful @TransactionManagement( TransactionManagementType.BEAN ) public class ManagerBean implements ManagerLocal { @Resource UserTransaction UserTransaction ut; ut; @Resource public void addAccount( String type ) throws Exception { try { ut.begin(); ut.begin(); ... ut.commit(); ut.commit(); } catch ( Exception e ) { ut.rollback(); ut.rollback(); } } } 4
BI-EJA 5: Transakce, security
Ing. Zdeněk Troníček, Ph.D.
Deklarativní řízení transakcí (1) @Stateful public class ManagerBean implements ManagerLocal { ... @TransactionAttribute( @TransactionAttribute( TransactionAttributeType.REQUIRES_NEW TransactionAttributeType.REQUIRES_NEW )) public void addAccount( String type ) { ... } }
Transaction attribute types: REQUIRED REQUIRES_NEW MANDATORY NEVER NOT_SUPPORTED SUPPORTS 5
BI-EJA 5: Transakce, security
EJBObject BEGIN
COMMIT Bean Ing. Zdeněk Troníček, Ph.D.
Deklarativní řízení transakcí (2) @Stateful public class ManagerBean implements ManagerLocal { @Resource SessionContext SessionContext ctx; ctx; @Resource ... public void addAccount( String type ) { if( ... ) { ctx.setRollbackOnly(); ctx.setRollbackOnly(); } ROLLBACK if( ... ) { throw throw new new EJBException(…); EJBException( … ); } } }
6
BI-EJA 5: Transakce, security
Ing. Zdeněk Troníček, Ph.D.
Transakční model Flat model (JEE) Nested model
T1 begin … T1 suspend
nezávislá transakce
T2 begin
vnořená transakce
T1 begin … T2 begin
…
…
T2 commit
T2 commit
T1 resume
…
…
T1 rollback
T1 rollback
7
BI-EJA 5: Transakce, security
Ing. Zdeněk Troníček, Ph.D.
Transakce - příklad 1
T1 begin metodaA REQUIRED
metodaB REQUIRED
2
metodaC REQUIRED
T2 begin 3
T1 commit
metodaD REQUIRES_NEW
4
metodaE REQUIRED
T2 commit T3 begin 5
metodaF NOT_SUPPORTED
6
metodaG REQUIRED T3 commit
8
BI-EJA 5: Transakce, security
Ing. Zdeněk Troníček, Ph.D.
Zamykání dat (JavaDB) Zámky Shared (S) – pro čtení Exclusive (X) – pro zápis Transakce 1 čas
begin
Transakce 2
zamkne řádek A (zámek X)
begin
...
čeká na zámek k řádku A
commit (uvolní zámek)
... zamkne řádek A (zámek X) ...
9
BI-EJA 5: Transakce, security
Ing. Zdeněk Troníček, Ph.D.
Lost Update User 1 Account: 1 Balance: 123 Address: Praha
User 2
124
Account: 1 Brno Balance: 123 Address: Praha 1
2
3
4
databáze 10
BI-EJA 5: Transakce, security
1: 1, 123, Praha 2: 1, 123, Praha 3: 1, 124, Praha 4: 1, 123, Brno Ing. Zdeněk Troníček, Ph.D.
Pessimistic Locking User 1 Account: 1 Balance: 123 Address: Praha
User 2
124
Account: 1 Balance: 124 Address: Praha 1
3
2
4
1: zamkne řádek 2: uvolní zámek
databáze 11
BI-EJA 5: Transakce, security
Brno
1: 1, 123, Praha 2: 1, 124, Praha 3: 1, 124, Praha 4: 1, 124, Brno Ing. Zdeněk Troníček, Ph.D.
Optimistic Locking (1) • přidáme sloupec „verze” • před každou změnou zkontrolujeme číslo verze: pokud nesouhlasí, změnu odmítneme • po každé změně zvýšíme číslo verze o 1
Account: 1 Balance: 123 Address: Praha Version: 1
124
1 2 2: je verze v DB rovna 1?
12
BI-EJA 5: Transakce, security
databáze
Ing. Zdeněk Troníček, Ph.D.
Optimistic Locking (2) User 1 Account: 1 Balance: 123 Address: Praha Version: 1
User 2 124
Account: 1 Brno Balance: 123 Address: Praha Version: 1 1
2
3
4
databáze
13
BI-EJA 5: Transakce, security
1: 1, 123, Praha, 1 2: 1, 123, Praha, 1 3: 1, 124, Praha, 1 (2) 4: 1, 123, Brno, 1 Ing. Zdeněk Troníček, Ph.D.
Java Persistence API @Entity public class Account { @Version private Long version; ... }
@PersistenceContext private EntityManager em;
// may throw OptimisticLockException Podporované typy • • • • 14
short, Short int, Integer long, Long Timestamp BI-EJA 5: Transakce, security
public void updateAccount( Account acc ) { em.merge( acc );
}
Ing. Zdeněk Troníček, Ph.D.
Proč potřebujeme transakce? HOSPODY NÁZEV
PIVO
Bar 11
Budvar
20
Bar 11
Kozel
25
CENA
současně: Rumcajs: (max) (min) Manka: (del) (ins) (max)
SELECT MAX(CENA) FROM HOSPODY WHERE NÁZEV='Bar 11'
(min)
SELECT MIN(CENA) FROM HOSPODY WHERE NÁZEV='Bar 11'
(del) DELETE FROM HOSPODY WHERE NÁZEV='Bar 11'
(ins)
INSERT INTO HOSPODY VALUES( 'Bar 11', 'Radegast', 30 ) 15
BI-EJA 5: Transakce, security
Ing. Zdeněk Troníček, Ph.D.
Řazení operací Nepoužijeme-li transakce, pak jediná omezení jsou: (max) před (min) (del) před (ins)
(max) (del) (ins) (min) Může tedy nastat: (max)(del)(ins)(min)
Bar 11
Budvar
20
Bar 11
Kozel
25
(max): 25 (del) (ins)
Bar 11 16
Radegast
BI-EJA 5: Transakce, security
30
(min): 30
max < min Ing. Zdeněk Troníček, Ph.D.
Řešení: transakce (max) a (min) provedeme v transakci 25 (max) (min)
(del) 20
(del)
(ins)
17
BI-EJA 5: Transakce, security
(del) NULL
(max) (min)
(ins)
(ins)
NULL
30 (max) (min)
30
Ing. Zdeněk Troníček, Ph.D.
Shared Locks Long duration
Short duration
begin
begin
lock row A
lock row A release lock release lock
commit zámky držíme do konce transakce
18
BI-EJA 5: Transakce, security
commit zámky uvolníme bezprostředně po vyčtení dat
Ing. Zdeněk Troníček, Ph.D.
Phantom ACCOUNT
T1 BEGIN
ID
BALANCE
1
101
SELECT * FROM ACCOUNT WHERE BALANCE>100
2
50
T2 BEGIN
3
105
INSERT INTO ACCOUNT VALUES( 3, 105 ) T2 COMMIT
SELECT * FROM ACCOUNT WHERE BALANCE>100 19
BI-EJA 5: Transakce, security
vybere 1 řádek
vybere 2 řádky
Ing. Zdeněk Troníček, Ph.D.
Non-repeatable Read ACCOUNT
T1 BEGIN ID
BALANCE
1
101
2
50
ACCOUNT
ID
BALANCE
1
200
2 20
50
BI-EJA 5: Transakce, security
SELECT * FROM ACCOUNT WHERE BALANCE>100
uvolníme zámky
T2 BEGIN UPDATE ACCOUNT SET BALANCE=200 WHERE ID=1 T2 COMMIT SELECT * FROM ACCOUNT WHERE BALANCE>100
vrátí jiný výsledek
Ing. Zdeněk Troníček, Ph.D.
Izolační úrovně úroveň
long duration
SERIALIZABLE
X, S
REPEATABLE_READ
X, S
READ_COMMITTED
X
READ_UNCOMMITTED
X
short duration zamyká predikáty
S nepoužívá zámky S
nižší izolace vyšší souběžnost (concurrency) anomálie: phantoms non-repeatable read dirty read 21
BI-EJA 5: Transakce, security
Ing. Zdeněk Troníček, Ph.D.
Izolační úrovně v Javě Connection: setTransactionIsolation( int level ) TRANSACTION_SERIALIZABLE TRANSACTION_REPEATABLE_READ TRANSACTION_READ_COMMITTED TRANSACTION_READ_UNCOMMITTED
izolační úroveň určuje, jak vidíme DB
SERIALIZABLE DB READ_COMMITTED
22
BI-EJA 5: Transakce, security
Ing. Zdeněk Troníček, Ph.D.
Distribuované transakce javax.transaction javax.transaction.xa
Application
XAResource
Transaction Manager
XAResource xar = r1.getXAResource(); xar.start( xid1 ); ... xar.end( xid1 ); xar.start( xid2 ); ... xar.end( xid2 ); 23
BI-EJA 5: Transakce, security
Resource Manager 1
Resource Manager 2
Resource Manager 3
2-phase commit Ing. Zdeněk Troníček, Ph.D.
Security Základní pojmy • autentizace = ověření totožnosti • autorizace = přidělení práv • confidentiality • integrity
@Stateless @DeclareRoles( "manager" ) public class BankManager { ... @RolesAllowed( "manager" ) public void addCustomer( ... ) { ... } } 24
BI-EJA 5: Transakce, security
Vlastnosti
• container-managed • role-based • end-to-end
• • • •
@DeclareRoles @RolesAllowed @PermitAll @DenyAll
Ing. Zdeněk Troníček, Ph.D.
Uživatelské role Uživatelé aplikačního serveru
Role
user 1
Manager
user 2
Create Account
user 3 Customer
Group 1
Show Account
user 4 user 5
user 6
aplikační server 25
Případy užití
BI-EJA 5: Transakce, security
JEE aplikace Ing. Zdeněk Troníček, Ph.D.
Autentizace v HTTP HTTP BASIC – nešifrované HTTP DIGEST - pouze kontrolní součet Form Based HTTPS Client - používá certifikáty
Formulářová autentizace:
26
BI-EJA 5: Transakce, security
Ing. Zdeněk Troníček, Ph.D.
Certifikáty Algoritmy Kryptografie
• DES • RSA • MD5, SHA •…
• symetrická (tajný klíč) • asymetrická (soukromý a veřejný klíč)
Certifikát
• veřejný klíč • jméno vlastníka • platnost do • název vydavatele (CA) • sériové číslo • digitální podpis 27
BI-EJA 5: Transakce, security
Certificate Sign Request Certifikační autorita
Certificate
Ing. Zdeněk Troníček, Ph.D.
Otázky & odpovědi
[email protected]