@siros_s. agenda: spring transaction why spring transaction transaction manager declarative...

38
ศศศศ ศศศศศศศศ @siros_s

Upload: rachel-kearney

Post on 26-Mar-2015

283 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

ศิ�รส ส�ภาวิ�ตา@siros_s

Page 2: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Agenda: Spring TransactionWhy Spring TransactionTransaction ManagerDeclarative Transaction with Annotation

@TransactionalPropagationException Handling

Page 3: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Why Spring Transaction?Uniform APITransactional resource synchronizationOn and off serverDeclarative Transaction

Page 4: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

What about JTA?Require J(2)EE container (server)Require EJB for declarative transaction

Necessary for distributed transaction

Page 5: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Uniform API

JDBC

Spring Transaction

ORM JCA

Application

JTA

Page 6: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Transactional Resource SyncC C

C

Spring Transaction

Page 7: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

On and Off Server

Spring

Java

J(2)EEContainer

ServletContainer

Spring Spring

Page 8: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Declarative Transaction

A CB

D

D CB

Commit

Begin

Begin

Commit

Page 9: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Declarative Transaction (cont.)Transaction Demarcation

Transaction logic is NOT the main business logic

Reuse business logic with different transaction logic

Programmatic transaction demarcation is NOT the answer

Page 10: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Transaction Manager Transactional Resource

Transaction Manager

Page 11: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Transaction AnnotationUse annotation to declare transaction scopeRequire just one line of config in XML

Page 12: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Example: MyService

Page 13: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Example: Transactional MyService

Page 14: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Example: Detailed MyService

Page 15: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

PropagationDefine how transaction manager handles

transaction

SUPPORTSNOT_SUPPORTEDREQUIREDREQUIRES_NEWMANDATORYNEVERNESTED

Page 16: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Example: Propagation

A CB

D

NEVER

REQUIREDREQUIRES_NEW

REQUIREDSUPPORTSMANDAROTY

REQUIRES_NEW

Page 17: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Exception HandlingDefault behavior

Rollback for unchecked exceptionNo rollback for checked exception

Can be changed with @Transactional propertiesrollbackForrollbackForClassnamenoRollbackFornoRollbackForClassname

Page 18: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Example: Exception Handling

Page 19: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Wait!! There is a better way!!

Q & A

Page 20: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Agenda: Spring AOPProblems of existing approachAOP DefinitionAOP ProxySpring AOPSpring Transaction with AOP

Page 21: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Problems??Transaction policy is still defined locally on

each class rather than globally across all classes.

Modularity & ReusabilityScattering & Tangling

Even a medium sized application has multiple “concerns”.

Page 22: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Example of Transaction PolicyAll top level service operations must begin a

new transaction (REQUIRES_NEW).Lower level service operations must operate

under an existing transaction (MANDATORY).Data access operation should operate under a

transaction (REQUIRES).

The problem is that policies or concerns are usually applied based on neither class nor class hierarchy. They are mostly random.

Page 23: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Scatteringobj.lastModified = new Date();obj.lastModified = new Date();

Customer cust = new Customer();…

cust.lastModified = new Date();saveCustomer(cust);

Customer cust = new Customer();…

cust.lastModified = new Date();saveCustomer(cust);

Invoice inv = new Invoice();…

inv.lastModified = new Date();saveInvoice(inv);

Invoice inv = new Invoice();…

inv.lastModified = new Date();saveInvoice(inv);

Course crs = new Course();…

crs.lastModified = new Date();saveCourse(crs);

Course crs = new Course();…

crs.lastModified = new Date();saveCourse(crs);

Page 24: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Scattering: Modifiedobj.lastModifiedBy = currentUser();obj.lastModified = new Date();obj.lastModifiedBy = currentUser();obj.lastModified = new Date();

Customer cust = new Customer();…

cust.lastModifiedBy = currentUser();cust.lastModified = new Date();saveCustomer(cust);

Customer cust = new Customer();…

cust.lastModifiedBy = currentUser();cust.lastModified = new Date();saveCustomer(cust);

Invoice inv = new Invoice();…

inv.lastModifiedBy = currentUser();inv.lastModified = new Date();saveInvoice(inv);

Invoice inv = new Invoice();…

inv.lastModifiedBy = currentUser();inv.lastModified = new Date();saveInvoice(inv);

Course crs = new Course();…

crs.lastModifiedBy = currentUser();crs.lastModified = new Date();saveCourse(crs);

Course crs = new Course();…

crs.lastModifiedBy = currentUser();crs.lastModified = new Date();saveCourse(crs);

Page 25: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Tanglingobj.lastModified = new Date();obj.lastModified = new Date();

tx = new Transaction();tx.begin();…

tx.commit();

tx = new Transaction();tx.begin();…

tx.commit();

logger.log(“Start operation”);logger.log(“Start operation”);

obj.id = generateUUID();obj.id = generateUUID();

Course crs = new Course();…

saveCourse(crs);

Course crs = new Course();…

saveCourse(crs);logger.log(“Start operation”);tx = new Transaction();tx.begin();Course crs = new Course();crs.id = generateUUID();…

crs.lastModified = new Date();saveCourse(crs);tx.commit();

logger.log(“Start operation”);tx = new Transaction();tx.begin();Course crs = new Course();crs.id = generateUUID();…

crs.lastModified = new Date();saveCourse(crs);tx.commit();

Page 26: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Aspect-Oriented ProgrammingConcerns are designed and implemented

independently

During build time or runtime, concerns are compiled into full functioned application. This process is called “weaving”.

Page 27: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

AOP DefinitionAspect

Join PointPointcutAdvice

Page 28: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Join Pointpublic void createCustomer() {

xxCustomer cust = new Customer();x…

xsaveCustomer(cust);xx

}

public void createCustomer() {xxCustomer cust = new Customer();x…

xsaveCustomer(cust);xx

}

Page 29: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Pointcutpublic void createCustomer() {

xxCustomer cust = new Customer();x…

xsaveCustomer(cust);xx

}

public void createCustomer() {xxCustomer cust = new Customer();x…

xsaveCustomer(cust);xx

}

Page 30: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Advicepublic void createCustomer() {

logger.log(“Start create…”);

Customer cust = new Customer();cust.id = generateUUID();…

cust.lastModified = new Date();saveCustomer(cust);

}

public void createCustomer() {logger.log(“Start create…”);

Customer cust = new Customer();cust.id = generateUUID();…

cust.lastModified = new Date();saveCustomer(cust);

}

Page 31: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

AOP Proxy

CallerCaller Target ObjectTarget Object

ProxyAdviceAdviceAdviceAdviceAdviceAdvice

Page 32: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Spring AOP

Page 33: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Supported Pointcutsexecutionwithin

thistargetargs

Page 34: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

executionexecution(<modifier> <return-type>

<declaring-type> <method-name> (<param>) <throws>)

execution(* *(..))execution(public void set*(..))execution(public *

com.spring66.service.*.*(..))execution(public *

com.spring66.service..*.*(..))

Page 35: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

withinwithin(com.spring66.service.*)

within(com.spring66.service..*)

Page 36: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Advicebeforeafter

after-returningafter-throwing

around

Page 37: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Spring Transaction with AOP

Page 38: @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative Transaction with Annotation @Transactional Propagation Exception

Is that all?

Q & A