/**
* Alipay.com Inc.
* Copyright (c) 2004-2012 All Rights Reserved.
*/
package com.alipay.zdal.datasource;
import org.apache.log4j.Logger;
import com.alipay.zdal.datasource.resource.adapter.jdbc.local.LocalTxDataSource;
import com.alipay.zdal.datasource.resource.connectionmanager.CachedConnectionManager;
import com.alipay.zdal.datasource.tm.TxManager;
/**
* ����Դ���������࣬�ṩ����Դ�Ĵ���������
*
* @author liangjie.li
*
*/
public final class ZDataSourceFactory {
private static final TxManager defaultTransactionManager = TxManager
.getInstance();
private static final Logger logger = Logger
.getLogger(ZDataSourceFactory.class);
private static final CachedConnectionManager defaultCachedConnectionManager = new CachedConnectionManager();
/**
* �����µ�����Դ
*
* @param dataSourceDO
* @return com.alipay.zdatasource.resource.adapter.jdbc.local.LocalTxDataSource
* @throws Exception
*/
public static LocalTxDataSource createLocalTxDataSource(LocalTxDataSourceDO dataSourceDO,
ZDataSource zdatasource)
throws Exception {
return ZDataSourceFactory.createLocalTxDataSource(dataSourceDO, null, null, zdatasource);
}
/**
* �����µ�����Դ
*
* @param dataSourceDO
* @param transactionManager
* @param cachedConnectionManager
* @param configRoot
* @return com.alipay.zdatasource.resource.adapter.jdbc.local.LocalTxDataSource
* @throws Exception
*/
public static LocalTxDataSource createLocalTxDataSource(
LocalTxDataSourceDO dataSourceDO,
TxManager transactionManager,
CachedConnectionManager cachedConnectionManager,
ZDataSource zdatasource)
throws Exception {
if (null == dataSourceDO) {
throw new Exception("dataSource config is Empty!");
}
LocalTxDataSource localTxDataSource = new LocalTxDataSource();
// �������ӻ�������������������ʹ�ø����ģ����ûָ����Ĭ�ϸ�һ��
if (null != cachedConnectionManager) {
localTxDataSource.setCachedConnectionManager(cachedConnectionManager);
} else {
localTxDataSource.setCachedConnectionManager(defaultCachedConnectionManager);
}
// ������������������������ʹ�ø����ģ����û����Ĭ�ϸ��Ը�
if (null != transactionManager) {
localTxDataSource.setTransactionManager(transactionManager);
} else {
localTxDataSource.setTransactionManager(defaultTransactionManager);
}
// �������Դ
fillLocalTxDataSource(dataSourceDO, localTxDataSource);
// ��ʼ������Դ
localTxDataSource.init(zdatasource);
return localTxDataSource;
}
/**
*
*
* @param dataSourceDO
* @param localTxDataSource
* @param configRoot
* @throws Exception
*/
public static void fillLocalTxDataSource(LocalTxDataSourceDO dataSourceDO,
LocalTxDataSource localTxDataSource) throws Exception {
if (null == dataSourceDO) {
throw new RuntimeException("dataSource config is Empty!");
}
localTxDataSource.setName(dataSourceDO.getDsName());
localTxDataSource.setBackgroundValidation(dataSourceDO.isBackgroundValidation());
localTxDataSource.setBackGroundValidationMinutes(dataSourceDO
.getBackgroundValidationMinutes());
localTxDataSource.setBlockingTimeoutMillis(dataSourceDO.getBlockingTimeoutMillis());
localTxDataSource.setCheckValidConnectionSQL(dataSourceDO.getCheckValidConnectionSQL());
localTxDataSource.setConnectionProperties(dataSourceDO.getConnectionProperties());
localTxDataSource.setConnectionURL(dataSourceDO.getConnectionURL());
localTxDataSource.setDriverClass(dataSourceDO.getDriverClass());
localTxDataSource.setExceptionSorterClassName(dataSourceDO.getExceptionSorterClassName());
localTxDataSource.setIdleTimeoutMinutes(dataSourceDO.getIdleTimeoutMinutes());
localTxDataSource.setMaxSize(dataSourceDO.getMaxPoolSize());
localTxDataSource.setMinSize(dataSourceDO.getMinPoolSize());
localTxDataSource.setNewConnectionSQL(dataSourceDO.getNewConnectionSQL());
localTxDataSource.setNoTxSeparatePools(dataSourceDO.isNoTxSeparatePools());
localTxDataSource.setPassword(dataSourceDO.getPassWord());
localTxDataSource.setEncPassword(dataSourceDO.getEncPassword());
localTxDataSource.setPrefill(dataSourceDO.isPrefill());
localTxDataSource.setPreparedStatementCacheSize(dataSourceDO
.getPreparedStatementCacheSize());
localTxDataSource.setQueryTimeout(dataSourceDO.getQueryTimeout());
localTxDataSource.setSharePreparedStatements(dataSourceDO.isSharePreparedStatements());
localTxDataSource.setTrackStatements(dataSourceDO.getTrackStatements());
localTxDataSource.setTransactionIsolation(dataSourceDO.getTransactionIsolation());
localTxDataSource.setTxQueryTimeout(dataSourceDO.isTxQueryTimeout());
localTxDataSource.setUseFastFail(dataSourceDO.isUseFastFail());
localTxDataSource.setUserName(dataSourceDO.getUserName());
localTxDataSource.setValidateOnMatch(dataSourceDO.isValidateOnMatch());
localTxDataSource.setValidConnectionCheckerClassName(dataSourceDO
.getValidConnectionCheckerClassName());
localTxDataSource.setCriteria(dataSourceDO.getCriteria());
}
/**
* ���ٵ�ǰ������Դ
*
* @param localTxDataSource
* @throws Exception
*/
public static void destroy(LocalTxDataSource localTxDataSource) throws Exception {
if (null != localTxDataSource) {
localTxDataSource.destroy();
logger.warn("�Ѿ���������Դ �� " + localTxDataSource.getBeanName());
}
}
private ZDataSourceFactory() {
}
}