private void init()

in uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebServer.java [219:428]


  private void init() {
    String methodName = "init";
    logger.trace(methodName, null, messages.fetch("enter"));
    logger.info(methodName, null, messages.fetchLabel("cluster name") + getClusterName());
    logger.info(methodName, null, messages.fetchLabel("class definition file") + getClassDefinitionFile());

    String property;

    /**
     * Determine server idle timeout ducc.ws.idle.timeout
     */
    property = DuccPropertiesResolver.get(DuccPropertiesResolver.ducc_ws_idle_timeout);
    int idleTimeout = ConfigValue.IdleTimeout.getInt(property);

    /**
     * Determine server max threads ducc.ws.max.threads
     */
    property = DuccPropertiesResolver.get(DuccPropertiesResolver.ducc_ws_max_threads);
    int maxThreads = ConfigValue.MaxThreads.getInt(property);

    /**
     * Determine server http port ducc.ws.port
     */
    property = DuccPropertiesResolver.get(DuccPropertiesResolver.ducc_ws_port);
    int portHttp = ConfigValue.PortHttp.getInt(property);

    /**
     * Determine server https port ducc.ws.port.ssl
     */
    property = DuccPropertiesResolver.get(DuccPropertiesResolver.ducc_ws_port_ssl);
    int portHttps = ConfigValue.PortHttps.getInt(property);

    try {
      InetAddress inetAddress = InetAddress.getLocalHost();
      String host = inetAddress.getCanonicalHostName();
      DuccWebMonitor.getInstance().register(host, "" + portHttp);
    } catch (Exception e) {
      logger.error(methodName, jobid, e);
    }

    // === jetty.xml ===

    // Setup Threadpool
    QueuedThreadPool threadPool = new QueuedThreadPool();
    threadPool.setMaxThreads(maxThreads);

    // Server
    server = new Server(threadPool);

    // Scheduler
    server.addBean(new ScheduledExecutorScheduler());

    // === jetty-http.xml ===
    ServerConnector http = new ServerConnector(server, new HttpConnectionFactory());
    http.setPort(portHttp);
    http.setIdleTimeout(idleTimeout);
    server.addConnector(http);

    // === jetty-https.xml ===
    // SSL Context Factory
    SslContextFactory sslContextFactory = new SslContextFactory();
    String keystore = DuccWebServerHelper.getDuccWebKeyStore();

    logger.info(methodName, jobid, "keystore=" + keystore);
    HttpConfiguration http_config = new HttpConfiguration();
    http_config.setSecureScheme("https");
    http_config.setSecurePort(portHttps);
    logger.info(methodName, jobid, "portHttps=" + portHttps);
    HttpConfiguration https_config = new HttpConfiguration(http_config);
    https_config.addCustomizer(new SecureRequestCustomizer());

    ServerConnector https = new ServerConnector(server, new SslConnectionFactory(sslContextFactory, "http/1.1"),
            new HttpConnectionFactory(https_config));

    https.setPort(portHttps);
    sslContextFactory.setKeyStorePath(keystore);
    String pw = getKeyStorePassword();
    logger.trace(methodName, jobid, "pw=" + pw);
    sslContextFactory.setKeyStorePassword(getKeyStorePassword());
    sslContextFactory.setKeyManagerPassword(getKeyManagerPassword());

    server.setConnectors(new Connector[] { http });
    server.addConnector(https);

    // JSP
    ServletContextHandler jspHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);

    jspHandler.setContextPath("/");
    jspHandler.setResourceBase("root");
    try {
      enableEmbeddedJspSupport(jspHandler);
    } catch (IOException e) {
      logger.error(methodName, jobid, e);
    }
    jspHandler.addServlet(DefaultServlet.class, "/");

    ResourceHandler resourceHandler = new ResourceHandler();
    resourceHandler.setDirectoriesListed(true);
    rootDir = DuccWebServerHelper.getDuccWebRoot();
    resourceHandler.setResourceBase(rootDir);
    
    String welcomePage = getWelcomePage();
    jspHandler.setWelcomeFiles(new String[] { welcomePage });
    resourceHandler.setWelcomeFiles(new String[] { welcomePage });

    jspHandler.setAttribute("org.eclipse.jetty.containerInitializers", jspInitializers());
    jspHandler.setAttribute(InstanceManager.class.getName(), new SimpleInstanceManager());
    
    // Create $runmode.jsp file (display a test pattern if ducc.runmode = Test)
    Properties properties = DuccWebProperties.get();
    try {
      String ducc_runmode = properties.getProperty("ducc.runmode", "Production");
      logger.debug(methodName, null, "ducc.runmode:" + ducc_runmode);
      logger.debug(methodName, null, "rootdir:" + rootDir);
      String $runmode_jsp = rootDir + File.separator + "$banner" + File.separator + "$runmode.jsp";
      logger.debug(methodName, null, "$runmode_jsp:" + $runmode_jsp);
      File $runmodeFile = new File($runmode_jsp);
      logger.debug(methodName, null, "path:" + $runmodeFile.getAbsolutePath());
      $runmodeFile.delete();
      String text;
      if (ducc_runmode.equalsIgnoreCase("Test")) {
        text = "<html><%@ include file=\"$runmode.test.jsp\" %></html>";
      } else {
        text = "<html><%@ include file=\"$runmode.production.jsp\" %></html>";
      }
      PrintWriter out = new PrintWriter($runmodeFile);
      out.println(text);
      out.flush();
      out.close();
    } catch (Exception e) {
      logger.info(methodName, null, e);
    }
    
    // Create $experiments.jsp file (include the Experiments button if ducc.experiments = true)
    try {
      String ducc_experiments = properties.getProperty("ducc.experiments", "false");
      String text;
      if (ducc_experiments.equalsIgnoreCase("true")) {
        text = "<HTML><BODY><li><a href=\"experiments.html\">Experiments</a></li></BODY></HTML>";
      } else {
        text = "<html></html>";
      }
      File $experimentsFile = new File(rootDir, "$experiments.jsp");
      logger.debug(methodName, null, "path:", $experimentsFile.getAbsolutePath(), "experiments:", ducc_experiments);
      $experimentsFile.delete();
      PrintWriter out = new PrintWriter($experimentsFile);
      out.println(text);
      out.close();
    } catch (Exception e) {
      logger.info(methodName, null, e);
    }
    
    //
    HandlerList handlers = new HandlerList();

    String key = "ducc.ws.requestLog.RetainDays";
    int dflt = 0;
    int requestLogRetainDays = DuccPropertiesResolver.get(key, dflt);
    logger.info(methodName, jobid, "requestLogRetainDays=" + requestLogRetainDays);
    if (requestLogRetainDays > 0) {
      String requestLogTimeZone = "GMT";
      String requestLogFmt = "yyyy_MM_dd";
      // Put request log in shared logs/webserver dir with host as part of the filename
      String fname = InetHelper.getHostName() + "." + requestLogFmt + ".request.log";
      String requestLogFile = DuccWebServerHelper.getDuccWebLogsDir() + fname;
      NCSARequestLog requestLog = new NCSARequestLog();
      requestLog.setFilename(requestLogFile);
      requestLog.setFilenameDateFormat(requestLogFmt);
      requestLog.setRetainDays(requestLogRetainDays);
      requestLog.setAppend(true);
      requestLog.setExtended(true);
      requestLog.setLogCookies(false);
      requestLog.setLogTimeZone(requestLogTimeZone);
      RequestLogHandler requestLogHandler = new RequestLogHandler();
      requestLogHandler.setRequestLog(requestLog);
      handlers.addHandler(requestLogHandler);
      logger.info(methodName, jobid, "requestLogFile=" + requestLogFile);
    }

    DuccHandler duccHandler = new DuccHandler(this);
    ArrayList<Handler> localHandlers = DuccPlugins.getInstance().gethandlers(this);
    DuccHandlerClassic duccHandlerClassic = new DuccHandlerClassic(this);
    DuccHandlerJsonFormat duccHandlerJson = new DuccHandlerJsonFormat(this);
    DuccHandlerProxy duccHandlerProxy = new DuccHandlerProxy();
    DuccHandlerViz duccHandlerViz = new DuccHandlerViz();
    DuccHandlerUserAuthentication duccHandlerUserAuthentication = new DuccHandlerUserAuthentication();
    DuccHandlerRsync duccHandlerRsync = new DuccHandlerRsync();
    SessionHandler sessionHandler = new SessionHandler();
    handlers.addHandler(sessionHandler);
    handlers.addHandler(duccHandlerUserAuthentication);

    DuccHandlerHttpRequestFilter httpRequestFilter = new DuccHandlerHttpRequestFilter(this);
    handlers.addHandler(httpRequestFilter);

    for (Handler handler : localHandlers) {
      handlers.addHandler(handler);
    }
    handlers.addHandler(duccHandlerRsync);
    handlers.addHandler(duccHandlerJson);
    handlers.addHandler(duccHandlerProxy);
    handlers.addHandler(duccHandlerClassic);
    handlers.addHandler(duccHandlerViz);
    handlers.addHandler(duccHandler);
    handlers.addHandler(jspHandler);
    handlers.addHandler(resourceHandler);
    handlers.addHandler(new DefaultHandler());
    server.setHandler(handlers);

    logger.trace(methodName, null, messages.fetch("exit"));
  }