????ConnectionFactory?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

String name = "pool";
String driver = " sun.jdbc.odbc.JdbcOdbcDriver ";
String url = "jdbc:odbc:datasource";
ConnectionParam param = new ConnectionParam(driver??url??null??null);
param.setMinConnection(1);
param.setMaxConnection(5);
param.setTimeoutValue(20000);
ConnectionFactory.bind(name?? param);
System.out.println("bind datasource ok.");

????//????????????????????????????ò?????????????????????μ???

????//????????????????????д?????

DataSource ds = ConnectionFactory.lookup(name);
try{
for(int i=0;i<10;i++){
Connection conn = ds.getConnection();
try{
testSQL(conn?? sql);
}finally{
try{
conn.close();
}catch(Exception e){}
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
ConnectionFactory.unbind(name);
System.out.println("unbind datasource ok.");
System.exit(0);
}

????????????????????????????????????????????????????????????????????????????ν?????close????????????????????ConnectionFactory?е????????

????source = new DataSourceImpl(param);

????source.initConnection();

????DataSourceImpl????????????javax.sql.DataSource???????????????????????????????????????????????????????????????????н??DataSource?ж??????????????????з????????????????????????????????????????????????????getConnection

/**
* @see javax.sql.DataSource#getConnection(String??String)
*/
public Connection getConnection(String user?? String password) throws SQLException
{
//??????????????????е????
Connection conn = getFreeConnection(0);
if(conn == null){
//?ж???????????????????????????????
//???????????????п?????????????????????????????????
if(getConnectionCount() >= connParam.getMaxConnection())
conn = getFreeConnection(connParam.getWaitTime());
else{//??г??????????????????????????????
connParam.setUser(user);
connParam.setPassword(password);
Connection conn2 = DriverManager.getConnection(connParam.getUrl()??
user?? password);
//??????????????????
_Connection _conn = new _Connection(conn2??true);
synchronized(conns){
conns.add(_conn);
}
conn = _conn.getConnection();
}
}
return conn;
}
/**
* ????????????????е?????
* @param nTimeout ????ò?????0???????????????????null
* ?????????nTimeout????????п???????????????????
* @return Connection
* @throws SQLException
*/
protected synchronized Connection getFreeConnection(long nTimeout)
throws SQLException
{
Connection conn = null;
Iterator iter = conns.iterator();
while(iter.hasNext()){
_Connection _conn = (_Connection)iter.next();
if(!_conn.isInUse()){
conn = _conn.getConnection();
_conn.setInUse(true);
break;
}
}
if(conn == null && nTimeout > 0){
//???nTimeout???????????п???????
try{
Thread.sleep(nTimeout);
}catch(Exception e){}
conn = getFreeConnection(0);
if(conn == null)
throw new SQLException("??п?????????????");
}
return conn;
}