0
Spring framework                     Motto: Musíte rozbít vejce když chcete udělat omeletu                Spring framework...
Řízení transakcí            Commit, rollback, programové a deklarativní použití transakcíSunday 13 May 2012               ...
Transakce                     • Správné použití a pochopení                       transakcí je jednou ze základních       ...
ACID                     • Atomicity                     • Consistency                     • Isolation                    ...
Transakce v Jave                     • Každý framework nebo                       technologie má vlastní API              ...
Transakce v Jave                     • Vetšinou aplikací - lokální                       transakce                      • ...
Lokální transakceSunday 13 May 2012                       7
Autocommit mode                                                 private void updateSomething() {                     • Def...
Manuální řízení                     • Commit/Rollback           private void updateSomething() {	 	 	                     ...
Globální transakceSunday 13 May 2012                        10
JTA                     • JTA je Java EE standard pro                       transakce                     • Řízení        ...
Flat model                     • All or nothing principSunday 13 May 2012                              12
Nested model                     • Vnořená transakce může být rollbacknutá aniž                       by muselo dojít k ro...
Transakční atributy                     • Transakce s různým chováním                      • Propagace transakce          ...
Propagace                     • Required                     • RequiresNew                     • Supports                 ...
Izolace                     • Určuje jak hodně se mohou                       transakce ovlivnitSunday 13 May 2012        ...
Read uncommitedSunday 13 May 2012                     17
Read commitedSunday 13 May 2012                   18
Read repeatableSunday 13 May 2012                     19
SerializableSunday 13 May 2012                  20
Transakce ve SpringuSunday 13 May 2012                          21
•   Spring podporuje možnost definovat/ovládat transakce                         •   programově                         •  ...
Transakční manažer                     •   Pro využití transakcí musíme nadefinovat transakční manager beanu               ...
Deklarativní řízení              • Založeno na AOP              • Rollback                RuntimteException              •...
XMLSunday 13 May 2012         25
<beans xmlns="http://www.springframework.org/schema/beans"           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"...
AnotaceSunday 13 May 2012             27
<beans xmlns="http://www.springframework.org/schema/beans"           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"...
Výjimky                     • běhová (runtime) => vždy rollback                     • kontrolovaná (checked) =>           ...
Programový způsob                     • Stará dobrá template method                     • TransactionTemplate             ...
TransactionTemplate tt = new TransactionTemplate(txManager);       	     tt.setIsolationLevel(TransactionDefinition.ISOLAT...
Transakce test  	    public class MyService {  	    	        @Transactional  	    	        public void doSomething() {		  ...
• Nadefinujte pro předchozí DAO objekt transakce                     • Vyzkoušejte programový způsob                       ...
Upcoming SlideShare
Loading in...5
×

Spring Transactions

935

Published on

* ACID
* Nested a Flat model transakcí
* Lokální a distribuované transakce
* Propagace a Izolace transakcí
* Volba transakčního manažeru
* Deklarativní ovládání transakcí
* Programové ovládání transakcí

Published in: Spiritual, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
935
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
21
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Spring Transactions"

  1. 1. Spring framework Motto: Musíte rozbít vejce když chcete udělat omeletu Spring framework training materials by Roman Pichlík is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.Sunday 13 May 2012 1
  2. 2. Řízení transakcí Commit, rollback, programové a deklarativní použití transakcíSunday 13 May 2012 2
  3. 3. Transakce • Správné použití a pochopení transakcí je jednou ze základních výzev J2EE aplikací • Transakce • nedělitelná jednotka operace • ACIDSunday 13 May 2012 3
  4. 4. ACID • Atomicity • Consistency • Isolation • DurabilitySunday 13 May 2012 4
  5. 5. Transakce v Jave • Každý framework nebo technologie má vlastní API • JPA, Hibernate, JDBC, JTA... • Transakce dělíme • Lokální • GlobálníSunday 13 May 2012 5
  6. 6. Transakce v Jave • Vetšinou aplikací - lokální transakce • autocommit • řízení transakcí per connectionSunday 13 May 2012 6
  7. 7. Lokální transakceSunday 13 May 2012 7
  8. 8. Autocommit mode private void updateSomething() { • Defaultní chování JDBC Connection conn = null; Statement stmt = null; • Commit po každé operaci try { conn = ds.getConnection(); stmt = conn.createStatement(); • Možná nekonzistence dat 1 stmt.executeUpdate("update table1"); 2 stmt.executeUpdate("update table2"); } finally { DatabaseUtils.close(conn, stmt); } }Sunday 13 May 2012 8
  9. 9. Manuální řízení • Commit/Rollback private void updateSomething() { programově Connection conn = ds.getConnection(); Statement stmt = null; try { • Nutnost propagovat conn.setAutoCommit(false); stmt = conn.createStatement(); connection se započatou stmt.executeUpdate("update table1"); transakcí stmt.executeUpdate("update table2"); conn.commit(); } catch(Exception e) { conn.rollback(); } finally { DatabaseUtils.close(conn, stmt); zahájení transakce } }Sunday 13 May 2012 9
  10. 10. Globální transakceSunday 13 May 2012 10
  11. 11. JTA • JTA je Java EE standard pro transakce • Řízení • Programové/Deklarativní • Flat model • Distribuované chováníSunday 13 May 2012 11
  12. 12. Flat model • All or nothing principSunday 13 May 2012 12
  13. 13. Nested model • Vnořená transakce může být rollbacknutá aniž by muselo dojít k rollbacku celé transakceSunday 13 May 2012 13
  14. 14. Transakční atributy • Transakce s různým chováním • Propagace transakce • Izolace transakce • Rollback pravidlaSunday 13 May 2012 14
  15. 15. Propagace • Required • RequiresNew • Supports • Mandatory • NotSupportedSunday 13 May 2012 15
  16. 16. Izolace • Určuje jak hodně se mohou transakce ovlivnitSunday 13 May 2012 16
  17. 17. Read uncommitedSunday 13 May 2012 17
  18. 18. Read commitedSunday 13 May 2012 18
  19. 19. Read repeatableSunday 13 May 2012 19
  20. 20. SerializableSunday 13 May 2012 20
  21. 21. Transakce ve SpringuSunday 13 May 2012 21
  22. 22. • Spring podporuje možnost definovat/ovládat transakce • programově • deklarativně • Spring definuje abstraktní transakční API • to umožňuje stejný přístup k řízení transakcí pro různé frameworky • Hibernate, iBatis, JPA, JDBC • V mnohém přebírá úspěšný koncept EJB • CMT • izolace, propagaceSunday 13 May 2012 22
  23. 23. Transakční manažer • Pro využití transakcí musíme nadefinovat transakční manager beanu • HibernateTransactionManager • DataSourceTransactionManager • JtaTransactionManager • Podle typu transakčního manageru se definuje i jeho závislost • DataSourceTransactionManager závisí na datasource <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean>Sunday 13 May 2012 23
  24. 24. Deklarativní řízení • Založeno na AOP • Rollback RuntimteException • XML • Anotace • @TransactionalSunday 13 May 2012 24
  25. 25. XMLSunday 13 May 2012 25
  26. 26. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <aop:aspectj-autoproxy/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost/booking-demo?useUnicode=true&amp;characterEncoding=UTF-8"/> <property name="username" value="admin"/> <property name="password" value="changeit"/> </bean> <bean id="userStorageDaoJdbc" class="cz.bookingdemo.dao.UserStorageDaoJdbc" > <property name="dataSource" ref="dataSource"/> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- the transactional advice (i.e. what happens; see the <aop:advisor/> bean below) --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- the transactional semantics... --> <tx:attributes> <!-- all methods starting with get are read-only --> <tx:method name="get*" read-only="true"/> <!-- other methods use the default transaction settings (see below) --> <tx:method name="*"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="daoOperation" expression="execution(* cz.bookingdemo.dao.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="daoOperation"/> </aop:config> </beans>Sunday 13 May 2012 26
  27. 27. AnotaceSunday 13 May 2012 27
  28. 28. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <bean class="cz.sweb.pichlik.springdao.hibernate.UserStorageDaoHibernate"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- ... Hibernate session ommited --> </beans> @Transactional(readOnly=false, propagation = Propagation.REQUIRED) public class UserStorageDaoHibernate extends HibernateDaoSupport implements UserStorageDao { public void delete(User user) { getHibernateTemplate().delete(user); } @Transactional(readOnly= true) public User get(long userId) { return (User) getHibernateTemplate().get(User.class, userId); } }Sunday 13 May 2012 28
  29. 29. Výjimky • běhová (runtime) => vždy rollback • kontrolovaná (checked) => neovlivňuje • možno změnit chování viz atribut • rollbackFor • noRollbackForSunday 13 May 2012 29
  30. 30. Programový způsob • Stará dobrá template method • TransactionTemplate • Méně flexibilní pro práci s except. • netřeba explicitní commit/ rollback • RuntimeException • status.setRoolbackOnly()Sunday 13 May 2012 30
  31. 31. TransactionTemplate tt = new TransactionTemplate(txManager); tt.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); tt.execute(new TransactionCallbackWithoutResult() { protected void doInTransactionWithoutResult(TransactionStatus status) { dao.save(user); dao.update(user); } });Sunday 13 May 2012 31
  32. 32. Transakce test public class MyService { @Transactional public void doSomething() { //code ommited... } public void addSomething() { doSomething(); //code ommited... deleteSomething(); } @Transactional protected void deleteSomething() { //code ommited... } }Sunday 13 May 2012 32
  33. 33. • Nadefinujte pro předchozí DAO objekt transakce • Vyzkoušejte programový způsob • transakce nad vice metodami • vyzkoušejte rollback • Deklarativní způsob • anotace • XMLSunday 13 May 2012 33
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×