in wrapper/src/main/java/software/amazon/jdbc/plugin/efm2/HostMonitoringConnectionPlugin.java [134:191]
public <T, E extends Exception> T execute(
final Class<T> resultClass,
final Class<E> exceptionClass,
final Object methodInvokeOn,
final String methodName,
final JdbcCallable<T, E> jdbcMethodFunc,
final Object[] jdbcMethodArgs)
throws E {
// update config settings since they may change
final boolean isEnabled = FAILURE_DETECTION_ENABLED.getBoolean(this.properties);
if (!isEnabled || !SubscribedMethodHelper.NETWORK_BOUND_METHODS.contains(methodName)) {
return jdbcMethodFunc.call();
}
final int failureDetectionTimeMillis = FAILURE_DETECTION_TIME.getInteger(this.properties);
final int failureDetectionIntervalMillis =
FAILURE_DETECTION_INTERVAL.getInteger(this.properties);
final int failureDetectionCount = FAILURE_DETECTION_COUNT.getInteger(this.properties);
initMonitorService();
T result;
MonitorConnectionContext monitorContext = null;
try {
LOGGER.finest(
() -> Messages.get(
"HostMonitoringConnectionPlugin.activatedMonitoring",
new Object[] {methodName}));
final HostSpec monitoringHostSpec = this.getMonitoringHostSpec();
monitorContext =
this.monitorService.startMonitoring(
this.pluginService.getCurrentConnection(), // abort this connection if needed
monitoringHostSpec,
this.properties,
failureDetectionTimeMillis,
failureDetectionIntervalMillis,
failureDetectionCount);
result = jdbcMethodFunc.call();
} finally {
if (monitorContext != null) {
this.monitorService.stopMonitoring(monitorContext, this.pluginService.getCurrentConnection());
}
LOGGER.finest(
() -> Messages.get(
"HostMonitoringConnectionPlugin.monitoringDeactivated",
new Object[] {methodName}));
}
return result;
}