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. Řízení transakcí
Commit, rollback, programové a deklarativní použití transakcí
Sunday 13 May 2012 2
3. Transakce
• Správné použití a pochopení
transakcí je jednou ze základních
výzev J2EE aplikací
• Transakce
• nedělitelná jednotka operace
• ACID
Sunday 13 May 2012 3
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. Transakce v Jave
• Vetšinou aplikací - lokální
transakce
• autocommit
• řízení transakcí per connection
Sunday 13 May 2012 6
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, propagace
Sunday 13 May 2012 22
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. Deklarativní řízení
• Založeno na AOP
• Rollback
RuntimteException
• XML
• Anotace
• @Transactional
Sunday 13 May 2012 24
29. Výjimky
• běhová (runtime) => vždy rollback
• kontrolovaná (checked) =>
neovlivňuje
• možno změnit chování viz atribut
• rollbackFor
• noRollbackFor
Sunday 13 May 2012 29
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
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. • Nadefinujte pro předchozí DAO objekt transakce
• Vyzkoušejte programový způsob
• transakce nad vice metodami
• vyzkoušejte rollback
• Deklarativní způsob
• anotace
• XML
Sunday 13 May 2012 33