diff --git a/hcatalog/webhcat/svr/src/main/config/webhcat-default.xml b/hcatalog/webhcat/svr/src/main/config/webhcat-default.xml index 801f3a5..e33cf8c 100644 --- a/hcatalog/webhcat/svr/src/main/config/webhcat-default.xml +++ b/hcatalog/webhcat/svr/src/main/config/webhcat-default.xml @@ -32,6 +32,12 @@ + templeton.jetty.configuration + + The embedded jetty configuration file. + + + templeton.hadoop.conf.dir ${env.HADOOP_CONF_DIR} The path to the Hadoop configuration. diff --git a/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java b/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java index 992aa38..161ab3b 100644 --- a/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java +++ b/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java @@ -95,6 +95,7 @@ } public static final String PORT = "templeton.port"; + public static final String JETTY_CONFIGURATION = "templeton.jetty.configuration"; public static final String EXEC_ENCODING_NAME = "templeton.exec.encoding"; public static final String EXEC_ENVS_NAME = "templeton.exec.envs"; public static final String EXEC_MAX_BYTES_NAME = "templeton.exec.max-output-bytes"; @@ -340,6 +341,7 @@ private boolean loadOneClasspathConfig(String fname) { return false; } + public String jettyConfiguration() { return get(JETTY_CONFIGURATION); } public String libJars() { return get(LIB_JARS_NAME); } public String hadoopQueueName() { return get(HADOOP_QUEUE_NAME); } public String enableJobReconnectDefault() { return get(ENABLE_JOB_RECONNECT_DEFAULT); } diff --git a/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/Main.java b/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/Main.java index 8aca9da..042dc1c 100644 --- a/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/Main.java +++ b/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/Main.java @@ -22,12 +22,15 @@ import com.sun.jersey.spi.container.servlet.ServletContainer; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.ArrayUtils; import org.apache.hadoop.hive.common.classification.InterfaceAudience; import org.apache.hadoop.hive.common.classification.InterfaceStability; import org.apache.hadoop.hdfs.web.AuthFilter; @@ -37,13 +40,16 @@ import org.apache.hadoop.util.GenericOptionsParser; import org.eclipse.jetty.rewrite.handler.RedirectPatternRule; import org.eclipse.jetty.rewrite.handler.RewriteHandler; +import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.HandlerList; +import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.servlet.FilterHolder; import org.eclipse.jetty.servlet.FilterMapping; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.xml.XmlConfiguration; import org.slf4j.bridge.SLF4JBridgeHandler; import javax.servlet.http.HttpServletRequest; @@ -162,8 +168,23 @@ public Server runServer(int port) conf.kerberosKeytab()); } - // Create the Jetty server - Server server = new Server(port); + // Create the Jetty server. If jetty conf file exists, use that to create server + // to have more control. + Server server = null; + if (StringUtils.isEmpty(conf.jettyConfiguration())) { + server = new Server(port); + } else { + FileInputStream jettyConf = new FileInputStream(conf.jettyConfiguration()); + XmlConfiguration configuration = new XmlConfiguration(jettyConf); + server = (Server)configuration.configure(); + if (ArrayUtils.isEmpty(server.getConnectors())) { + Connector connector=new SelectChannelConnector(); + connector.setPort(port); + server.setConnectors(new Connector[]{connector}); + } + server.getConnectors()[0].setPort(port); + } + ServletContextHandler root = new ServletContextHandler(server, "/"); // Add the Auth filter