Spring transaction practice, an error example:
package lin;
import lin.dao.impl.ExchangeDaoLocator;
import lin.dao.impl.TestDaoLocator;
import lin.domain.Exchange;
import lin.domain.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
public class DbTest {
public static void main(String[] args) {
try {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate");
jdbcTemplate.execute("select * from dual");
ExchangeDaoLocator locator1 = (ExchangeDaoLocator) applicationContext.getBean("exchangeDaoLocator");
Exchange exchange = locator1.findById("HK");
System.out.println(exchange.getExchangeCode());
TestDaoLocator locator2 = (TestDaoLocator) applicationContext.getBean("testDaoLocator");
Test test = locator2.findById("1");
System.out.println(test.getC2());
System.out.println("----------------End----------------");
} catch (Exception e) {
e.printStackTrace();
}
}
}
<bean id="abstractDaoLocator" class="lin.dao.AbstractDaoLocator" abstract="true"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="exchangeDaoLocator" class="lin.dao.impl.ExchangeDaoLocator" parent="abstractDaoLocator"> </bean> <bean id="testDaoLocator" class="lin.dao.impl.TestDaoLocator" parent="abstractDaoLocator"> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> <property name="defaultTimeout" value="15"/> <property name="rollbackOnCommitFailure" value="true"/> </bean> <aop:config> <!-- Normal Example --> <aop:advisor pointcut="execution(* lin.DbTest..*(..))" advice-ref="requiresNewTxAdvice" /> <!-- Wrong Example - java.lang.ClassCastException: $Proxy8 incompatible with lin.dao.impl.ExchangeDaoLocator --> <aop:advisor pointcut="execution(* lin.dao.impl.*.findById(..))" advice-ref="requiresNewTxAdvice" /> </aop:config> <tx:advice id="requiresNewTxAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRES_NEW" /> </tx:attributes> </tx:advice>