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