论坛首页 Java企业应用论坛

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

浏览 45391 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-12-03  
<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>

系统中有多个service,但我们的事务策略大部分都是一样的,难道非要每个service都要写一个这样的代理配置么?多个service用同样的事务策略有办法简化这样的配置么?
   发表时间:2004-12-03  
&lt;!-- Transactional proxy for the services --&gt;
    &lt;bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;
        &lt;property name="transactionManager"&gt;&lt;ref bean="transactionManager"/&gt;&lt;/property&gt;
        &lt;property name="transactionAttributes"&gt;
            &lt;props&gt;
				&lt;prop key="*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;
            &lt;/props&gt;
        &lt;/property&gt;
    &lt;/bean&gt;

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

    &lt;bean id="itemService" parent="baseTxProxy"&gt;
        &lt;property name="target"&gt;
            &lt;bean class="ItemServiceImpl" autowire="byName"/&gt;
        &lt;/property&gt;
    &lt;/bean&gt;

这样的话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这个属性阿,根本没有定义阿,我的配置文件在这里:

<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>


是不是我的版本不够高阿,我的也是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这个属性阿,根本没有定义阿,我的配置文件在这里:

<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>


是不是我的版本不够高阿,我的也是1.1.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>
0 请登录后投票
   发表时间:2004-12-06  
de3light,
成功,thx
这下倒是省事情了,不用每个bean都配置事务了
0 请登录后投票
   发表时间:2004-12-08  
<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> 


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

跳转论坛:
Global site tag (gtag.js) - Google Analytics