Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   /*
    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    *
    * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
    *
    * The contents of this file are subject to the terms of either the GNU
    * General Public License Version 2 only ("GPL") or the Common Development
    * and Distribution License("CDDL") (collectively, the "License").  You
    * may not use this file except in compliance with the License.  You can
   * obtain a copy of the License at
   * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
   * or packager/legal/LICENSE.txt.  See the License for the specific
   * language governing permissions and limitations under the License.
   *
   * When distributing the software, include this License Header Notice in each
   * file and include the License file at packager/legal/LICENSE.txt.
   *
   * GPL Classpath Exception:
   * Oracle designates this particular file as subject to the "Classpath"
   * exception as provided by Oracle in the GPL Version 2 section of the License
   * file that accompanied this code.
   *
   * Modifications:
   * If applicable, add the following below the License Header, with the fields
   * enclosed by brackets [] replaced by your own identifying information:
   * "Portions Copyright [year] [name of copyright owner]"
   *
   * Contributor(s):
   * If you wish your version of this file to be governed by only the CDDL or
   * only the GPL Version 2, indicate your decision by adding "[Contributor]
   * elects to include this software in this distribution under the [CDDL or GPL
   * Version 2] license."  If you don't indicate a single choice of license, a
   * recipient has the option to distribute your version of this file under
   * either the CDDL, the GPL Version 2 or to extend the choice of license to
   * its licensees as provided above.  However, if you add GPL Version 2 code
   * and therefore, elected the GPL Version 2 license, then the option applies
   * only if the new code is made subject to such option by the copyright
   * holder.
   */
  
  package com.sun.enterprise.web;
  
  import java.io.File;
  import java.util.Arrays;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.List;
  import java.util.Map;
  import java.util.Set;
  
  
 
Web container service

Author(s):
jluehe
amyroh
swchan2
 
 @SuppressWarnings({"StringContatenationInLoop"})
 @Service(name = "com.sun.enterprise.web.WebContainer")
 
     // -------------------------------------------------- Constants
 
     public static final String DISPATCHER_MAX_DEPTH = "dispatcher-max-depth";
 
     static final int DEFAULT_REAP_INTERVAL = 60;   // 1 minute
 
     public static final String JWS_APPCLIENT_EAR_NAME = "__JWSappclients";
     public static final String JWS_APPCLIENT_WAR_NAME = "sys";
     private static final String JWS_APPCLIENT_MODULE_NAME =  + ":" +  + ".war";
 
     private static final String DOL_DEPLOYMENT =
             "com.sun.enterprise.web.deployment.backend";
 
     private static final String MONITORING_NODE_SEPARATOR = "/";
 
     public static final String SHARED_LOGMESSAGE_RESOURCE =
             "com.sun.enterprise.web.LogMessages";
 
     @LoggerInfo(subsystem="WEB", description="Main WEB Logger", publish=true)
     public static final String WEB_MAIN_LOGGER = "javax.enterprise.web";
 
     public static final Logger logger =
             Logger.getLogger();
 
     protected static final ResourceBundle rb = .getResourceBundle();
 
     @LogMessageInfo(
             message = "Loading web module {0} in virtual server {1} at {2}",
             level = "INFO")
     public static final String WEB_MODULE_LOADING = "AS-WEB-00001";
 
     @LogMessageInfo(
             message = "This web container has not yet been started",
             level = "INFO")
     public static final String WEB_CONTAINER_NOT_STARTED = "AS-WEB-00002";
 
     @LogMessageInfo(
             message = "Property {0} is not yet supported",
             level = "INFO")
     public static final String PROPERTY_NOT_YET_SUPPORTED = "AS-WEB-00003";
 
     @LogMessageInfo(
             message = "Virtual server {0} already has a web module {1} loaded at {2} " +
                     "therefore web module {3} cannot be loaded at this context path on this virtual server",
             level = "INFO")
     public static final String DUPLICATE_CONTEXT_ROOT = "AS-WEB-00004";
 
     @LogMessageInfo(
             message = "Unable to stop web container",
             level = "SEVERE",
             cause = "Web container may not have been started",
             action = "Verify if web container is started")
     public static final String UNABLE_TO_STOP_WEB_CONTAINER = "AS-WEB-00005";
 
     @LogMessageInfo(
             message = "Unable to start web container",
             level = "SEVERE",
             cause = "Web container may have already been started",
             action = "Verify if web container is not already started")
     public static final String UNABLE_TO_START_WEB_CONTAINER = "AS-WEB-00006";
 
     @LogMessageInfo(
             message = "Property element in sun-web.xml has null 'name' or 'value'",
             level = "INFO")
     public static final String NULL_WEB_PROPERTY = "AS-WEB-00007";
 
     @LogMessageInfo(
             message = "Web module {0} is not loaded in virtual server {1}",
             level = "SEVERE",
             cause = "Web module has failed to load",
             action = "Verify if web module is valid")
     public static final String WEB_MODULE_NOT_LOADED_TO_VS = "AS-WEB-00008";
 
     @LogMessageInfo(
             message = "Unable to deploy web module {0} at root context of virtual server {1}, " +
                     "because this virtual server declares a default-web-module",
             level = "INFO")
     public static final String DEFAULT_WEB_MODULE_CONFLICT = "AS-WEB-00009";
 
     @LogMessageInfo(
             message = "Unable to set default-web-module {0} for virtual server {1}",
             level = "SEVERE",
             cause = "There is no web context deployed on the given" +
                     "virtual server that matches the given default context path",
             action = "Verify if the default context path is deployed on the virtual server")
     public static final String DEFAULT_WEB_MODULE_ERROR"AS-WEB-00010";
 
     @LogMessageInfo(
             message = "Unable to load web module {0} at context root {1}, because it is not correctly encoded",
             level = "INFO")
     public static final String INVALID_ENCODED_CONTEXT_ROOT = "AS-WEB-00011";
 
     @LogMessageInfo(
             message = "Unable to destroy web module deployed at context root {0} on virtual server {1} during undeployment",
             level = "WARNING")
     public static final String EXCEPTION_DURING_DESTROY = "AS-WEB-00012";
 
     @LogMessageInfo(
             message = "Exception setting the schemas/dtds location",
             level = "SEVERE",
             cause = "A malformed URL has occurred. Either no legal protocol could be found in a specification string " +
                     "or the string could not be parsed",
             action = "Verify if the schemas and dtds")
     public static final String EXCEPTION_SET_SCHEMAS_DTDS_LOCATION = "AS-WEB-00013";
 
     @LogMessageInfo(
             message = "Unable to determine location of server.log file",
             level = "SEVERE",
             cause = "IOException happened during opening the server.log file",
             action = "Verify if the server.log file is valid")
     public static final String UNABLE_TO_DETERMINE_SERVER_LOG_LOCATION = "AS-WEB-00014";
 
     @LogMessageInfo(
             message = "Error loading web module {0}",
             level = "SEVERE",
             cause = "An error occurred during loading web module",
             action = "Check the Exception for the error")
     public static final String LOAD_WEB_MODULE_ERROR = "AS-WEB-00015";
 
     @LogMessageInfo(
             message = "Undeployment failed for context {0}",
             level = "SEVERE",
             cause = "The context may not have been deployed",
             action = "Verify if the context is deployed on the virtual server")
     public static final String UNDEPLOY_ERROR = "AS-WEB-00016";
 
     @LogMessageInfo(
             message = "Exception processing HttpService configuration change",
             level = "SEVERE",
             cause = "An error occurred during configurting http service",
             action = "Verify if the configurations are valid")
     public static final String EXCEPTION_CONFIG_HTTP_SERVICE = "AS-WEB-00017";
 
     @LogMessageInfo(
             message = "Unable to set context root {0}",
             level = "WARNING")
     public static final String UNABLE_TO_SET_CONTEXT_ROOT = "AS-WEB-00018";
 
     @LogMessageInfo(
             message = "Unable to disable web module at context root {0}",
             level = "WARNING")
     public static final String DISABLE_WEB_MODULE_ERROR = "AS-WEB-00019";
 
     @LogMessageInfo(
             message = "Error during destruction of virtual server {0}",
             level = "WARNING")
     public static final String DESTROY_VS_ERROR = "AS-WEB-00020";
 
     @LogMessageInfo(
             message = "Virtual server {0} cannot be updated, because it does not exist",
             level = "WARNING")
     public static final String CANNOT_UPDATE_NON_EXISTENCE_VS"AS-WEB-00021";
 
     @LogMessageInfo(
             message = "Created HTTP listener {0} on host/port {1}:{2}",
             level = "INFO")
     public static final String HTTP_LISTENER_CREATED = "AS-WEB-00022";
 
     @LogMessageInfo(
             message = "Created JK listener {0} on host/port {1}:{2}",
             level = "INFO")
     public static final String JK_LISTENER_CREATED = "AS-WEB-00023";
 
     @LogMessageInfo(
             message = "Created virtual server {0}",
             level = "INFO")
     public static final String VIRTUAL_SERVER_CREATED = "AS-WEB-00024";
 
     @LogMessageInfo(
             message = "Virtual server {0} loaded default web module {1}",
             level = "INFO")
     public static final String VIRTUAL_SERVER_LOADED_DEFAULT_WEB_MODULE = "AS-WEB-00025";
 
     @LogMessageInfo(
             message = "Maximum depth for nested request dispatches set to {0}",
             level = "FINE")
     public static final String MAX_DISPATCH_DEPTH_SET = "AS-WEB-00026";
 
     @LogMessageInfo(
             message = "Unsupported http-service property {0} is being ignored",
             level = "WARNING")
     public static final String INVALID_HTTP_SERVICE_PROPERTY = "AS-WEB-00027";
 
     @LogMessageInfo(
             message = "The host name {0} is shared by virtual servers {1} and {2}, " +
                     "which are both associated with the same HTTP listener {3}",
             level = "SEVERE",
             cause = "The host name is not unique",
             action = "Verify that the host name is unique")
     public static final String DUPLICATE_HOST_NAME = "AS-WEB-00028";
 
     @LogMessageInfo(
             message = "Network listener {0} referenced by virtual server {1} does not exist",
             level = "SEVERE",
             cause = "Network listener {0} referenced by virtual server {1} does not exist",
             action = "Verify that the network listener is valid")
     public static final String LISTENER_REFERENCED_BY_HOST_NOT_EXIST = "AS-WEB-00029";
 
     @LogMessageInfo(
             message = "Web module {0} not loaded to any virtual servers",
             level = "INFO")
     public static final String WEB_MODULE_NOT_LOADED_NO_VIRTUAL_SERVERS = "AS-WEB-00030";
 
     @LogMessageInfo(
             message = "Loading web module {0} to virtual servers {1}",
             level = "FINE")
     public static final String LOADING_WEB_MODULE = "AS-WEB-00031";
 
     @LogMessageInfo(
             message = "Unloading web module {0} from virtual servers {1}",
             level = "FINE")
     public static final String UNLOADING_WEB_MODULE = "AS-WEB-00032";
 
     @LogMessageInfo(
             message = "Context {0} undeployed from virtual server {1}",
             level = "FINE")
     public static final String CONTEXT_UNDEPLOYED = "AS-WEB-00033";
 
     @LogMessageInfo(
             message = "Context {0} disabled from virtual server {1}",
             level = "FINE")
     public static final String CONTEXT_DISABLED = "AS-WEB-00034";
 
     @LogMessageInfo(
             message = "Virtual server {0}'s network listeners are updated from {1} to {2}",
             level = "FINE")
     public static final String VS_UPDATED_NETWORK_LISTENERS = "AS-WEB-00035";
 
     @LogMessageInfo(
             message = "The class {0} is annotated with an invalid scope",
             level = "INFO")
     public static final String INVALID_ANNOTATION_SCOPE = "AS-WEB-00036";
 
     @LogMessageInfo(
             message = "-DjvmRoute updated with {0}",
             level = "FINE")
     public static final String JVM_ROUTE_UPDATED"AS-WEB-00037";
 
     @LogMessageInfo(
             message = "Unable to parse port number {0} of network-listener {1}",
             level = "INFO")
     public static final String HTTP_LISTENER_INVALID_PORT = "AS-WEB-00038";
 
     @LogMessageInfo(
             message = "Virtual server {0} set listener name {1}",
             level = "FINE")
     public static final String VIRTUAL_SERVER_SET_LISTENER_NAME = "AS-WEB-00039";
 
     @LogMessageInfo(
             message = "Must not disable network-listener {0}, because it is associated with admin virtual server {1}",
             level = "INFO")
     public static final String MUST_NOT_DISABLE = "AS-WEB-00040";
 
     @LogMessageInfo(
             message = "Virtual server {0} set jk listener name {1}",
             level = "FINE")
     public static final String VIRTUAL_SERVER_SET_JK_LISTENER_NAME = "AS-WEB-00041";
 
     @LogMessageInfo(
             message = "virtual server {0} has an invalid docroot {1}",
             level = "INFO")
     public static final String VIRTUAL_SERVER_INVALID_DOCROOT = "AS-WEB-00042";
 
     @LogMessageInfo(
             message = "{0} network listener is not included in {1} and will be updated ",
             level = "FINE")
     public static final String UPDATE_LISTENER = "AS-WEB-00043";

    
Are we using Tomcat deployment backend or DOL?
 
     static boolean useDOLforDeployment = true;
 
     // ----------------------------------------------------- Instance Variables
 
     @Inject
     private ApplicationRegistry appRegistry;
 
     @Inject
     private ClassLoaderHierarchy clh;
 
     @Inject
 
     @Inject
     Configs configs;
 
     @Inject @Optional
     private DasConfig dasConfig;
 
     @Inject
     private Domain domain;
 
     @Inject
     private Events events;
 
     @Inject
 
     @Inject
     private GrizzlyService grizzlyService;
 
     @Inject
     private ServiceLocator habitat;
 
     @Inject
     private JavaEEIOUtils javaEEIOUtils;
 
     @Inject @Optional
     private JCDIService jcdiService;
 
     @Inject
     private LoggingConfigImpl logConfig;
 
     @Inject
 
     private Config serverConfig;
 
     private Server server;
 
     @Inject
 
     @Inject
     private Transactions transactions;
 
     private HashMap<StringWebConnectorconnectorMap = new HashMap<StringWebConnector>();
 
     private EmbeddedWebContainer _embedded;
 
     private Engine engine;
 
     private String instanceName;
 
     private WebConnector jkConnector;
 
     private String logLevel = "INFO";
    
Allow disabling accessLog mechanism
 
     protected boolean globalAccessLoggingEnabled = true;

    
AccessLog buffer size for storing logs.
 
     protected String globalAccessLogBufferSize = null;

    
AccessLog interval before the valve flush its buffer to the disk.
 
     protected String globalAccessLogWriteInterval = null;

    
The default-redirect port
 
     protected int defaultRedirectPort = -1;

    
false when the Grizzly File Cache is enabled. When disabled the Servlet Container temporary Naming cache is used when loading the resources.
 
     //protected boolean catalinaCachingAllowed = true;
 
     @Inject
     protected ServerEnvironment instance = null;
 
     // TODO
     //protected WebModulesManager webModulesManager = null;
     //protected AppsManager appsManager = null;
 
    
The schema2beans object that represents the root node of server.xml.
 
     private Server _serverBean = null;

    
Controls the verbosity of the web container subsystem's debug messages.

This value is non-zero only when the iAS level is one of FINE, FINER or FINEST.

 
     protected int _debug = 0;

    
Top-level directory for files generated (compiled JSPs) by standalone web modules.
 
     private String _modulesWorkRoot = null;

    
Absolute path for location where all the deployed standalone modules are stored for this Server Instance.
 
     protected File _modulesRoot = null;

    
Top-level directory for files generated by application web modules.
 
     private String _appsWorkRoot = null;
 
     // START S1AS 6178005
     
Top-level directory where ejb stubs for applications are stored.
 
     private String appsStubRoot = null;
     // END S1AS 6178005
 
    
Indicates whether dynamic reloading is enabled (as specified by the dynamic-reload-enabled attribute of <applications> in server.xml)
 
     private boolean _reloadingEnabled = false;

    
The number of seconds between checks for modified classes (if dynamic reloading is enabled).

This value is specified by the reload-poll-interval attribute of <applications> in server.xml.

 
     private int _pollInterval = 2;

    
Has this component been started yet?
 
     protected boolean _started = false;

    
The global (at the http-service level) ssoEnabled property.
 
     protected boolean globalSSOEnabled = true;
 
     protected volatile WebContainerFeatureFactory webContainerFeatureFactory;

    
The value of the instance-level session property named "enableCookies"
 
     boolean instanceEnableCookies = true;
 
     @Inject
 
     protected JspProbeProvider jspProbeProvider = null;
     protected RequestProbeProvider requestProbeProvider = null;
     protected ServletProbeProvider servletProbeProvider = null;
     protected SessionProbeProvider sessionProbeProvider = null;
     protected WebModuleProbeProvider webModuleProbeProvider = null;
 
     protected WebConfigListener configListener = null;
 
     // Indicates whether we are being shut down
     private boolean isShutdown = false;
 
     private final Object mapperUpdateSync = new Object();
 
     private SecurityService securityService = null;
 
 
 
     private InjectionManager injectionMgr;
 
     private InvocationManager invocationMgr;
 
     private Collection<TldProvidertldProviders;
 
     private String logServiceFile = null;

    
Static initialization
 
     static {
         if (System.getProperty() != null) {
              = Boolean.valueOf(System.getProperty());
         }
     }
     
     	ServiceLocator locator = (ServiceLocator;
     	
     	
     	config.addActiveDescriptor(WebConfigListener.class);
     	
     	config.commit();
     	
     	return locator.getService(WebConfigListener.class);
     }
 
     public void postConstruct() {
 
         createProbeProviders();
 
          = .getService(InjectionManager.class);
          = .getAllServices(TldProvider.class);
 
         createStatsProviders();
 
         setJspFactory();
 
          =
                 .getApplicationCompileJspPath().getAbsolutePath();
 
         // START S1AS 6178005
         // END S1AS 6178005
 
         // TODO: ParserUtils should become a @Service and it should initialize itself.
         // TODO: there should be only one EntityResolver for both DigesterFactory
         // and ParserUtils
         File root = .getInstallRoot();
         File libRoot = new File(root"lib");
         File schemas = new File(libRoot"schemas");
         File dtds = new File(libRoot"dtds");
 
         try {
             ParserUtils.setSchemaResourcePrefix(schemas.toURI().toURL().toString());
             ParserUtils.setDtdResourcePrefix(dtds.toURI().toURL().toString());
             ParserUtils.setEntityResolver(.<EntityResolver>getService(EntityResolver.class"web"));
         } catch (MalformedURLException e) {
         }
 
 
 
         setDebugLevel();
 
         String maxDepth = null;
         org.glassfish.web.config.serverbeans.WebContainer configWC =
                .getExtensionByType(
                org.glassfish.web.config.serverbeans.WebContainer.class); 
         if (configWC != null)
             maxDepth = configWC.getPropertyValue();
         if (maxDepth != null) {
             int depth = -1;
             try {
                 depth = Integer.parseInt(maxDepth);
             } catch (NumberFormatException e) {
             }
 
             if (depth > 0) {
                 Request.setMaxDispatchDepth(depth);
                 if (.isLoggable(.)) {
                     .log(.maxDepth);
                 }
             }
         }
 
          = null;
         Map<StringStringlogProps = null;
         try {
             logProps = .getLoggingProperties();
             if (logProps != null) {
                  = logProps.get("com.sun.enterprise.server.logging.GFFileHandler.file");
 
                 if (.contains("${com.sun.aas.instanceRoot}")) {
                     String instanceRoot = System.getProperty("com.sun.aas.instanceRoot");
                     String f = .replace("${com.sun.aas.instanceRoot}"instanceRoot);
                      = f;
                 }
 
                  = logProps.get("org.apache.catalina.level");
             }
         } catch (IOException ioe) {
         }
 
          = .getService(EmbeddedWebContainer.class);
         .setWebContainer(this);
         .setLogLevel();
 
         .setUseNaming(false);
         if ( > 1)
             .setDebug();
         .setLogger(new IASLogger());
          = .createEngine();
         .setService();
         .addEngine();
 
         /*
         * Set the server info.
         * By default, the server info is taken from Version#getVersion.
         * However, customers may override it via the product.name system
         * property.
         * Some customers prefer not to disclose the server info
         * for security reasons, in which case they would set the value of the
         * product.name system property to the empty string. In this case,
         * the server name will not be publicly disclosed via the "Server"
         * HTTP response header (which will be suppressed) or any container
         * generated error pages. However, it will still appear in the
         * server logs (see IT 6900).
         */
         String serverInfo = System.getProperty("product.name");
         if (serverInfo == null) {
             ServerInfo.setServerInfo(Version.getVersion());
             ServerInfo.setPublicServerInfo(Version.getVersion());
         } else if (serverInfo.isEmpty()) {
             ServerInfo.setServerInfo(Version.getVersion());
             ServerInfo.setPublicServerInfo(serverInfo);
         } else {
             ServerInfo.setServerInfo(serverInfo);
             ServerInfo.setPublicServerInfo(serverInfo);
         }
 
 
 
         ObservableBean bean = (ObservableBean) ConfigSupport.getImpl(
                 .getHttpService());
         bean.addListener();
 
         bean = (ObservableBean) ConfigSupport.getImpl(
                 .getNetworkConfig().getNetworkListeners());
         bean.addListener();
 
         if (.getAvailabilityService() != null) {
             bean = (ObservableBean) ConfigSupport.getImpl(
                     .getAvailabilityService());
             bean.addListener();
         }
 
 
 
         // embedded mode does not have manager-propertie in domain.xml
         if (. != null) {
             ObservableBean managerBean = (ObservableBean) ConfigSupport.getImpl(
                     .);
             managerBean.addListener();
         }
 
         if (.getJavaConfig() != null) {
             ((ObservableBean)ConfigSupport.getImpl(
                     .getJavaConfig())).addListener();
         }
 
         .setContainer(this);
         .setLogger();
 
         .register(this);
 
 
         HttpService httpService = .getHttpService();
         NetworkConfig networkConfig = .getNetworkConfig();
         if (networkConfig != null) {
             //continue;
              = .getSecurityService();
 
             // Configure HTTP listeners
             NetworkListeners networkListeners = networkConfig.getNetworkListeners();
             if (networkListeners != null) {
                 List<NetworkListenerlisteners = networkListeners.getNetworkListener();
                 for (NetworkListener listener : listeners) {
                     createHttpListener(listenerhttpService);
                 }
             }
 
 
             // Configure virtual servers
             createHosts(httpService);
         }
 
         loadSystemDefaultWebModules();
 
         //_lifecycle.fireLifecycleEvent(START_EVENT, null);
          = true;
 
         /*
          * Start the embedded container.
          * Make sure to set the thread's context classloader to the
          * classloader of this class (see IT 8866 for details)
          */
         ClassLoader current = Thread.currentThread().getContextClassLoader();
         Thread.currentThread().setContextClassLoader(
                 getClass().getClassLoader());
         try {
             /*
              * Trigger a call to sun.awt.AppContext.getAppContext().
              * This will pin the classloader of this class in memory
              * and fix a memory leak affecting instances of WebappClassLoader
              * that was caused by a JRE implementation change in 1.6.0_15
              * onwards. See IT 11110
              */
             ImageIO.getCacheDirectory();
             .start();
         } catch (LifecycleException le) {
             .log(.le);
             return;
         } finally {
             // Restore original context classloader
             Thread.currentThread().setContextClassLoader(current);
         }
     }
 
     public void event(Event event) {
         if (event.is(.)) {
             // configure default web modules for virtual servers after all
             // applications are processed
         } else if (event.is(.)) {
              = true;
         }
     }

    
Notifies any interested listeners that all ServletContextListeners of the web module represented by the given WebBundleDescriptor have been invoked at their contextInitialized method
 
         .send(new Event<WebBundleDescriptor>(
                 .wbd),
                 false);
     }
 
     public void preDestroy() {
         try {
             for (Connector con : .findConnectors()) {
                 deleteConnector((WebConnector)con);
             }
             .removeEngine(getEngine());
             .destroy();
         } catch (LifecycleException le) {
             .log(.le);
             return;
         }
     }
 
         return ;
     }
 
     public boolean isShutdown() {
         return ;
     }
 
         return ;
     }

    
Gets the probe provider for servlet related events.
 
         return ;
     }


    
Gets the probe provider for jsp related events.
 
         return ;
     }


    
Gets the probe provider for session related events.
 
         return ;
     }

    
Gets the probe provider for request/response related events.
 
         return ;
     }

    
Gets the probe provider for web module related events.
 
         return ;
     }
 
     public String getName() {
         return "Web";
     }
 
     public Class<? extends WebDeployergetDeployer() {
         return WebDeployer.class;
     }
 
         return ;
     }
 
     public WebConnector getJkConnector() {
         return ;
     }
 
     public HashMap<StringWebConnectorgetConnectorMap() {
         return ;
     }

    
Instantiates and injects the given Servlet class for the given WebModule
    <T extends Servlet> T createServletInstance(WebModule module,
                                                Class<T> clazzthrows Exception {
        validateJSR299Scope(clazz);
        WebComponentInvocation inv = new WebComponentInvocation(module);
        try {
            .preInvoke(inv);
            return .createManagedObject(clazz);
        } finally {
            .postInvoke(inv);
        }
    }

    
Instantiates and injects the given Filter class for the given WebModule
    <T extends Filter> T createFilterInstance(WebModule module,
                                              Class<T> clazzthrows Exception {
        validateJSR299Scope(clazz);
        WebComponentInvocation inv = new WebComponentInvocation(module);
        try {
            .preInvoke(inv);
            return .createManagedObject(clazz);
        } finally {
            .postInvoke(inv);
        }
    }

    
Instantiates and injects the given EventListener class for the given WebModule
            WebModule moduleClass<T> clazzthrows Exception {
        validateJSR299Scope(clazz);
        WebComponentInvocation inv = new WebComponentInvocation(module);
        try {
            .preInvoke(inv);
            return .createManagedObject(clazz);
        } finally {
            .postInvoke(inv);
        }
    }

    
Instantiates and injects the given tag handler class for the given WebModule
    public <T extends JspTag> T createTagHandlerInstance(WebModule module,
                                                         Class<T> clazzthrows Exception {
        WebComponentInvocation inv = new WebComponentInvocation(module);
        try {
            .preInvoke(inv);
            return .createManagedObject(clazz);
        } finally {
            .postInvoke(inv);
        }
    }

    
Use an network-listener subelements and creates a corresponding Tomcat Connector for each.

Parameters:
httpService The http-service element
listener the configuration element.
    protected WebConnector createHttpListener(NetworkListener listener,
                                              HttpService httpService) {
        return createHttpListener(listenerhttpServicenull);
    }
    protected WebConnector createHttpListener(NetworkListener listener,
                                              HttpService httpService,
                                              Mapper mapper) {
        if (!Boolean.valueOf(listener.getEnabled())) {
            return null;
        }
        int port = 8080;
        WebConnector connector;
        checkHostnameUniqueness(listener.getName(), httpService);
        try {
            port = Integer.parseInt(listener.getPort());
        } catch (NumberFormatException nfe) {
            String msg = .getString();
            msg = MessageFormat.format(msglistener.getPort(),
                    listener.getName());
            throw new IllegalArgumentException(msg);
        }
        if (mapper == null) {
            for (Mapper m : .<Mapper>getAllServices(Mapper.class)) {
                if (m.getPort() == port && m instanceof ContextMapper) {
                    ContextMapper cm = (ContextMapperm;
                    if (listener.getName().equals(cm.getId())) {
                        mapper = m;
                        break;
                    }
                }
            }
        }
        String defaultVS = listener.findHttpProtocol().getHttp().getDefaultVirtualServer();
        if (!defaultVS.equals(.....)) {
            // Before we start a WebConnector, let's makes sure there is
            // not another Container already listening on that port
            DataChunk host = DataChunk.newInstance();
            char[] c = defaultVS.toCharArray();
            host.setChars(c, 0, c.length);
            DataChunk mb = DataChunk.newInstance();
            mb.setChars(new char[]{'/'}, 0, 1);
            MappingData md = new MappingData();
            try {
                mapper.map(hostmbmd);
            } catch (Exception e) {
                if (.isLoggable(.)) {
                    .log(.""e);
                }
            }
            if (md.context != null && md.context instanceof ContextRootInfo) {
                ContextRootInfo r = (ContextRootInfomd.context;
                if (!(r.getHttpHandler() instanceof ContainerMapper)){
                    new BindException("Port " + port + " is already used by Container: "
                            + r.getHttpHandler() +
                            " and will not get started.").printStackTrace();
                    return null;
                }
            }
        }
        /*
         * Create Connector. Connector is SSL-enabled if
         * 'security-enabled' attribute in <http-listener>
         * element is set to TRUE.
         */
        boolean isSecure = Boolean.valueOf(listener.findHttpProtocol().getSecurityEnabled());
        if (isSecure &&  == -1) {
             = port;
        }
        String address = listener.getAddress();
        if ("any".equals(address) || "ANY".equals(address)
                || "INADDR_ANY".equals(address)) {
            address = null;
            /*
             * Setting 'address' to NULL will cause Tomcat to pass a
             * NULL InetAddress argument to the java.net.ServerSocket
             * constructor, meaning that the server socket will accept
             * connections on any/all local addresses.
             */
        }
        connector = (WebConnector.createConnector(
                addressportisSecure);
        connector.setMapper(mapper);
        connector.setJvmRoute(.getJvmRoute());
        if (.isLoggable(.)) {
            .log(.,
                    new Object[]{listener.getName(), listener.getAddress(), listener.getPort()});
        }
        connector.setDefaultHost(listener.findHttpProtocol().getHttp().getDefaultVirtualServer());
        connector.setName(listener.getName());
        connector.setInstanceName();
        connector.configure(listenerisSecurehttpService);
        .addConnector(connector);
        .put(listener.getName(), connector);
        // If we already know the redirect port, then set it now
        // This situation will occurs when dynamic reconfiguration occurs
        String redirectPort = listener.findHttpProtocol().getHttp().getRedirectPort();
        if (redirectPort != null) {
            connector.setRedirectPort(Integer.parseInt(redirectPort));
        } else if ( != -1) {