/** * */ package com.ganji.as.thrift.protocol.client.socket.async.pool; import org.apache.commons.pool2.PooledObject; import org.apache.commons.pool2.PooledObjectFactory; import org.apache.commons.pool2.impl.DefaultPooledObject; /** * @author yikangfeng * @date 2015年8月27日 */ class PooledSocketConnectionFactory implements PooledObjectFactory<SocketConnection> { static public PooledObjectFactory<SocketConnection> factory( final String hostName, final int port, final int tcpConnectionTimeout) { return new PooledSocketConnectionFactory(hostName, port, tcpConnectionTimeout); } final private String hostName_; final private int port_; final private int tcpConnectionTimeout_; private PooledSocketConnectionFactory(final String hostName, final int port, final int tcpConnectionTimeout) { this.hostName_ = hostName; this.port_ = port; this.tcpConnectionTimeout_ = tcpConnectionTimeout; } @Override public PooledObject<SocketConnection> makeObject() throws Exception { // TODO Auto-generated method stub return new DefaultPooledObject<SocketConnection>( new SocketConnectionProxy(this.hostName_, this.port_, this.tcpConnectionTimeout_)); } @Override public void destroyObject(final PooledObject<SocketConnection> p) throws Exception { // TODO Auto-generated method stub SocketConnection socketConnectionProxy = p.getObject(); socketConnectionProxy.setAlive(false); socketConnectionProxy.get().close(); socketConnectionProxy.close(); socketConnectionProxy = null;// Help GC. } @Override public boolean validateObject(final PooledObject<SocketConnection> p) { // TODO Auto-generated method stub return p.getObject() != null && p.getObject().isAlive() && p.getObject().get().isOpen(); } @Override public void activateObject(final PooledObject<SocketConnection> p) throws Exception { // TODO Auto-generated method stub final SocketConnection socketConnectionProxy = p.getObject(); socketConnectionProxy.setAlive(true); } @Override public void passivateObject(final PooledObject<SocketConnection> p) throws Exception { // TODO Auto-generated method stub final SocketConnection socketConnectionProxy = p.getObject(); socketConnectionProxy.setAlive(false); } }