论坛首页 Java版 Spring

有办法简化spring中的事务管理配置吗

浏览 27560 次
该帖已经被评为精华帖
作者 正文
时间:2004-12-03
[code:1]<bean id="proxyService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"><ref local="myTransactionManager"/></property> <property name="target"> <ref local="itemService"/> </property> <property name="transactionAttributes"> <props> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="delete*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean id="itemService" class="com.xxx.services.IServiceImpl"> <property name="itemMasterDAO"><ref local="itemMasterDAO"/></property> </bean> [/code:1] 系统中有多个service,但我们的事务策略大部分都是一样的,难道非要每个service都要写一个这样的代理配置么?多个service用同样的事务策略有办法简化这样的配置么?[/code]
   
时间:2004-12-03
<!-- Transactional proxy for the services -->
    <bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager"><ref bean="transactionManager"/></property>
        <property name="transactionAttributes">
            <props>
				<prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

    <bean id="itemService" parent="baseTxProxy">
        <property name="target">
            <bean class="ItemServiceImpl" autowire="byName"/>
        </property>
    </bean>
   
0 请登录后投票
时间:2004-12-03
感谢readonly大大,修改成功!!
不过以后少不了还要请教。呵呵
   
0 请登录后投票
时间:2004-12-03
Readonly 写道
<!-- Transactional proxy for the services -->
    <bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager"><ref bean="transactionManager"/></property>
        <property name="transactionAttributes">
            <props>
				<prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

    <bean id="itemService" parent="baseTxProxy">
        <property name="target">
            <bean class="ItemServiceImpl" autowire="byName"/>
        </property>
    </bean>

这样的话baseTxProxy也可能被实例化。是不是加上abstract="true"属性,把baseTxProxy只是当作一个模板比较好?因为只需要itemservice这个bean。
   
0 请登录后投票
时间:2004-12-03
看了一下文档, 原来abstract是这样用滴, hoho, 又学到一招......
   
0 请登录后投票
时间:2004-12-03
1.11开始有的:)
   
0 请登录后投票
时间:2004-12-06
我用readonly的方法不成功阿,
错误:
1.abstract属性没有定义
2.org.springframework.beans.NotWritablePropertyException: Invalid property 'transactionManager' of bean class [com.bbs.service.imp.ForumServiceImp]: Property 'transactionManager' is not writable
怎么会去set这个属性阿,根本没有定义阿,我的配置文件在这里:

[code:1]
<bean id="TransactionProxyFactoryBean" lazy-init="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="do*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

<bean id="ForumService" class="com.bbs.service.imp.ForumServiceImp"
parent="TransactionProxyFactoryBean">
<property name="forumDAO">
<ref local="ForumDAO" />
</property>
</bean>
[/code:1]

是不是我的版本不够高阿,我的也是1.1.1阿
   
0 请登录后投票
时间:2004-12-06
general 写道
我用readonly的方法不成功阿,
错误:
1.abstract属性没有定义
2.org.springframework.beans.NotWritablePropertyException: Invalid property 'transactionManager' of bean class [com.bbs.service.imp.ForumServiceImp]: Property 'transactionManager' is not writable
怎么会去set这个属性阿,根本没有定义阿,我的配置文件在这里:

[code:1]
<bean id="TransactionProxyFactoryBean" lazy-init="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="do*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

<bean id="ForumService" class="com.bbs.service.imp.ForumServiceImp"
parent="TransactionProxyFactoryBean">
<property name="forumDAO">
<ref local="ForumDAO" />
</property>
</bean>
[/code:1]

是不是我的版本不够高阿,我的也是1.1.1阿


配置好像有问题,试试这个
[code:1]

<bean id="TransactionProxyFactoryBean" lazy-init="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="do*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

<bean id="ForumService" parent="TransactionProxyFactoryBean">
<property name="target">
<bean class="ForumServiceImp">
</property>
</bean>
<bean id="ForumServiceImp" class="com.bbs.service.imp.ForumServiceImp">
<property name="forumDAO">
<ref local="ForumDAO" />
</property>
</bean>
[/code:1]
   
0 请登录后投票
时间:2004-12-06
de3light,
成功,thx
这下倒是省事情了,不用每个bean都配置事务了
   
0 请登录后投票
时间:2004-12-08
[code:1]<bean id="TransactionProxyFactoryBean" lazy-init="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="do*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

<bean id="ForumService" parent="TransactionProxyFactoryBean">
<property name="target">
<bean class="com.bbs.service.imp.ForumServiceImp">
<property name="forumDAO">
<ref local="ForumDAO" />
</property>
</bean>
</property>
</bean> [/code:1]

这样也是可以的!
   
0 请登录后投票
论坛首页 Java版 Spring

跳转论坛:
JavaEye推荐