Springのトランザクション管理



  

    ,    (    )    (      )       !

spring      spring       ,    spring AOP,  ,spring      spring               。spring            、  xml     、       。             。

   spring      ,               

1.spring    

spring     org.springframework.transaction.TransactionDefinition          。

1.1    (PROPAGATION)

      



    

  



PROPAGATION_MANDATORY

               。            ,       



PROPAGATION_NESTED

                ,                 。                      。         ,    PROPAGATION_REQUIRED  。                       。           ,             



PROPAGATION_NEVER

                      。             ,        



PROPAGATION_NOT_SUPPORTED

                。              ,              



PROPAGATION_REQUIRED

                。              ,             。    ,          



PROPAGATION_REQUIREDS_NEW

                  。          ,                 ,              。      JTATransactionManager,     TransactionManager



PROPAGATION_SUPPORTS

               ,                ,            


1.2      

spring       



    

  



ISOLATION_DEFAULT

              



ISOLATION_READ_UNCOMMITTED

           。      、        



ISOLATION_READ_COMMITED

              。     、        



ISOLATION_REPEATABLE_READ

                 ,             。           ,       



ISOLATION_SERIALIZABLE

    ACID     ,       、        。              ,                           。


1.3  

                  ,                      ,        。                           ,  ,                      (PROPAGATION_REQUIRED,PROPAGATION_REQUIREDS_NEW,PROPAGATION_NESTED)     ,            。

1.4    

      ,            ,         。

1.5    

               ,     。      ,          (runtime exception)   ,        (checked exception)    。  ,                                    。  ,                     ,       。

2.spring      

spring          AOP  Advice!          !                  。

spring                   ,             org.springframework.transaction.PlatformTransactionManager。

   jdbc         (                  ):

  <bean id="transactionManager"        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource"></property>    </bean>
3.  XML      

3.1    

  <bean id="rantService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">        <property name="target" ref="rantServiceTarget" />        <property name="proxyInterfaces" value="com.roadrantz.service.RantService" />        <property name="transactionManager" ref="transactionManager"></property>        <property name="transactionAttributes">            <props>                <prop key="add*">PROPAGATION_REQUIRED</prop>                <prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>            </props>        </property>    </bean>
transactionAttributes          :

PROPAGATION,ISOLATION(  ),readOnly(  ),-Exception(  ),+Exception(  )

3.2 spring2.0       

    <tx:advice id="txAdvice" transaction-manager="transactionManager">        <tx:attributes>            <tx:method name="add*" propagation="REQUIRED" />            <tx:method name="*" propagation="SUPPORTS" read-only="true" />        </tx:attributes>    </tx:advice>    <aop:config>        <aop:advisor advice-ref="txAdvice"            pointcut="execution(* *..RantService.*(..))" />    </aop:config>
4.         
      
<tx:annotation-driven transaction-manager="transactionManager"/>
 

                 @Transactional  
@Transactional(propagation=Propagation.SUPPORTS,readOnly=true)public class RantServiceImpl implements RantService{...     @Transactional(propagation=Propagation.REQUIRED,readOnly=false)        public void addRant(Rant rant){}}

5.