/** @(#)DefaultConnectionProviderImpl.java 0.1 05/11/17
*
* Copyright 2010 QISI, Inc. All rights reserved.
* QISI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*/packagecom.qidea.thrift.pool;importorg.apache.commons.pool.ObjectPool;importorg.apache.commons.pool.impl.GenericObjectPool;importorg.apache.thrift.transport.TSocket;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.DisposableBean;importorg.springframework.beans.factory.InitializingBean;/***
*@authorsunwei
*@version2010-8-10
*@sinceJDK1.5*/publicclassGenericConnectionProviderimplementsConnectionProvider,
InitializingBean, DisposableBean
{publicstaticfinalLogger logger=LoggerFactory
.getLogger(GenericConnectionProvider.class);/**服务的IP地址*/privateString serviceIP;/**服务的端口*/privateintservicePort;/**连接超时配置*/privateintconTimeOut;/**可以从缓存池中分配对象的最大数量*/privateintmaxActive=GenericObjectPool.DEFAULT_MAX_ACTIVE;/**缓存池中最大空闲对象数量*/privateintmaxIdle=GenericObjectPool.DEFAULT_MAX_IDLE;/**缓存池中最小空闲对象数量*/privateintminIdle=GenericObjectPool.DEFAULT_MIN_IDLE;/**阻塞的最大数量*/privatelongmaxWait=GenericObjectPool.DEFAULT_MAX_WAIT;/**从缓存池中分配对象,是否执行PoolableObjectFactory.validateObject方法*/privatebooleantestOnBorrow=GenericObjectPool.DEFAULT_TEST_ON_BORROW;privatebooleantestOnReturn=GenericObjectPool.DEFAULT_TEST_ON_RETURN;privatebooleantestWhileIdle=GenericObjectPool.DEFAULT_TEST_WHILE_IDLE;/**对象缓存池*/privateObjectPool objectPool=null;/****/@OverridepublicvoidafterPropertiesSet()throwsException
{//对象池objectPool=newGenericObjectPool();//((GenericObjectPool) objectPool).setMaxActive(maxActive);
((GenericObjectPool) objectPool).setMaxIdle(maxIdle);
((GenericObjectPool) objectPool).setMinIdle(minIdle);
((GenericObjectPool) objectPool).setMaxWait(maxWait);
((GenericObjectPool) objectPool).setTestOnBorrow(testOnBorrow);
((GenericObjectPool) objectPool).setTestOnReturn(testOnReturn);
((GenericObjectPool) objectPool).setTestWhileIdle(testWhileIdle);
((GenericObjectPool) objectPool)
.setWhenExhaustedAction(GenericObjectPool.WHEN_EXHAUSTED_BLOCK);//设置factoryThriftPoolableObjectFactory thriftPoolableObjectFactory=newThriftPoolableObjectFactory(
serviceIP, servicePort, conTimeOut);
objectPool.setFactory(thriftPoolableObjectFactory);
}
@Overridepublicvoiddestroy()
{try{
objectPool.close();
}catch(Exception e)
{thrownewRuntimeException("erorr destroy()", e);
}
}
@OverridepublicTSocket getConnection()
{try{
TSocket socket=(TSocket) objectPool.borrowObject();returnsocket;
}catch(Exception e)
{thrownewRuntimeException("error getConnection()", e);
}
}
@OverridepublicvoidreturnCon(TSocket socket)
{try{
objectPool.returnObject(socket);
}catch(Exception e)
{thrownewRuntimeException("error returnCon()", e);
}
}publicString getServiceIP()
{returnserviceIP;
}publicvoidsetServiceIP(String serviceIP)
{this.serviceIP=serviceIP;
}publicintgetServicePort()
{returnservicePort;
}publicvoidsetServicePort(intservicePort)
{this.servicePort=servicePort;
}publicintgetConTimeOut()
{returnconTimeOut;
}publicvoidsetConTimeOut(intconTimeOut)
{this.conTimeOut=conTimeOut;
}publicintgetMaxActive()
{returnmaxActive;
}publicvoidsetMaxActive(intmaxActive)
{this.maxActive=maxActive;
}publicintgetMaxIdle()
{returnmaxIdle;
}publicvoidsetMaxIdle(intmaxIdle)
{this.maxIdle=maxIdle;
}publicintgetMinIdle()
{returnminIdle;
}publicvoidsetMinIdle(intminIdle)
{this.minIdle=minIdle;
}publiclonggetMaxWait()
{returnmaxWait;
}publicvoidsetMaxWait(longmaxWait)
{this.maxWait=maxWait;
}publicbooleanisTestOnBorrow()
{returntestOnBorrow;
}publicvoidsetTestOnBorrow(booleantestOnBorrow)
{this.testOnBorrow=testOnBorrow;
}publicbooleanisTestOnReturn()
{returntestOnReturn;
}publicvoidsetTestOnReturn(booleantestOnReturn)
{this.testOnReturn=testOnReturn;
}publicbooleanisTestWhileIdle()
{returntestWhileIdle;
}publicvoidsetTestWhileIdle(booleantestWhileIdle)
{this.testWhileIdle=testWhileIdle;
}publicObjectPool getObjectPool()
{returnobjectPool;
}publicvoidsetObjectPool(ObjectPool objectPool)
{this.objectPool=objectPool;
}
}