in wrapper/src/main/java/software/amazon/jdbc/ConnectionPluginChainBuilder.java [135:211]
public List<ConnectionPlugin> getPlugins(
final PluginService pluginService,
final ConnectionProvider defaultConnProvider,
final ConnectionProvider effectiveConnProvider,
final PluginManagerService pluginManagerService,
final Properties props,
@Nullable ConfigurationProfile configurationProfile)
throws SQLException {
List<ConnectionPlugin> plugins;
List<Class<? extends ConnectionPluginFactory>> pluginFactories;
if (configurationProfile != null && configurationProfile.getPluginFactories() != null) {
pluginFactories = configurationProfile.getPluginFactories();
} else {
final List<String> pluginCodeList = getPluginCodes(props);
pluginFactories = new ArrayList<>(pluginCodeList.size());
for (final String pluginCode : pluginCodeList) {
if (!pluginFactoriesByCode.containsKey(pluginCode)) {
throw new SQLException(
Messages.get(
"ConnectionPluginManager.unknownPluginCode",
new Object[] {pluginCode}));
}
pluginFactories.add(pluginFactoriesByCode.get(pluginCode));
}
}
if (!pluginFactories.isEmpty()) {
if (PropertyDefinition.AUTO_SORT_PLUGIN_ORDER.getBoolean(props)) {
pluginFactories = this.sortPluginFactories(pluginFactories);
final List<Class<? extends ConnectionPluginFactory>> tempPluginFactories = pluginFactories;
LOGGER.finest(() ->
"Plugins order has been rearranged. The following order is in effect: "
+ tempPluginFactories.stream()
.map(Class::getSimpleName)
.collect(Collectors.joining(", ")));
}
try {
final ConnectionPluginFactory[] factories =
WrapperUtils.loadClasses(
pluginFactories,
ConnectionPluginFactory.class,
"ConnectionPluginManager.unableToLoadPlugin")
.toArray(new ConnectionPluginFactory[0]);
// make a chain of connection plugins
plugins = new ArrayList<>(factories.length + 1);
for (final ConnectionPluginFactory factory : factories) {
plugins.add(factory.getInstance(pluginService, props));
}
} catch (final InstantiationException instEx) {
throw new SQLException(instEx.getMessage(), SqlState.UNKNOWN_STATE.getState(), instEx);
}
} else {
plugins = new ArrayList<>(1); // one spot for default connection plugin
}
// add default connection plugin to the tail
final ConnectionPlugin defaultPlugin = new DefaultConnectionPlugin(
pluginService,
defaultConnProvider,
effectiveConnProvider,
pluginManagerService);
plugins.add(defaultPlugin);
return plugins;
}