public ServiceContainer(final ServerConfig serverConfig) {
HeadersParser headersParser = new HeadersParser();
requestWrapperFactory = new HttpServletRequestImplFactory(headersParser,
new QueryStringParser(),
new RequestStatusParser(),
new CookieParser(),
new MultipartHeadersPartParser(headersParser),
serverConfig.getTempPath()
);
responseFactory = new HttpServletResponseImplFactory(
new HeadersSerializer(),
new CookieHeaderSerializer(new DateProvider()),
new StreamHelper(
new RangeHelper(),
new RangePartHeaderSerializer()
)
);
threadPoolExecutor = new ThreadPoolExecutor(1, serverConfig.getMaxServerThreads(),
DEFAULT_TIME_UNITS, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(serverConfig.getMaxServerThreads() * MAX_THREADS_MULTIPLIER),
Executors.defaultThreadFactory(),
new ServiceUnavailableHandler(responseFactory)
);
httpErrorHandlerResolver = new HttpErrorHandlerResolverImpl(serverConfig);
pathHelper = new PathHelper();
}