@Override
public T providerOfType(final String providerName) throws ExecutionServiceException {
T t = null;
MissingProviderException caught = null;
try {
t = super.providerOfType(providerName);
} catch (MissingProviderException e) {
//ignore and attempt to load from the plugin manager
caught = e;
}
if (null != t) {
return t;
}
final ServiceProviderLoader pluginManager = framework.getPluginManager();
if (null != pluginManager) {
return pluginManager.loadProvider(this, providerName);
} else if (null != caught) {
throw caught;
}else {
throw new MissingProviderException("Provider not found", getName(), providerName);
}
}