code: void validateCloseCommitRollback(String functionCall) throws IllegalStateException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "validateCloseCommitRollback", functionCall);
  
          //Before triggering onCompletion/OnException .. SIB pushes "owning session object" to Thread Local, 
          //Now obtain the Session object from Thread Local and validate with 'this'. 
          if ((JmsSessionImpl.asyncThreadLocal.get() != null) && (JmsSessionImpl.asyncThreadLocal.get() == this)) {
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(tc, "OnComplete/onException called roolback/commit/close on its own Context/Session.");
  
              //the call is driven from this JmsSessionImpl object only.. throw JMSException
              throw (IllegalStateException) JmsErrorUtils.newThrowable(IllegalStateException.class,
                                                                       "INVALID_METHOD_CWSIA0515",
                                                                       new Object[] { functionCall,
                                                                                     this },
                                                                       tc
                              );
  
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "validateCloseCommitRollback");
  
      }
docs: CompletionListener calls (i.e OnComplete and onException) should not attempt
  rollback/commit/close on its own Context/Session/connection.