/**
* 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 stackable storage
$data = new StackableStorage();
$servlets = new StackableStorage();
$errorPages = new StackableStorage();
$initParameters = new StackableStorage();
$servletMappings = new GenericStackable();
$securedUrlConfigs = new StackableStorage();
$sessionParameters = new StackableStorage();
// initialize the default settings for the stateful session beans
$servletManagerSettings = new StandardManagerSettings();
$servletManagerSettings->mergeWithParams($managerConfiguration->getParamsAsArray());
// initialize the servlet locator
$servletLocator = new ServletLocator();
// initialize the servlet manager
$servletManager = new ServletManager();
$servletManager->injectData($data);
$servletManager->injectServlets($servlets);
$servletManager->injectErrorPages($errorPages);
$servletManager->injectApplication($application);
$servletManager->injectInitParameters($initParameters);
$servletManager->injectResourceLocator($servletLocator);
$servletManager->injectServletMappings($servletMappings);
$servletManager->injectSecuredUrlConfigs($securedUrlConfigs);
$servletManager->injectSessionParameters($sessionParameters);
$servletManager->injectManagerSettings($servletManagerSettings);
$servletManager->injectDirectories($managerConfiguration->getDirectories());
// create the naming context and add it the manager
$contextFactory = $managerConfiguration->getContextFactory();
$contextFactory::visit($servletManager);
// attach the instance
$application->addManager($servletManager, $managerConfiguration);
}