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