package com.lefu.remote.netty.client.pool; import io.netty.channel.Channel; import io.netty.channel.ChannelFutureListener; import org.apache.commons.pool2.PooledObject; import org.apache.commons.pool2.PooledObjectFactory; import org.apache.commons.pool2.impl.DefaultPooledObject; import com.lefu.remote.netty.client.NettyClient; public class ChannelPooledObjectFactory implements PooledObjectFactory<Channel> { private final NettyClient nettyClient; private final String host; private final int port; public ChannelPooledObjectFactory(NettyClient nettyClient, String host, int port) { this.nettyClient = nettyClient; this.host = host; this.port = port; } @Override public PooledObject<Channel> makeObject() throws Exception { Channel channel = nettyClient.connect(host, port); return new DefaultPooledObject<Channel>(channel); } @Override public void destroyObject(PooledObject<Channel> p) throws Exception { p.getObject().close().addListener(ChannelFutureListener.CLOSE); } @Override public boolean validateObject(PooledObject<Channel> p) { return p.getObject().isActive(); } @Override public void activateObject(PooledObject<Channel> p) throws Exception { // do nothing } @Override public void passivateObject(PooledObject<Channel> p) throws Exception { // do nothing } }