Author: Tim Wagner (tw@appserver.io)
Inheritance: extends AppserverIo\Appserver\Core\AbstractDaemonThread, implements AppserverIo\Appserver\ServletEngine\GarbageCollectorInterface
 /**
  * The main method that creates new instances in a separate context.
  *
  * @param \AppserverIo\Psr\Application\ApplicationInterface         $application          The application instance to register the class loader with
  * @param \AppserverIo\Appserver\Core\Api\Node\ManagerNodeInterface $managerConfiguration The manager configuration
  *
  * @return void
  */
 public static function visit(ApplicationInterface $application, ManagerNodeInterface $managerConfiguration)
 {
     // initialize the sessions and the session settings
     $sessionHandlers = new HashMap();
     $sessionSettings = new DefaultSessionSettings();
     $sessionMarshaller = new StandardSessionMarshaller();
     // add the configured session handlers
     /** @var \AppserverIo\Appserver\Core\Api\Node\SessionHandlerNode $sessionHandlerNode */
     foreach ($managerConfiguration->getSessionHandlers() as $sessionHandlerNode) {
         if ($factory = $sessionHandlerNode->getFactory()) {
             $sessionHandlers->add($sessionHandlerNode->getName(), $factory::create($sessionHandlerNode, $sessionSettings, $sessionMarshaller));
         }
     }
     // we need a garbage collector
     $garbageCollector = new StandardGarbageCollector();
     $garbageCollector->injectApplication($application);
     $garbageCollector->injectSessionSettings($sessionSettings);
     $garbageCollector->start();
     // and finally we need the session manager instance
     $sessionManager = new StandardSessionManager();
     $sessionManager->injectApplication($application);
     $sessionManager->injectSessionSettings($sessionSettings);
     $sessionManager->injectSessionHandlers($sessionHandlers);
     $sessionManager->injectGarbageCollector($garbageCollector);
     $sessionManager->injectSessionMarshaller($sessionMarshaller);
     $sessionManager->injectManagerConfiguration($managerConfiguration);
     // attach the instance
     $application->addManager($sessionManager, $managerConfiguration);
 }
 /**
  * The main method that creates new instances in a separate context.
  *
  * @param \AppserverIo\Psr\Application\ApplicationInterface         $application          The application instance to register the class loader with
  * @param \AppserverIo\Appserver\Core\Api\Node\ManagerNodeInterface $managerConfiguration The manager configuration
  *
  * @return void
  */
 public static function visit(ApplicationInterface $application, ManagerNodeInterface $managerConfiguration)
 {
     // load the registered loggers
     $loggers = $application->getInitialContext()->getLoggers();
     // initialize the session pool
     $sessions = new StackableStorage();
     $checksums = new StackableStorage();
     $sessionPool = new StackableStorage();
     $sessionSettings = new DefaultSessionSettings();
     $sessionMarshaller = new StandardSessionMarshaller();
     // we need a session factory instance
     $sessionFactory = new SessionFactory($sessionPool);
     $sessionFactory->injectLoggers($loggers);
     $sessionFactory->start();
     // we need a persistence manager and garbage collector
     $persistenceManager = new FilesystemPersistenceManager();
     $persistenceManager->injectLoggers($loggers);
     $persistenceManager->injectSessions($sessions);
     $persistenceManager->injectChecksums($checksums);
     $persistenceManager->injectSessionSettings($sessionSettings);
     $persistenceManager->injectSessionMarshaller($sessionMarshaller);
     $persistenceManager->injectSessionFactory($sessionFactory);
     $persistenceManager->injectUser($application->getUser());
     $persistenceManager->injectGroup($application->getGroup());
     $persistenceManager->injectUmask($application->getUmask());
     $persistenceManager->start();
     // we need a garbage collector
     $garbageCollector = new StandardGarbageCollector();
     $garbageCollector->injectLoggers($loggers);
     $garbageCollector->injectSessions($sessions);
     $garbageCollector->injectSessionFactory($sessionFactory);
     $garbageCollector->injectSessionSettings($sessionSettings);
     $garbageCollector->start();
     // and finally we need the session manager instance
     $sessionManager = new StandardSessionManager();
     $sessionManager->injectSessions($sessions);
     $sessionManager->injectSessionFactory($sessionFactory);
     $sessionManager->injectSessionSettings($sessionSettings);
     $sessionManager->injectGarbageCollector($garbageCollector);
     $sessionManager->injectPersistenceManager($persistenceManager);
     // attach the instance
     $application->addManager($sessionManager, $managerConfiguration);
 }