package com.cloudhopper.jetty;
/*
* #%L
* ch-jetty
* %%
* Copyright (C) 2012 - 2013 Cloudhopper by Twitter
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import java.util.ArrayList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Configuration of an HttpServer.
*
* @author joelauer (twitter: @jjlauer or <a href="http://twitter.com/jjlauer" target=window>http://twitter.com/jjlauer</a>)
*/
public class HttpServerConfiguration {
private static final Logger logger = LoggerFactory.getLogger(HttpServerConfiguration.class);
// name of server such as "mainHttpServer" or "managementHttpServer"
protected String name;
// should sessions be enabled?
protected Boolean sessionsEnabled;
// resource base dir (for files, html, images, etc)
protected String resourceBaseDirectory;
// list of connectors this server will bind to
protected ArrayList<HttpConnectorConfiguration> connectors;
// list of SSL connectors this server will bind to
protected ArrayList<HttpSslConnectorConfiguration> sslConnectors;
// min number of threads to service requests
protected Integer minThreads;
// max number of threads to service requests
protected Integer maxThreads;
// queue size for handling connections that cannot be immediately handled
protected int maxQueueSize;
// time to keep an idle thread around
protected long threadKeepAliveTimeout;
// time for graceful shutdown (to finish serving existing connections while not allowing new
protected Integer gracefulShutdownTime;
// disable jetty's internal shutdown hook? only do this if we'll explicitly call stop
protected boolean jettyAutoShutdownDisabled;
// jmx domain to use for mbean
protected String jmxDomain;
public HttpServerConfiguration() {
this.sessionsEnabled = true;
this.connectors = new ArrayList<HttpConnectorConfiguration>();
this.sslConnectors = new ArrayList<HttpSslConnectorConfiguration>();
this.minThreads = 5;
this.maxThreads = 50;
this.threadKeepAliveTimeout = 60000;
this.jettyAutoShutdownDisabled = false;
this.jmxDomain = "com.cloudhopper.jetty." + safeGetName();
}
public String getResourceBaseDirectory() {
return resourceBaseDirectory;
}
public void setResourceBaseDirectory(String resourceBaseDirectory) {
this.resourceBaseDirectory = resourceBaseDirectory;
}
public void addConnector(HttpConnectorConfiguration value) {
this.connectors.add(value);
}
public void addSslConnector(HttpSslConnectorConfiguration value) {
this.sslConnectors.add(value);
}
/**
* Checks if this server has at least one connector (either cleartext or
* SSL) configured.
* @return True if has at least one, otherwise false.
*/
public boolean hasAtLeastOneConnector() {
return (this.connectors.size() > 0 || this.sslConnectors.size() > 0);
}
public String getPortString() {
StringBuilder ports = new StringBuilder();
if (this.connectors.size() > 0) {
for (HttpConnectorConfiguration config : this.connectors) {
if (ports.length() > 0) {
ports.append(", ");
}
ports.append(config.getPort());
}
}
if (this.sslConnectors.size() > 0) {
for (HttpConnectorConfiguration config : this.sslConnectors) {
if (ports.length() > 0) {
ports.append(", ");
}
ports.append(config.getPort());
ports.append("(SSL)");
}
}
return ports.toString();
}
public ArrayList<HttpConnectorConfiguration> getConnectors() {
return this.connectors;
}
public ArrayList<HttpSslConnectorConfiguration> getSslConnectors() {
return this.sslConnectors;
}
public void setSessionsEnabled(Boolean value) {
this.sessionsEnabled = value;
}
public Boolean isSessionsEnabled() {
return this.sessionsEnabled;
}
public void setName(String value) {
this.name = value;
}
public String getName() {
return this.name;
}
public String safeGetName() {
return (this.name == null ? "default" : this.name);
}
public Integer getMinThreads() {
return this.minThreads;
}
public void setMinThreads(Integer value) {
this.minThreads = value;
}
public Integer getMaxThreads() {
return this.maxThreads;
}
public void setMaxThreads(Integer value) {
this.maxThreads = value;
}
public int getMaxQueueSize() {
return maxQueueSize;
}
public void setMaxQueueSize(int maxQueueSize) {
this.maxQueueSize = maxQueueSize;
}
public long getThreadKeepAliveTimeout() {
return threadKeepAliveTimeout;
}
public void setThreadKeepAliveTimeout(long threadKeepAliveTimeout) {
this.threadKeepAliveTimeout = threadKeepAliveTimeout;
}
public Integer getGracefulShutdownTime() {
return gracefulShutdownTime;
}
public void setGracefulShutdownTime(Integer time) {
this.gracefulShutdownTime = time;
}
public boolean isJettyAutoShutdownDisabled() {
return this.jettyAutoShutdownDisabled;
}
public void setJettyAutoShutdownDisabled(boolean disabled) {
this.jettyAutoShutdownDisabled = disabled;
}
public void setJmxDomain(String value) {
this.jmxDomain = value;
}
public String getJmxDomain() {
return this.jmxDomain;
}
}