/tags/release-0.1-rc2/hive/external/hwi/src/java/org/apache/hadoop/hive/hwi/HWIServer.java
Java | 146 lines | 73 code | 18 blank | 55 comment | 6 complexity | 39f5acd8894d0311fc807b9f59bcfceb MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause, JSON, CPL-1.0
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
- package org.apache.hadoop.hive.hwi;
- import java.io.File;
- import java.io.IOException;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.apache.hadoop.hive.conf.HiveConf;
- import org.apache.hadoop.hive.shims.JettyShims;
- import org.apache.hadoop.hive.shims.ShimLoader;
- /**
- * This is the entry point for HWI. A web server is invoked in the same manner
- * as the hive CLI. Rather then opening a command line session a web server is
- * started and a web application to work with hive is started.
- */
- public class HWIServer {
- protected static final Log l4j = LogFactory.getLog(HWIServer.class.getName());
- private JettyShims.Server webServer;
- private final String[] args;
- /**
- *
- * @param args
- * These are the command line arguments. Usually -hiveconf.
- * @throws java.io.IOException
- */
- public HWIServer(String[] args) throws IOException {
- this.args = args;
- }
- /**
- * This method initialized the internal Jetty Servlet Engine. It adds the hwi
- * context path.
- *
- * @throws java.io.IOException
- * Port already in use, bad bind etc.
- */
- public void start() throws IOException {
- HiveConf conf = new HiveConf(this.getClass());
- String listen = null;
- int port = -1;
- listen = conf.getVar(HiveConf.ConfVars.HIVEHWILISTENHOST);
- port = conf.getIntVar(HiveConf.ConfVars.HIVEHWILISTENPORT);
- if (listen.equals("")) {
- l4j.warn("hive.hwi.listen.host was not specified defaulting to 0.0.0.0");
- listen = "0.0.0.0";
- }
- if (port == -1) {
- l4j.warn("hive.hwi.listen.port was not specified defaulting to 9999");
- port = 9999;
- }
- String hwiWAR = conf.getVar(HiveConf.ConfVars.HIVEHWIWARFILE);
- String hivehome = System.getenv().get("HIVE_HOME");
- File hwiWARFile = new File(hivehome, hwiWAR);
- if (!hwiWARFile.exists()) {
- l4j.fatal("HWI WAR file not found at " + hwiWAR);
- System.exit(1);
- }
- webServer = ShimLoader.getJettyShims().startServer(listen, port);
- webServer.addWar(hwiWARFile.toString(), "/hwi");
- /*
- * The command line args may be used by multiple components. Rather by
- * setting these as a system property we avoid having to specifically pass
- * them
- */
- StringBuilder sb = new StringBuilder();
- for (String arg : args) {
- sb.append(arg + " ");
- }
- System.setProperty("hwi-args", sb.toString());
- try {
- while (true) {
- try {
- webServer.start();
- webServer.join();
- l4j.debug(" HWI Web Server is started.");
- break;
- } catch (org.mortbay.util.MultiException ex) {
- throw ex;
- }
- }
- } catch (IOException ie) {
- throw ie;
- } catch (Exception e) {
- IOException ie = new IOException("Problem starting HWI server");
- ie.initCause(e);
- l4j.error("Parsing hwi.listen.port caused exception ", e);
- throw ie;
- }
- }
- /**
- *
- * @param args
- * as of now no arguments are supported
- * @throws java.lang.Exception
- * Could be thrown if due to issues with Jetty or bad configuration
- * options
- *
- */
- public static void main(String[] args) throws Exception {
- HWIServer hwi = new HWIServer(args);
- l4j.info("HWI is starting up");
- hwi.start();
- }
- /**
- * Shut down the running HWI Server.
- *
- * @throws Exception
- * Running Thread.stop() can and probably will throw this
- */
- public void stop() throws Exception {
- l4j.info("HWI is shutting down");
- webServer.stop();
- }
- }