package com.berchina.util.rpc.demo.socket.pool2;
import java.net.InetSocketAddress;
import java.net.Socket;
import org.apache.commons.pool.BasePoolableObjectFactory;
import org.apache.commons.pool.impl.GenericObjectPool;
import org.apache.commons.pool.impl.GenericObjectPool.Config;
public class ConnectionPoolFactory {
private GenericObjectPool pool;
public ConnectionPoolFactory(Config config,String ip,int port){
ConnectionFactory factory = new ConnectionFactory(ip, port);
pool = new GenericObjectPool(factory, config);
}
public Socket getConnection() throws Exception{
return (Socket)pool.borrowObject();
}
public void releaseConnection(Socket socket){
try{
pool.returnObject(socket);
}catch(Exception e){
System.out.println("释放连接错误");
if(socket != null){
try{
socket.close();
}catch(Exception ex){
//
}
}
}
}
/**
* inner
* @author qing
*
*/
class ConnectionFactory extends BasePoolableObjectFactory {
private InetSocketAddress address;
public ConnectionFactory(String ip,int port){
address = new InetSocketAddress(ip, port);
}
@Override
public Object makeObject() throws Exception {
Socket socket = new Socket();
socket.connect(address);
return socket;
}
public void destroyObject(Object obj) throws Exception {
if(obj instanceof Socket){
((Socket)obj).close();
}
}
public boolean validateObject(Object obj) {
if(obj instanceof Socket){
Socket socket = ((Socket)obj);
if(!socket.isConnected()){
return false;
}
if(socket.isClosed()){
return false;
}
return true;
}
return false;
}
}
}
转载于:https://my.oschina.net/u/864135/blog/814055