/**
*
*/
package com.ganji.as.thrift.protocol.client.socket.async.pool;
import java.util.Iterator;
import java.util.ServiceLoader;
import com.ganji.as.thrift.protocol.builder.ClientBuildingConfig;
/**
* @author yikangfeng
* @date 2015年7月21日
*/
public abstract class SocketConnectionPoolFactory {
static private ServiceLoader<SocketConnectionPoolProvider> serviceLoader = ServiceLoader
.load(SocketConnectionPoolProvider.class);
static private SocketConnectionPoolFactory This;
static public SocketConnectionPoolFactory factory() {
if (This == null) {
synchronized (SocketConnectionPoolFactory.class) {
if (This == null) {
This = new SocketConnectionPoolFactory() {
};
}
}
}
return This;
}
public SocketConnectionPool createSocketConnectionPool(
final ClientBuildingConfig clientBuildingConfig) throws Throwable {
if (clientBuildingConfig == null)
throw new NullPointerException("The client config is illegal.");
SocketConnectionPool socketConnectionPool = null;
SocketConnectionPoolProvider _socketConnectionProvider;
final Iterator<SocketConnectionPoolProvider> serviceLoaderIterator = serviceLoader
.iterator();
while (serviceLoaderIterator.hasNext()) {
_socketConnectionProvider = serviceLoaderIterator.next();
if (!(_socketConnectionProvider == null))
return socketConnectionPool = _socketConnectionProvider
.provider(clientBuildingConfig);
}
return socketConnectionPool;
}
}