blob: 15d42056a25a0f43aeb6d4d63ee6644abebc6944 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* VMware Inc. - initial contribution
*******************************************************************************/
package org.eclipse.virgo.snaps.core.internal.webapp.container;
import javax.servlet.ServletException;
import org.eclipse.virgo.snaps.core.RequestRouter;
import org.eclipse.virgo.snaps.core.internal.SnapException;
import org.eclipse.virgo.snaps.core.internal.webapp.SnapServletContext;
import org.eclipse.virgo.snaps.core.internal.webapp.config.WebXml;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* TODO Document StandardSnapRequestDispatcher
* <p />
*
* <strong>Concurrent Semantics</strong><br />
*
* TODO Document concurrent semantics of StandardSnapRequestDispatcher
*
*/
final class StandardVirtualContainer implements VirtualContainer {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final ClassLoader classLoader;
private final ServletManager servletManager;
private final FilterManager filterManager;
private final SnapServletContext snapServletContext;
private final FilterChainFactory filterChainFactory;
private final RequestRouter requestRouter;
/**
* @param webXml
* @param servletContext
* @param snapClassLoader
*/
public StandardVirtualContainer(WebXml webXml, SnapServletContext servletContext, ClassLoader snapClassLoader, RequestRouter requestRouter) throws SnapException {
this.classLoader = snapClassLoader;
this.servletManager = new ServletManager(webXml, servletContext, snapClassLoader);
this.filterManager = new FilterManager(webXml, servletContext, snapClassLoader);
this.filterChainFactory = new FilterChainFactory(this.filterManager);
this.snapServletContext = servletContext;
this.requestRouter = requestRouter;
}
/**
* {@inheritDoc}
*/
public VirtualContainerRequestDispatcher createDispatcher() {
return new StandardVirtualContainerRequestDispatcher(this.servletManager, this.classLoader, this, this.filterChainFactory, this.requestRouter);
}
/**
* {@inheritDoc}
*/
public void destroy() {
this.servletManager.destroy();
this.filterManager.destroy();
logger.info("Virtual container destroyed");
}
/**
* {@inheritDoc}
*/
public void init() throws ServletException {
this.servletManager.init();
this.filterManager.init();
logger.info("Virtual container initialized");
}
/**
* {@inheritDoc}
*/
public SnapServletContext getSnapServletContext() {
return this.snapServletContext;
}
@Override
public void addHost(SnapServletContext servletContext) {
this.servletManager.addSnapServletContext(servletContext);
this.filterManager.addSnapServletContext(servletContext);
}
}