分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]

让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();
  }
 }

}

测试已经能正常工作了^^准备休息,累了...

分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]