2014년 1월 31일 금요일

[스프링3트랜잭션강좌]트랜잭션 어드바이스(tx:advice)를 통한 선언적인 방식의 트랜잭션 관리(XML설정방식),spring framework3.X transaction, 스프링교육학원, spring framework교육학원

[스프링3트랜잭션강좌]트랜잭션 어드바이스(tx:advice)를 통한 선언적인 방식의 트랜잭션 관리(XML설정방식),spring framework3.X transaction, 스프링교육학원, spring framework교육학원
Spring2.0 이상에서 tx 스키마에 정의된 <ta:advice> 엘리먼트에 의해 Transaction의 어드바이스를 쉽게 구현할 수 있다. 

아래와 같이 XML 설정 파일에 spring-aop-3.0.xsd , spring-tx-3.X.xsd를 추가해야 한다.
<beans xmlns="http://www.springframework.org/schema/beans":namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
             http://www.springframework.org/schema/aop
             http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd
             http://www.springframework.org/schema/tx
             http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">

Spring AOP가 포인트컷 정의를 위해 AspecJ 포인트컷 표현식을 사용하므로 AspectJ 위버 지원라이브러리를 클래스 패스에 추가해야 한다. 메이븐을 사용한다면 아래 의존 라이브러리를 pom.xml에 추가한다.

  <dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjweaver</artifactId>
   <version>1.6.11</version>
  </dependency>

tx 네임스페이스에서 tx:advice가 가장 중요한데 사용예는 다음과 같다.
또한 스프링 AOP가 프록시 기반이므로 트랜잭션이 적용될 메소드는 public으로 선언되어야 한다.
<tx:advice id=“txAdvice” transaction-manager=“transactionManager”>
  <tx:attributes>
    <tx:method name=“*dao” propagation=“REQUIRED”/>
    <tx:method name=“*” propagation=“REQUIRED”read-only=“true”/>
  </tx:attributes>
</tx:advice>
<bean id=“transactionManager” class=“org.springframework.jdbc.datasource.DataSourceTransactionManager”>
  <property name=“dataSource” ref=“dataSource”/>
</bean>
tx:attribute에 사용되는 속성
name : 적용될 어드바이스에 대응되는 메소드명(필수), 와일드카드 (*)가능
isolation : 트랜잭션 격리 수준
no-rollback-for : 예외가 발생했을때 이를 무시하고 Transaction을 롤백하지 않고 계속 진행할 예외를 지정
propagation : Transaction 전파방식 지정, 기본값:REQUIRED
read-only : 트랜잭션이 읽기 전용인지, 기본값:FALSE
rollback-for : 예외가 발생했을 때 트랜잭션을 롤백 시킬 예외들의 구체적인 타입을 콤마로 구분하여 기술
timeout : 트랜잭션 타임아웃을 지정
<tx:advice> 자체만 보았을 때는 어느 빈에 advice가 적용되어야 하는지 알수 없다. 그러므로 PointCut이 필요하다.( AOP의 Advice에 지나지 않는다. )

<aop:config>
  <aop:advisor pointcut=“execution(* *..SpringBoardDAO.*dao(..))”
                 advice-ref=“txAdvice”/>
</aop:config>




댓글 없음:

댓글 쓰기