code: final void sessionClosed(final JmsJcaSessionImpl session) {
  
          if (TraceComponent.isAnyTracingEnabled() && TRACE.isEntryEnabled()) {
              SibTr.entry(this, TRACE, "sessionClosed", session);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && TRACE.isDebugEnabled()) {
              SibTr.debug(this, TRACE, "Sending connection closed events to the "
                                       + _connectionListeners.size() + " listeners");
          }
  
          final ConnectionEvent event = new ConnectionEvent(this,
                          ConnectionEvent.CONNECTION_CLOSED);
          event.setConnectionHandle(session);
  
          // Copy list to protect against concurrent modification by listener
          final List<ConnectionEventListener> copy;
          synchronized (_connectionListeners) {
              copy = new ArrayList<ConnectionEventListener>(_connectionListeners);
          }
  
          for (final Iterator iterator = copy.iterator(); iterator.hasNext();) {
              final Object object = iterator.next();
              if (object instanceof ConnectionEventListener) {
                  ((ConnectionEventListener) object).connectionClosed(event);
              }
          }
  
          _sessions.remove(session);
  
          if (TraceComponent.isAnyTracingEnabled() && TRACE.isEntryEnabled()) {
              SibTr.exit(this, TRACE, "sessionClosed");
          }
  
      }
docs: Called by a session to indicate that it has been closed. Removes the
  session from the set held by this managed connection and notifies the
  connection event listeners (which includes the connection manager).
  
  @param session
  the session that has been closed