class InstanceProviderManager {

    InstanceProvider getClassProvider(String className, String providerName, HostnameResolver hostnameResolver) {
        final String classKey = className + "-" + providerName;
        InstanceProvider provider = providerMap.get(classKey);
        if (provider != null) {
            return provider;
        }
        Class<?> instanceClass;
        try {
            instanceClass = Class.forName(className);
        } catch (ClassNotFoundException e) {
            LOGGER.error("getClassInstance: Provider class {} not found", className);
            return null;
        }
        try {
            provider = (InstanceProvider) instanceClass.newInstance();
        } catch (InstantiationException | IllegalAccessException ex) {
            LOGGER.error("getClassInstance: Unable to get new instance for provider {} error {}",
                    className, ex.getMessage());
            return null;
        }
        provider.initialize(providerName, className, sslContext, keyStore);
        provider.setHostnameResolver(hostnameResolver);

        providerMap.put(classKey, provider);
        return provider;
    }

    public  InstanceProviderManager(DataStore dataStore, SSLContext sslContext, KeyStore keyStore);

}