Package javacommon

Source Code of javacommon.SqlSessionFactoryFactoryBean

package javacommon;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.parsing.XNode;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
import org.springframework.util.Assert;
/**
* @author badqiu
*/
public class SqlSessionFactoryFactoryBean implements FactoryBean,InitializingBean{
  Log logger = LogFactory.getLog(SqlSessionFactoryFactoryBean.class);
  private Resource configLocation;
  private Resource[] mapperLocations;
  private DataSource dataSource;
  private boolean useTransactionAwareDataSource = true;
 
  SqlSessionFactory sqlSessionFactory;
  public void afterPropertiesSet() throws Exception {
    Assert.notNull(configLocation,"configLocation must be not null");
   
    sqlSessionFactory = createSqlSessionFactory();
  }

  private SqlSessionFactory createSqlSessionFactory() throws IOException {
    Reader reader = new InputStreamReader(getConfigLocation().getInputStream());
    try {
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
      Configuration conf = sqlSessionFactory.getConfiguration();
      if(dataSource != null) {
        DataSource dataSourceToUse = this.dataSource;
        if (this.useTransactionAwareDataSource  && !(this.dataSource instanceof TransactionAwareDataSourceProxy)) { 
                dataSourceToUse = new TransactionAwareDataSourceProxy(this.dataSource)
            }
       
        conf.setEnvironment(new Environment("development",new ManagedTransactionFactory(),dataSourceToUse));
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(conf);
      }
     
      if(mapperLocations != null) {
        Map<String, XNode> sqlFragments = new HashMap<String, XNode>();
        for(Resource r : mapperLocations) {
          logger.info("Loading iBatis3 mapper xml from file["+r.getFile().getAbsolutePath()+"]");
         
          Reader mapperReader = new InputStreamReader(r.getInputStream());
          try {
            XMLMapperBuilder mapperBuilder = new XMLMapperBuilder(mapperReader,conf,r.getFile().getAbsolutePath(),sqlFragments);
            mapperBuilder.parse();
          }finally {
            mapperReader.close();
          }
        }
      }
      return sqlSessionFactory;
    }finally {
      reader.close();
    }
  }
 
  public Object getObject() throws Exception {
    return sqlSessionFactory;
  }
 
  public DataSource getDataSource() {
    return dataSource;
  }

  public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
  }

  public Class getObjectType() {
    return SqlSessionFactory.class;
  }

  public boolean isSingleton() {
    return true;
  }

  public Resource getConfigLocation() {
    return configLocation;
  }

  public void setConfigLocation(Resource configurationFile) {
    this.configLocation = configurationFile;
  }

  public void setMapperLocations(Resource[] mapperLocations) {
    this.mapperLocations = mapperLocations;
  }

}
TOP

Related Classes of javacommon.SqlSessionFactoryFactoryBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.