| /* |
| * 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.nutch.webui; |
| |
| import org.apache.commons.cli.CommandLine; |
| import org.apache.commons.cli.CommandLineParser; |
| import org.apache.commons.cli.GnuParser; |
| import org.apache.commons.cli.HelpFormatter; |
| import org.apache.commons.cli.Option; |
| import org.apache.commons.cli.OptionBuilder; |
| import org.apache.commons.cli.Options; |
| import org.apache.hadoop.util.StringUtils; |
| import org.apache.wicket.protocol.http.WicketFilter; |
| import org.apache.wicket.spring.SpringWebApplicationFactory; |
| import org.mortbay.jetty.Handler; |
| import org.mortbay.jetty.Server; |
| import org.mortbay.jetty.servlet.Context; |
| import org.mortbay.jetty.servlet.DefaultServlet; |
| import org.mortbay.jetty.servlet.FilterHolder; |
| import org.springframework.web.context.ContextLoaderListener; |
| import org.springframework.web.context.WebApplicationContext; |
| import org.springframework.web.context.request.RequestContextListener; |
| import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; |
| |
| public class NutchUiServer { |
| private static final String APP_FACTORY_NAME = SpringWebApplicationFactory.class |
| .getName(); |
| private static final String CONFIG_LOCATION = "org.apache.nutch.webui"; |
| private static final String CMD_PORT = "port"; |
| private static Integer port = 8080; |
| |
| public static void main(String[] args) throws Exception { |
| CommandLineParser parser = new GnuParser(); |
| Options options = createWebAppOptions(); |
| CommandLine commandLine = null; |
| HelpFormatter formatter = new HelpFormatter(); |
| try { |
| commandLine = parser.parse(options, args); |
| } catch (Exception e) { |
| formatter.printHelp("NutchUiServer", options, true); |
| StringUtils.stringifyException(e); |
| } |
| |
| if (commandLine.hasOption("help")) { |
| formatter.printHelp("NutchUiServer", options, true); |
| return; |
| } |
| if (commandLine.hasOption(CMD_PORT)) { |
| port = Integer.parseInt(commandLine.getOptionValue(CMD_PORT)); |
| } |
| startServer(); |
| } |
| |
| private static void startServer() throws Exception, InterruptedException { |
| Server server = new Server(port); |
| Context context = new Context(server, "/", Context.SESSIONS); |
| context.addServlet(DefaultServlet.class, "/*"); |
| |
| context.addEventListener(new ContextLoaderListener(getContext())); |
| context.addEventListener(new RequestContextListener()); |
| |
| WicketFilter filter = new WicketFilter(); |
| filter.setFilterPath("/"); |
| FilterHolder holder = new FilterHolder(filter); |
| holder.setInitParameter("applicationFactoryClassName", APP_FACTORY_NAME); |
| context.addFilter(holder, "/*", Handler.DEFAULT); |
| |
| server.setHandler(context); |
| server.start(); |
| server.join(); |
| } |
| |
| private static WebApplicationContext getContext() { |
| AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); |
| context.setConfigLocation(CONFIG_LOCATION); |
| return context; |
| } |
| |
| private static Options createWebAppOptions() { |
| Options options = new Options(); |
| Option helpOpt = new Option("h", "help", false, "show this help message"); |
| OptionBuilder.withDescription("Port to run the WebApplication on."); |
| OptionBuilder.hasOptionalArg(); |
| OptionBuilder.withArgName("port number"); |
| options.addOption(OptionBuilder.create(CMD_PORT)); |
| options.addOption(helpOpt); |
| return options; |
| } |
| |
| } |