public void stop() {
   ClassLoader old = getTccl();
   try {
     setTccl(servletContext.getClassLoader());
     this.started = false;
     final Map<String, SessionPersistenceManager.PersistentSession> objectData = new HashMap<>();
     for (String sessionId : sessionManager.getTransientSessions()) {
       Session session = sessionManager.getSession(sessionId);
       if (session != null) {
         final HttpSessionEvent event =
             new HttpSessionEvent(SecurityActions.forSession(session, servletContext, false));
         final Map<String, Object> sessionData = new HashMap<>();
         for (String attr : session.getAttributeNames()) {
           final Object attribute = session.getAttribute(attr);
           sessionData.put(attr, attribute);
           if (attribute instanceof HttpSessionActivationListener) {
             ((HttpSessionActivationListener) attribute).sessionWillPassivate(event);
           }
         }
         objectData.put(
             sessionId,
             new PersistentSession(
                 new Date(
                     session.getLastAccessedTime() + (session.getMaxInactiveInterval() * 1000)),
                 sessionData));
       }
     }
     sessionPersistenceManager.persistSessions(deploymentName, objectData);
     this.data.clear();
   } finally {
     setTccl(old);
   }
 }
  public HttpSession getSession(
      final ServletContextImpl originalServletContext,
      final HttpServerExchange exchange,
      boolean create) {
    SessionConfig c = originalServletContext.getSessionConfig();
    ConvergedHttpSessionFacade httpSession = exchange.getAttachment(sessionAttachmentKey);
    if (httpSession != null && httpSession.isValidIntern()) {
      exchange.removeAttachment(sessionAttachmentKey);
      httpSession = null;
    }
    if (httpSession == null) {
      final SessionManager sessionManager = context.getDeployment().getSessionManager();
      Session session = sessionManager.getSession(exchange, c);
      if (session != null) {
        httpSession =
            (ConvergedHttpSessionFacade)
                SecurityActions.forSession(session, this, false, sessionManager);
        exchange.putAttachment(sessionAttachmentKey, httpSession);
      } else if (create) {

        String existing = c.findSessionId(exchange);
        if (originalServletContext != this.context) {
          // this is a cross context request
          // we need to make sure there is a top level session
          originalServletContext.getSession(originalServletContext, exchange, true);
        } else if (existing != null) {
          c.clearSession(exchange, existing);
        }

        final Session newSession = sessionManager.createSession(exchange, c);
        httpSession =
            (ConvergedHttpSessionFacade)
                SecurityActions.forSession(newSession, this, true, sessionManager);
        // call access after creation to set LastAccessTime at sipAppSession.
        httpSession.access();
        // add delegate to InMemorySession to call sipAppSession.access(), when necessary:
        ((ConvergedInMemorySessionManager) sessionManager)
            .addConvergedSessionDeletegateToSession(
                newSession.getId(), httpSession.getConvergedSessionDelegate());

        exchange.putAttachment(sessionAttachmentKey, httpSession);
      }
    }
    return httpSession;
  }
 @Override
 public void remove(Session session) {
   this.sessions.remove(session.getSessionManager());
 }
 @Override
 public boolean contains(Session session) {
   return this.sessions.containsKey(session.getSessionManager());
 }
 @Override
 public void add(Session session) {
   this.sessions.put(session.getSessionManager(), session);
 }