让ibatis插上c3p0的翅膀
2008/11/05 01:29 | by edwardproAdmin ]
ibatis真是个不错的东西,它特别合适小型的数据库应用使用,不过它的连接池比较简单,估计很难适应真正的生产环境,得改改,其实之前网上也看到别人写的,但是我不是很明白意图...
其实这个ds只需要继承一个接口,首先来看看接口是什么样子的:
package com.ibatis.sqlmap.engine.datasource;
import javax.sql.DataSource;
import java.util.Map;
/**
* Interface to provide a way to create and configure a DataSource for iBATIS
*/
public interface DataSourceFactory {
/**
* Simple method to initialize/configure a datasource
*
* @param map - the configuration information
*/
public void initialize(Map map);
/**
* Returns a datasource
*
* @return an implementation of DataSource
*/
public DataSource getDataSource();
}
目的是很明确,只需要解决初始化和get两个方法,第一个是真正的参数初始化方法,后一个是系统得到ds对象的方法,目标明确了,这样下一步操作就简单了,看我写的:
public class C3p0DataSource implements DataSourceFactory {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(C3p0DataSource.class);
private DataSource ds;
private static final String DB_URL = "JDBC.ConnectionURL";
private static final String DB_USER = "JDBC.Username";
private static final String DB_PASS = "JDBC.Password";
private static final String DB_DRIVER = "JDBC.Driver";
private String dbUrl;
private String dbUser;
private String dbPass;
private String dbDriver;
public C3p0DataSource() {
logger.info("start for c3p0 ds");
}
@Override
public DataSource getDataSource() {
// TODO Auto-generated method stub
return this.ds;
}
@Override
public void initialize(Map map) {
// TODO Auto-generated method stub
this.setDbUrl(String.valueOf(map.get(C3p0DataSource.DB_URL)));
this.setDbUser(String.valueOf(map.get(C3p0DataSource.DB_USER)));
this.setDbPass(String.valueOf(map.get(C3p0DataSource.DB_PASS)));
this.setDbDriver(String.valueOf(map.get(C3p0DataSource.DB_DRIVER)));
try {
Class.forName(this.getDbDriver());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
this.ds = DataSources.unpooledDataSource(this.getDbUrl(), this
.getDbUser(), this.getDbPass());
this.ds = DataSources.pooledDataSource(this.ds);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
测试已经能正常工作了^^准备休息,累了...



