Patrick Vanhuyse
Aug 10th, 2005, 04:01 AM
Hi,
I have some business data access and service objects accessing several databases.
These objects are "transactionned" using Spring (TransactionInterceptor, BeanNameAutoProxyCreator).
I want to cache the results of one method of one of the DAO.
How can I do that ?
Here's a summary of my application context :
<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyP laceholderConfigurer">
<property name="location">
<value>/prestation.properties</value>
</property>
</bean>
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundle MessageSource">
<property name="basename">
<value>messages</value>
</property>
</bean>
<!-- Datasource & Transaction -->
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBea n"/>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransaction Manager">
<property name="userTransaction">
<ref local="jotm"/>
</property>
</bean>
<bean id="dossier.dataSource" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
<property name="transactionManager">
<ref local="jotm"/>
</property>
<property name="driverName">
<value>${dossier.driverClassName}</value>
</property>
<property name="url">
<value>${dossier.url}</value>
</property>
<property name="user">
<value>${dossier.username}</value>
</property>
<property name="password">
<value>${dossier.password}</value>
</property>
</bean>
<bean id="prestation.dataSource" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
...
</bean>
<bean id="personnel.dataSource" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
...
</bean>
<bean id="propagationRequiredAttribute"
class="org.springframework.transaction.interceptor.Defaul tTransactionAttribute">
<property name="propagationBehaviorName">
<value>PROPAGATION_REQUIRED</value>
</property>
</bean>
<bean id="propagationReadOnlyAttribute"
class="org.springframework.transaction.interceptor.Defaul tTransactionAttribute">
<property name="propagationBehaviorName">
<value>PROPAGATION_REQUIRED,readOnly</value>
</property>
</bean>
<bean id="nameTransactionAttributeSource"
class="org.springframework.transaction.interceptor.NameMa tchTransactionAttributeSource">
<property name="nameMap">
<map>
<entry key="ajouter*">
<ref local="propagationRequiredAttribute"/>
</entry>
<entry key="cloturer*">
<ref local="propagationRequiredAttribute"/>
</entry>
<entry key="modifier*">
<ref local="propagationRequiredAttribute"/>
</entry>
<entry key="*">
<ref local="propagationReadOnlyAttribute"/>
</entry>
</map>
</property>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.Transa ctionInterceptor">
<property name="transactionManager">
<ref local="transactionManager"/>
</property>
<property name="transactionAttributeSource">
<ref local="nameTransactionAttributeSource"/>
</property>
</bean>
<!-- Proxy -->
<bean id="auto" class="org.springframework.aop.framework.autoproxy.BeanNa meAutoProxyCreator">
<property name="interceptorNames">
<list>
<idref local="transactionInterceptor"/>
</list>
</property>
<property name="beanNames">
<list>
<idref local="dossierOAD"/>
<idref local="dossierService"/>
...
</list>
</property>
</bean>
<!-- Business Object -->
<bean id="dossierOAD" class="com.greisch.gestion.prestation.oad.JDBCDossier">
<property name="dataSource">
<ref local="dossier.dataSource"/>
</property>
</bean>
<bean id="dossierService" class="com.greisch.gestion.prestation.DossierServiceImpl">
<property name="dossierOAD">
<ref local="dossierOAD"/>
</property>
</bean>
...
</beans>
Thanks
I have some business data access and service objects accessing several databases.
These objects are "transactionned" using Spring (TransactionInterceptor, BeanNameAutoProxyCreator).
I want to cache the results of one method of one of the DAO.
How can I do that ?
Here's a summary of my application context :
<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyP laceholderConfigurer">
<property name="location">
<value>/prestation.properties</value>
</property>
</bean>
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundle MessageSource">
<property name="basename">
<value>messages</value>
</property>
</bean>
<!-- Datasource & Transaction -->
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBea n"/>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransaction Manager">
<property name="userTransaction">
<ref local="jotm"/>
</property>
</bean>
<bean id="dossier.dataSource" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
<property name="transactionManager">
<ref local="jotm"/>
</property>
<property name="driverName">
<value>${dossier.driverClassName}</value>
</property>
<property name="url">
<value>${dossier.url}</value>
</property>
<property name="user">
<value>${dossier.username}</value>
</property>
<property name="password">
<value>${dossier.password}</value>
</property>
</bean>
<bean id="prestation.dataSource" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
...
</bean>
<bean id="personnel.dataSource" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
...
</bean>
<bean id="propagationRequiredAttribute"
class="org.springframework.transaction.interceptor.Defaul tTransactionAttribute">
<property name="propagationBehaviorName">
<value>PROPAGATION_REQUIRED</value>
</property>
</bean>
<bean id="propagationReadOnlyAttribute"
class="org.springframework.transaction.interceptor.Defaul tTransactionAttribute">
<property name="propagationBehaviorName">
<value>PROPAGATION_REQUIRED,readOnly</value>
</property>
</bean>
<bean id="nameTransactionAttributeSource"
class="org.springframework.transaction.interceptor.NameMa tchTransactionAttributeSource">
<property name="nameMap">
<map>
<entry key="ajouter*">
<ref local="propagationRequiredAttribute"/>
</entry>
<entry key="cloturer*">
<ref local="propagationRequiredAttribute"/>
</entry>
<entry key="modifier*">
<ref local="propagationRequiredAttribute"/>
</entry>
<entry key="*">
<ref local="propagationReadOnlyAttribute"/>
</entry>
</map>
</property>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.Transa ctionInterceptor">
<property name="transactionManager">
<ref local="transactionManager"/>
</property>
<property name="transactionAttributeSource">
<ref local="nameTransactionAttributeSource"/>
</property>
</bean>
<!-- Proxy -->
<bean id="auto" class="org.springframework.aop.framework.autoproxy.BeanNa meAutoProxyCreator">
<property name="interceptorNames">
<list>
<idref local="transactionInterceptor"/>
</list>
</property>
<property name="beanNames">
<list>
<idref local="dossierOAD"/>
<idref local="dossierService"/>
...
</list>
</property>
</bean>
<!-- Business Object -->
<bean id="dossierOAD" class="com.greisch.gestion.prestation.oad.JDBCDossier">
<property name="dataSource">
<ref local="dossier.dataSource"/>
</property>
</bean>
<bean id="dossierService" class="com.greisch.gestion.prestation.DossierServiceImpl">
<property name="dossierOAD">
<ref local="dossierOAD"/>
</property>
</bean>
...
</beans>
Thanks