Multiple Transaction Managers
If you have multiple transaction managers configured in your Spring configuration file as shown in Listing 9-10, you can use appropriate transaction managers to be applied on methods using the @Transactional annotation. Some changes are required while configuring the transaction managers in the configuration file and in annotation, we will have to qualify as to what is the appropriate transaction manager to be used. Listing 9-13 shows code sample for doing this.
Listing 9-13. Configuring multiple transaction managers and using in @Transactional annotation
[xml]applicationContext.xml
…….
…….
…….[/xml]
LoyaltyService.java
[java]@Transactional
public class LoyaltyService{
@Transactional(“txOne”)
String doOperationOne(String attrib) {
//Some code….
}
@Transactional(“txTwo”)
String doOperationTwo(String attrib) {
//Some code….
}
}[/java]
Note: Annotation in the method level overrides the same annotation properties in the class level.
Figure 9-5. Spring transaction management in action
Figure 9-5 shows declarative transaction pictorially in all aspects. In this figure the “Client” calls the proxy either created by Spring AOP or AspectJ as the case may be, which actually start the transaction looking at the various “Advisors” configured and the method in the “Target Object” is invoked. After method execution, it goes back to the proxy, wherein the transaction is either committed or roll-backed. Once that is done the control is transferred back to the client.
Using Spring AOP
AOP enables us to encapsulate and separate cross-cutting concerns in your application. All the various operations related to transaction like beginning, ending, committing to database and rolling-back in case of exception, all fall into the various cross-cutting concerns in your application and AOP is the right candidate which can be used. There literally no change in the service class and callers. The only change is in the Spring bean configuration file. Listing 9-1 shows the changes in the Spring configuration file to achieve transaction management using Spring AOP.
Listing 9-14. Declarative Transaction management using Spring AOP
[xml]
<!–—Transaction interceptor bean configuration —->
PROPAGATION_REQUIRED
<!–—Transaction proxy creation —->
loyaltyTransactionInterceptor
[/xml]
This is a very effective way of doing transaction management declaratively. In Listing 9-1 above, we have declared the proxy bean “loyaltyProxyService” which is an instance of “org.springframework.aop.framework.ProxyFactoryBean”. The target for this proxy will be the Loyalty Service object which is specified through “target” property. And because we want to intercept the transaction related operations, we have specified the interceptor “loyaltyTransactionInterceptor” through the element “interceptorNames”.
Page Visitors: 9315


Tomcy John


Latest posts by Tomcy John (see all)
- A Guide to Continuous Improvement for Architects - February 2, 2023
- Cloud-first Architecture Strategy - January 26, 2023
- Architecture Strategy and how to create One - January 24, 2023
Thanks, nice chapter.