docs: @Override
      synchronized public void close() throws SIConnectionLostException,
                      SIIncorrectCallException, SIResourceException, SIErrorException,
                      SIConnectionDroppedException, SIConnectionUnavailableException {
  
          if (TraceComponent.isAnyTracingEnabled() && TRACE.isEntryEnabled()) {
              SibTr.entry(this, TRACE, "close");
          }
  
          if (TraceComponent.isAnyTracingEnabled() && TRACE.isDebugEnabled())
          {
              SibTr.debug(TRACE, "We have " + _sessions.size() + " left open - closing them");
          }
  
          // Close all the sessions created from this connection.
          for (final Iterator iterator = _sessions.iterator(); iterator.hasNext();) {
  
              final Object object = iterator.next();
              if (object instanceof JmsJcaSessionImpl) {
                  final JmsJcaSessionImpl session = (JmsJcaSessionImpl) object;
                  session.close(false);
              }
              iterator.remove();
  
          }
  
          if (_coreConnection != null) {
              _coreConnection.close();
          }
  
          connectionClosed = true;
  
          if (TraceComponent.isAnyTracingEnabled() && TRACE.isEntryEnabled()) {
              SibTr.exit(this, TRACE, "close");
          }
  
      }