code: public Set<Participant> closeSession(String sessionId, EndReason reason) {
  		Session session = sessions.get(sessionId);
  		if (session == null) {
  			throw new OpenViduException(Code.ROOM_NOT_FOUND_ERROR_CODE, "Session '" + sessionId + "' not found");
  		}
  		if (session.isClosed()) {
  			this.closeSessionAndEmptyCollections(session, reason);
  			throw new OpenViduException(Code.ROOM_CLOSED_ERROR_CODE, "Session '" + sessionId + "' already closed");
  		}
  		Set<Participant> participants = getParticipants(sessionId);
  		for (Participant p : participants) {
  			try {
  				this.evictParticipant(p, null, null, reason);
  			} catch (OpenViduException e) {
  				log.warn("Error evicting participant '{}' from session '{}'", p.getParticipantPublicId(), sessionId, e);
  			}
  		}
  
  		this.closeSessionAndEmptyCollections(session, reason);
  
  		return participants;
  	}
docs: Closes an existing session by releasing all resources that were allocated for
  it. Once closed, the session can be reopened (will be empty and it will use
  another Media Pipeline). Existing participants will be evicted. <br/>
  <strong>Dev advice:</strong> The session event handler should send
  notifications to the existing participants in the session to inform that it
  was forcibly closed.
  
  @param sessionId identifier of the session
  @return
  @return set of {@link Participant} POJOS representing the session's
  participants
  @throws OpenViduException in case the session doesn't exist or has been
  already closed