@siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative...

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

Transcript of @siros_s. Agenda: Spring Transaction Why Spring Transaction Transaction Manager Declarative...

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