in wrapper/src/main/java/software/amazon/jdbc/plugin/readwritesplitting/ReadWriteSplittingPlugin.java [178:230]
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[] args)
throws E {
final Connection conn = WrapperUtils.getConnectionFromSqlObject(methodInvokeOn);
if (conn != null && conn != this.pluginService.getCurrentConnection()) {
LOGGER.fine(
() -> Messages.get("ReadWriteSplittingPlugin.executingAgainstOldConnection",
new Object[] {methodInvokeOn}));
return jdbcMethodFunc.call();
}
if (methodName.equals(METHOD_CLEAR_WARNINGS)) {
try {
if (this.writerConnection != null && !this.writerConnection.isClosed()) {
this.writerConnection.clearWarnings();
}
if (this.readerConnection != null && !this.readerConnection.isClosed()) {
this.readerConnection.clearWarnings();
}
} catch (final SQLException e) {
throw WrapperUtils.wrapExceptionIfNeeded(exceptionClass, e);
}
}
if (methodName.equals(METHOD_SET_READ_ONLY) && args != null && args.length > 0) {
try {
switchConnectionIfRequired((Boolean) args[0]);
} catch (final SQLException e) {
throw WrapperUtils.wrapExceptionIfNeeded(exceptionClass, e);
}
}
try {
return jdbcMethodFunc.call();
} catch (final Exception e) {
if (e instanceof FailoverSQLException) {
LOGGER.finer(
() -> Messages.get("ReadWriteSplittingPlugin.failoverExceptionWhileExecutingCommand",
new Object[] {methodName}));
closeIdleConnections();
} else {
LOGGER.finest(
() -> Messages.get("ReadWriteSplittingPlugin.exceptionWhileExecutingCommand",
new Object[] {methodName}));
}
throw e;
}
}