cuiyi's blog(崔毅 crazycy)

记录点滴 鉴往事之得失 以资于发展
数据加载中……

Transaction续四

spring和ejb事务的一个trap是:

事务是加载在方法上,要事务起作用,首先事务所在的类的代理要被拦截,其次是方法要被拦截。

同“transaction续三”类似的一个陷阱,如果事务的方法内部调用的方法是在同一个类里,那么并没有事务起作用。

<bean id="txAttributes"
        
class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
        
<property name="properties">
            
<props>
                
<prop key="backupXmlToDb">PROPAGATION_NOT_SUPPORTED</prop>
                
<prop key="*">PROPAGATION_REQUIRED</prop>
            
</props>
        
</property>
    
</bean>

 

同样“PROPAGATION_NOT_SUPPORTED”虽然配置给了backupXmlToDb,但是如果backupXmlToDb是被同一个类事务拦截的方法调用,那么这个调用逻辑是:同一个事务中的两个方法的,这样是不会起另一个事务的(可查看spring的源代码)

解决办法就是把它放到另一个对象里,让这个对象的代理被拦截,从而达到预期目的


以前一直有这个理论,但是实践中却犯了这个错误,害的我浪费了5个小时,真该打。

posted on 2010-09-07 10:37 crazycy 阅读(239) 评论(0)  编辑  收藏 所属分类: JavaEE技术


只有注册用户登录后才能发表评论。


网站导航: