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..3569871 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;
@@ -44,6 +47,7 @@
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;
@@ -116,6 +120,9 @@ public void run() {
try {
checkEnv();
runServer(port);
+ // Currently only print the first port to be consistent with old behavior
+ port = ArrayUtils.isEmpty(server.getConnectors()) ? -1 : server.getConnectors()[0].getPort();
+
System.out.println("templeton: listening on port " + port);
LOG.info("Templeton listening on port " + port);
} catch (Exception e) {
@@ -153,7 +160,7 @@ private void checkCurrentDirPermissions() {
}
}
- public Server runServer(int port)
+ public Server runServer(Integer port)
throws Exception {
//Authenticate using keytab
@@ -162,8 +169,17 @@ 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();
+ }
+
ServletContextHandler root = new ServletContextHandler(server, "/");
// Add the Auth filter