@@ -379,10 +379,17 @@ private void handleResultSet(MethodExecutionContext executionContext) {
379379 return ;
380380 }
381381
382+ String methodName = executionContext .getMethod ().getName ();
383+ boolean isClose = "close" .equals (methodName );
384+
382385 ResultSet resultSet = (ResultSet ) executionContext .getTarget ();
383386 ResultSetAttributes resultSetAttributes = connectionAttributes .resultSetAttributesManager
384387 .getByResultSet (resultSet );
385- if (resultSetAttributes == null ) {
388+
389+ // "close" could be called multiple times. When this is a second close, do not
390+ // start ob.
391+ boolean createResultSetAttributes = (resultSetAttributes == null ) && !isClose ;
392+ if (createResultSetAttributes ) {
386393 boolean isGeneratedKey = connectionAttributes .resultSetAttributesManager .isGeneratedKeys (resultSet );
387394 resultSetAttributes = createResultSetAttributesAndStartObservation (executionContext , isGeneratedKey );
388395
@@ -400,14 +407,17 @@ private void handleResultSet(MethodExecutionContext executionContext) {
400407 connectionAttributes .resultSetAttributesManager .add (resultSet , statement , resultSetAttributes );
401408 }
402409
403- ResultSetOperation operation = new ResultSetOperation (executionContext .getMethod (),
404- executionContext .getMethodArgs (), executionContext .getResult (), executionContext .getThrown ());
405- resultSetAttributes .context .addOperation (operation );
410+ if (resultSetAttributes != null ) {
411+ ResultSetOperation operation = new ResultSetOperation (executionContext .getMethod (),
412+ executionContext .getMethodArgs (), executionContext .getResult (), executionContext .getThrown ());
413+ resultSetAttributes .context .addOperation (operation );
414+ }
406415
407- String methodName = executionContext .getMethod ().getName ();
408- if ("close" .equals (methodName )) {
416+ if (isClose ) {
409417 connectionAttributes .resultSetAttributesManager .removeByResultSet (resultSet );
410- stopResultSetObservation (resultSetAttributes .scope , executionContext .getThrown ());
418+ if (resultSetAttributes != null ) {
419+ stopResultSetObservation (resultSetAttributes .scope , executionContext .getThrown ());
420+ }
411421 }
412422 else if ("next" .equals (methodName )) {
413423 boolean hasNext = Boolean .TRUE .equals (executionContext .getResult ());
0 commit comments