SSH2集成事务配置经典解决方案和大家分享..
因为公司系统架构升级,有原来的struts1升级为struts2,所以很多原有的配置需要改变.比如事务配置,以前的事物是通过spring的拦截器实现的.
事务配置如下:
<bean id="actionTemplate" abstract="true" >
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="transactionInterceptor" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
transactionManager是事务管理器,我们项目用的是jta事务。
action配置如下:
<bean name="/dmFeeExpenseApplyAction" parent="actionTemplate">
<property name="target">
<bean ref="dmFeeApplyService" />
</bean>
</property>
</bean>
由于struts2 Action中属性的值是通过struts自动赋值的,而不像struts1会给你封装成一个actionForm.
用上面这种配置的话,action被代理过了,spring默认的是jdk动态代理,struts2拿到的不是原生的action对象,所以不能赋值。
所以需要改变代理方式,改为cglib代理,就可以了。
配置如下:
<bean id="actionTemplate" abstract="true" ref="transactionManager" />
<property name="proxyTargetClass" value="true"/>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
action配置与上面一样.