/** * 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); }