/** Configure the Grizzly HTTP FileCache mechanism */
 protected FileCache configureHttpFileCache(org.glassfish.grizzly.config.dom.FileCache cache) {
   final FileCache fileCache = new FileCache();
   if (cache != null) {
     fileCache.setEnabled(GrizzlyConfig.toBoolean(cache.getEnabled()));
     fileCache.setSecondsMaxAge(Integer.parseInt(cache.getMaxAgeSeconds()));
     fileCache.setMaxCacheEntries(Integer.parseInt(cache.getMaxFilesCount()));
     fileCache.setMaxLargeFileCacheSize(Integer.parseInt(cache.getMaxCacheSizeBytes()));
   } else {
     fileCache.setEnabled(false);
   }
   return fileCache;
 }
  protected void configureCometSupport(
      final ServiceLocator habitat,
      final NetworkListener networkListener,
      final Http http,
      final FilterChainBuilder filterChainBuilder) {

    if (GrizzlyConfig.toBoolean(http.getCometSupportEnabled())) {
      final AddOn cometAddOn =
          loadAddOn(habitat, "comet", "org.glassfish.grizzly.comet.CometAddOn");
      if (cometAddOn != null) {
        configureElement(habitat, networkListener, http, cometAddOn);
        cometAddOn.setup(null, filterChainBuilder);
        isCometEnabled = true;
      }
    }
  }
  @SuppressWarnings({"deprecation"})
  protected void configureHttpProtocol(
      final ServiceLocator habitat,
      final NetworkListener networkListener,
      final Http http,
      final FilterChainBuilder filterChainBuilder,
      boolean secure) {
    transactionTimeoutMillis = Long.parseLong(http.getRequestTimeoutSeconds()) * 1000;
    filterChainBuilder.add(
        new IdleTimeoutFilter(
            obtainDelayedExecutor(), Integer.parseInt(http.getTimeoutSeconds()), TimeUnit.SECONDS));
    final org.glassfish.grizzly.http.HttpServerFilter httpServerFilter =
        createHttpServerCodecFilter(http);
    final Set<ContentEncoding> contentEncodings = configureContentEncodings(http);
    for (ContentEncoding contentEncoding : contentEncodings) {
      httpServerFilter.addContentEncoding(contentEncoding);
    }
    //        httpServerFilter.getMonitoringConfig().addProbes(
    //                serverConfig.getMonitoringConfig().getHttpConfig().getProbes());
    filterChainBuilder.add(httpServerFilter);
    final FileCache fileCache = configureHttpFileCache(http.getFileCache());
    fileCache.initialize(obtainDelayedExecutor());
    final FileCacheFilter fileCacheFilter = new FileCacheFilter(fileCache);
    //        fileCache.getMonitoringConfig().addProbes(
    //                serverConfig.getMonitoringConfig().getFileCacheConfig().getProbes());
    filterChainBuilder.add(fileCacheFilter);
    final HttpServerFilter webServerFilter =
        new HttpServerFilter(getHttpServerFilterConfiguration(http), obtainDelayedExecutor());

    final HttpHandler httpHandler = getHttpHandler();
    httpHandler.setAllowEncodedSlash(GrizzlyConfig.toBoolean(http.getEncodedSlashEnabled()));
    webServerFilter.setHttpHandler(httpHandler);
    //        webServerFilter.getMonitoringConfig().addProbes(
    //                serverConfig.getMonitoringConfig().getWebServerConfig().getProbes());
    filterChainBuilder.add(webServerFilter);

    configureSpdySupport(habitat, networkListener, http.getSpdy(), filterChainBuilder, secure);

    // TODO: evaluate comet/websocket support over SPDY.
    configureCometSupport(habitat, networkListener, http, filterChainBuilder);

    configureWebSocketSupport(habitat, networkListener, http, filterChainBuilder);

    configureAjpSupport(habitat, networkListener, http, filterChainBuilder);
  }