先贴2个小例子!
applicationContext-a.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <bean id="jndiDataSource"
- class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName">
- <value>OracleDataSource</value>
- </property>
- </bean>
- <!--
- <bean id="jndiDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName">
- <value>oracle.jdbc.driver.OracleDriver</value>
- </property>
- <property name="url">
- <value>url地址</value>
- </property>
- <property name="username">
- <value>用户</value>
- </property>
- <property name="password">
- <value>密码</value>
- </property>
- </bean>
- -->
- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref bean="jndiDataSource"/>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.Oracle9Dialect
- </prop>
- <prop key="hibernate.show_sql">
- false
- </prop>
- <prop key="hibernate.query.factory_class">
- org.hibernate.hql.classic.ClassicQueryTranslatorFactory
- </prop>
- </props>
- </property>
- <property name="mappingResources">
- <list>
- <value>cn/ccb/faengine/mapxml/ParamEssentials.hbm.xml</value>
- <value>cn/ccb/faengine/mapxml/AccountCalEssentials.hbm.xml</value>
- </list>
- </property>
- </bean>
- <bean id="commonJdbcDAO"
- class="cn.ccb.faengine.common.dao.jdbc.impl.CommonJdbcDAO">
- <property name="jdbcTemplate">
- <ref bean="jdbcTemplate" />
- </property>
- </bean>
- <bean id="commonHibernateDAO"
- class="cn.ccb.faengine.common.dao.hibernate.impl.CommonHibernateDAO">
- <property name="hibernateTemplate">
- <ref bean="hibernateTemplate" />
- </property>
- </bean>
- <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
- <property name="sessionFactory">
- <ref bean="sessionFactory"/>
- </property>
- </bean>
- <bean id="jdbcTemplate"
- class="org.springframework.jdbc.core.JdbcTemplate">
- <property name="dataSource">
- <ref bean="jndiDataSource" />
- </property>
- </bean>
- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory">
- <ref bean="sessionFactory"/>
- </property>
- </bean>
- <bean id="baseTransactionProxy"
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
- <property name="transactionManager" ref="transactionManager"/>
- <property name="transactionAttributeSource">
- <ref bean="reqNamingTransactionAttribute" />
- </property>
- </bean>
- <bean id="reqNamingTransactionAttribute"
- class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
- <property name="properties">
- <props>
- <prop key="*">
- PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
- </prop>
- </props>
- </property>
- </bean>
- <!-- jta事务拦截-->
- <bean id="jtaReqBaseTransactionProxy"
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
- abstract="true">
- <property name="transactionManager" ref="jtaTransactionManager"/>
- <property name="transactionAttributeSource">
- <ref bean="reqNamingTransactionAttribute" />
- </property>
- </bean>
- <!-- jta事务管理-->
- <bean id="jtaTransactionManager"
- class="org.springframework.transaction.jta.JtaTransactionManager">
- </bean>
- <!-- jta事务拦截-->
- <bean id="jtaBaseTransactionProxy"
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
- abstract="true">
- <property name="transactionManager" ref="jtaTransactionManager"/>
- <property name="transactionAttributeSource">
- <ref bean="reqNamingTransactionAttribute" />
- </property>
- </bean>
- </beans>
applicationContext-b.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <bean id="requestUCC" parent="baseTransactionProxy">
- <property name="target" ref="TargetRequestUCC" />
- </bean>
- <bean id="TargetRequestUCC"
- class="cn.ccb.faengine.sysmanage.request.ucc.impl.RequestUCCImpl">
- <property name="hibernateDAO">
- <ref bean="commonHibernateDAO" />
- </property>
- </bean>
- <!-- 增加UCC and BS 20100420 linwei begin -->
- <bean id="modelMappingUCC" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <property name="proxyInterfaces">
- <list>
- <value>cn.ccb.faengine.foundation.model.commoncorporation.helper.ucc.IModelMappingUCC</value>
- </list>
- </property>
- <property name="target">
- <ref bean="modelMappingUCCTarget"/>
- </property>
- <property name="transactionManager">
- <ref bean="transactionManager"/>
- </property>
- <property name="transactionAttributeSource">
- <ref bean="reqNamingTransactionAttribute"/>
- </property>
- </bean>
- <bean id="modelMappingUCCTarget" class="cn.ccb.faengine.foundation.model.commoncorporation.helper.ucc.impl.ModelMappingUCCImpl">
- <property name="modelMappingBS">
- <ref bean="modelMappingBS"/>
- </property>
- </bean>
- <bean id="modelMappingBS" class="cn.ccb.faengine.foundation.model.commoncorporation.helper.bizservice.impl.ModelMappingBSImpl">
- <property name="hibernateDAO">
- <ref bean="commonHibernateDAO"/>
- </property>
- </bean>
- <!-- 增加UCC and BS 20100420 linwei end -->
- </beans>
说明:
第一种声明事务实现方式:
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributeSource">
<ref bean="reqNamingTransactionAttribute"/>
</property>
需要代理的事务中,通过这两个属性进行了事务管理。
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="reqNamingTransactionAttribute"
class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
<property name="properties">
<props>
<prop key="*">
PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
</prop>
</props>
</property>
</bean>
有这2个Bean,可以进行事务上的管理控制了!
第二种声明事务实现方式:
<bean id="requestUCC" parent="baseTransactionProxy">
<property name="target" ref="TargetRequestUCC" />
</bean>
<bean id="TargetRequestUCC"
class="cn.ccb.faengine.sysmanage.request.ucc.impl.RequestUCCImpl">
<property name="hibernateDAO">
<ref bean="commonHibernateDAO" />
</property>
</bean>
这种方式继承了 父类 parent="baseTransactionProxy" 这个Bean的事务管理方式
<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributeSource">
<ref bean="reqNamingTransactionAttribute" />
</property>
</bean>