in aws-xray-recorder-sdk-sql-mysql/src/main/java/com/amazonaws/xray/sql/mysql/TracingInterceptor.java [157:209]
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//get the name of the method for comparison
final String name = method.getName();
//was close invoked?
boolean close = compare(JdbcInterceptor.CLOSE_VAL, name);
//allow close to be called multiple times
if (close && closed) {
return null;
}
//are we calling isClosed?
if (compare(JdbcInterceptor.ISCLOSED_VAL, name)) {
return Boolean.valueOf(closed);
}
//if we are calling anything else, bail out
if (closed) {
throw new SQLException("Statement closed.");
}
//check to see if we are about to execute a query
final boolean process = isExecute(method);
Object result = null;
Subsegment subsegment = null;
if (process) {
subsegment = AWSXRay.beginSubsegment(hostname);
}
try {
if (process && null != subsegment) {
subsegment.putAllSql(additionalParams);
subsegment.setNamespace(Namespace.REMOTE.toString());
}
result = method.invoke(delegate, args); //execute the query
} catch (Throwable t) {
if (null != subsegment) {
subsegment.addException(t);
}
if (t instanceof InvocationTargetException && t.getCause() != null) {
throw t.getCause();
} else {
throw t;
}
} finally {
if (process && null != subsegment) {
AWSXRay.endSubsegment();
}
}
//perform close cleanup
if (close) {
closed = true;
delegate = null;
}
return result;
}