Spring3 整合Hibernate3.5 动态切换SessionFactory (切换数据库方言)(三)
amework.spring.support.core.DynamicSessionFactory;
/**
* function: 重写HibernateTransactionManager事务管理器,实现自己的动态的事务管理器
* @author hoojo
* @createDate 2013-10-12 下午03:54:02
* @file DynamicTransactionManager.java
* @package com.hoo.framework.spring.support.tx
* @project SHMB
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class DynamicTransactionManager extends HibernateTransactionManager {
private static final long serialVersionUID = -4655721479296819154L;
/**
* @see org.springframework.orm.hibernate4.HibernateTransactionManager#getDataSource()
* function: 重写
* @author hoojo
* @createDate 2013-10-12 下午03:55:24
*/
@Override
public DataSource getDataSource() {
return SessionFactoryUtils.getDataSource(getSessionFactory());
}
/**
* @see org.springframework.orm.hibernate4.HibernateTransactionManager#getSessionFactory()
* function: 重写
* @author hoojo
* @createDate 2013-10-12 下午03:55:24
*/
@Override
public SessionFactory getSessionFactory() {
DynamicSessionFactory dynamicSessionFactory = (DynamicSessionFactory) super.getSessionFactory();
SessionFactory hibernateSessionFactory = dynamicSessionFactory.getHibernateSessionFactory();
return hibernateSessionFactory;
}
}
这里主要重写getDataSource()/getSessionFactory()这两个方法,getSessionFactory方法是利用我们上面定义的接口来动态获取我们在上下文(CustomerContextHolder)中定义切换的SessionFactory对象。而getDataSource则是获得动态SessionFactory的DataSource,这里也不难理解。
4、至此,重写的接口和实现都完成,下面开始配置相关的代码
< xml version="1.0" encoding="UTF-8" >
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">