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"));
}