public class ConnectionParam implements Serializable
{
 private String driver;    //数据库驱动程序
 private String url;     //数据连接的URL
 private String user;     //数据库用户名
 private String password;    //数据库密码
 private int minConnection = 0;  //初始化连接数
 private int maxConnection = 50;  //最大连接数
 private long timeoutValue = 600000;//连接的最大空闲时间
 private long waitTime = 30000;  //取连接的时候如果没有可用连接最大的等待时间  其次是连接池的工厂类ConnectionFactory,通过该类来将一个连接池对象与一个名称对应起来,使用者通过该名称就可以获取指定的连接池对象,具体代码如下:/**
 * 连接池类厂,该类常用来保存多个数据源名称合数据库连接池对应的哈希
 * @author liusoft
 */
public class ConnectionFactory
{
 //该哈希表用来保存数据源名和连接池对象的关系表
 static Hashtable connectionPools = null;
 static{
  connectionPools = new Hashtable(2,0.75F);
 } 
 /**
  * 从连接池工厂中获取指定名称对应的连接池对象
  * @param dataSource 连接池对象对应的名称
  * @return DataSource 返回名称对应的连接池对象
  * @throws NameNotFoundException 无法找到指定的连接池
  */
 public static DataSource lookup(String dataSource) 
  throws NameNotFoundException
 {
  Object ds = null;
  ds = connectionPools.get(dataSource);
  if(ds == null || !(ds instanceof DataSource))
   throw new NameNotFoundException(dataSource);
  return (DataSource)ds;
 } /**
  * 将指定的名字和数据库连接配置绑定在一起并初始化数据库连接池
  * @param name  对应连接池的名称
  * @param param 连接池的配置参数,具体请见类ConnectionParam
  * @return DataSource 如果绑定成功后返回连接池对象
  * @throws NameAlreadyBoundException 一定名字name已经绑定则抛出该异常
  * @throws ClassNotFoundException  无法找到连接池的配置中的驱动程序类
  * @throws IllegalAccessException  连接池配置中的驱动程序类有误
  * @throws InstantiationException  无法实例化驱动程序类
  * @throws SQLException    无法正常连接指定的数据库
  */
 public static DataSource bind(String name, ConnectionParam param)
  throws NameAlreadyBoundException,ClassNotFoundException,
    IllegalAccessException,InstantiationException,SQLException
 {
  DataSourceImpl source = null;
  try{
   lookup(name);
   throw new NameAlreadyBoundException(name);
  }catch(NameNotFoundException e){
   source = new DataSourceImpl(param);
   source.initConnection();
   connectionPools.put(name, source);
  }
  return source;
 }
 /**
  * 重新绑定数据库连接池
  * @param name  对应连接池的名称
  * @param param 连接池的配置参数,具体请见类ConnectionParam
  * @return DataSource 如果绑定成功后返回连接池对象
  * @throws NameAlreadyBoundException 一定名字name已经绑定则抛出该异常
  * @throws ClassNotFoundException  无法找到连接池的配置中的驱动程序类
  * @throws IllegalAccessException  连接池配置中的驱动程序类有误
  * @throws InstantiationException  无法实例化驱动程序类
  * @throws SQLException    无法正常连接指定的数据库
  */
 public static DataSource rebind(String name, ConnectionParam param)
  throws NameAlreadyBoundException,ClassNotFoundException,
    IllegalAccessException,InstantiationException,SQLException
 {
  try{
   unbind(name);
  }catch(Exception e){}
  return bind(name, param);
 }
 /**
  * 删除一个数据库连接池对象
  * @param name
  * @throws NameNotFoundException
  */
 public static void unbind(String name) throws NameNotFoundException
 {
  DataSource dataSource = lookup(name);
  if(dataSource instanceof DataSourceImpl){
   DataSourceImpl dsi = (DataSourceImpl)dataSource;
   try{
    dsi.stop();
    dsi.close();
   }catch(Exception e){
   }finally{
    dsi = null;
   }
  }
  connectionPools.remove(name);
 }
 
}