class JettyHTTPServerEngineFactory {

    public synchronized JettyHTTPServerEngine createJettyHTTPServerEngine(String host, int port,
        String protocol, String id) throws GeneralSecurityException, IOException {
        LOG.fine("Creating Jetty HTTP Server Engine for port " + port + ".");
        TLSServerParameters tlsParameters = null;
        if (id != null && tlsParametersMap != null && tlsParametersMap.containsKey(id)) {
            tlsParameters = tlsParametersMap.get(id);
        }
        JettyHTTPServerEngine ref = getOrCreate(this, host, port, tlsParameters);
        // checking the protocol
        if (!protocol.equals(ref.getProtocol())) {
            throw new IOException("Protocol mismatch for port " + port + ": "
                        + "engine's protocol is " + ref.getProtocol()
                        + ", the url protocol is " + protocol);
        }

        if (!(ref.isSetThreadingParameters()
              || null == fallbackThreadingParameters)) {
            if (LOG.isLoggable(Level.INFO)) {
                final int min = fallbackThreadingParameters.getMinThreads();
                final int max = fallbackThreadingParameters.getMaxThreads();
                final String threadNamePrefix = fallbackThreadingParameters.getThreadNamePrefix();
                LOG.log(Level.INFO,
                        "FALLBACK_THREADING_PARAMETERS_MSG",
                        new Object[] {port, min, max, threadNamePrefix});
            }
            ref.setThreadingParameters(fallbackThreadingParameters);
        }

        return ref;
    }

    public  JettyHTTPServerEngineFactory();
    public  JettyHTTPServerEngineFactory(Bus b);
    public  JettyHTTPServerEngineFactory(Bus b,
                                        Map<String, TLSServerParameters> tls,
                                        Map<String, ThreadingParameters> threading);

}