| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.web; |
| 2 | |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 3 | import javax.servlet.ServletContextListener; |
| 4 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 5 | import org.eclipse.jetty.server.Connector; |
| 6 | import org.eclipse.jetty.server.Server; |
| 7 | import org.eclipse.jetty.server.bio.SocketConnector; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 8 | import org.eclipse.jetty.servlet.ServletContextHandler; |
| 9 | import org.eclipse.jetty.servlet.ServletHolder; |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 10 | import org.springframework.web.context.ContextLoaderListener; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 11 | |
| margaretha | ade7d4a | 2017-07-20 19:53:35 +0200 | [diff] [blame] | 12 | import com.sun.jersey.spi.spring.container.servlet.SpringServlet; |
| 13 | |
| 14 | import de.ids_mannheim.korap.config.BeansFactory; |
| 15 | import de.ids_mannheim.korap.config.KustvaktConfiguration; |
| 16 | import lombok.Getter; |
| 17 | import lombok.Setter; |
| 18 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 19 | /** |
| 20 | * @author hanl |
| 21 | * @date 01/06/2015 |
| 22 | */ |
| Michael Hanl | ada713a | 2016-06-03 17:46:57 +0200 | [diff] [blame] | 23 | public abstract class KustvaktBaseServer { |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 24 | |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 25 | protected static String rootPackages; |
| margaretha | ade7d4a | 2017-07-20 19:53:35 +0200 | [diff] [blame] | 26 | protected static KustvaktArgs kargs; |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 27 | |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 28 | public KustvaktBaseServer () { |
| 29 | KustvaktConfiguration.loadLogger(); |
| 30 | } |
| 31 | |
| 32 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 33 | protected KustvaktArgs readAttributes (String[] args) { |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 34 | KustvaktArgs kargs = new KustvaktArgs(); |
| 35 | for (int i = 0; i < args.length; i++) { |
| 36 | switch ((args[i])) { |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 37 | case "--config": |
| 38 | kargs.setConfig(args[i + 1]); |
| 39 | break; |
| 40 | case "--port": |
| 41 | kargs.setPort(Integer.valueOf(args[i + 1])); |
| 42 | break; |
| Michael Hanl | f21773f | 2015-10-16 23:02:31 +0200 | [diff] [blame] | 43 | case "--help": |
| 44 | StringBuffer b = new StringBuffer(); |
| 45 | |
| 46 | b.append("Parameter description: \n") |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 47 | .append("--config <Path to spring configuration file> : Configuration file\n") |
| 48 | .append("--port <Server port> : Port under which the server is accessible \n") |
| Michael Hanl | d6eadd5 | 2015-11-11 18:30:33 +0100 | [diff] [blame] | 49 | // .append("--props <Path to kustvakt properties> : list of configuration properties\n") |
| Michael Hanl | f21773f | 2015-10-16 23:02:31 +0200 | [diff] [blame] | 50 | .append("--help : This help menu\n"); |
| 51 | System.out.println(b.toString()); |
| 52 | System.out.println(); |
| 53 | break; |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 54 | case "--init": |
| 55 | kargs.init = true; |
| 56 | break; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 57 | } |
| 58 | } |
| 59 | return kargs; |
| 60 | } |
| 61 | |
| Michael Hanl | 00ef546 | 2016-06-06 17:39:59 +0200 | [diff] [blame] | 62 | protected abstract void setup (); |
| 63 | |
| margaretha | ade7d4a | 2017-07-20 19:53:35 +0200 | [diff] [blame] | 64 | protected void start(){ |
| 65 | KustvaktConfiguration config = BeansFactory.getKustvaktContext().getConfiguration(); |
| 66 | |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 67 | if (kargs.init){ |
| 68 | setup(); |
| 69 | } |
| 70 | if (kargs.port == -1){ |
| margaretha | ade7d4a | 2017-07-20 19:53:35 +0200 | [diff] [blame] | 71 | kargs.setPort(config.getPort()); |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 72 | } |
| 73 | |
| 74 | Server server = new Server(); |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 75 | ServletContextHandler contextHandler = new ServletContextHandler( |
| 76 | ServletContextHandler.NO_SESSIONS); |
| 77 | contextHandler.setContextPath("/"); |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 78 | contextHandler.setInitParameter("contextConfigLocation", "classpath:"+kargs.getConfig()); |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 79 | |
| 80 | ServletContextListener listener = new ContextLoaderListener(); |
| 81 | contextHandler.addEventListener(listener); |
| 82 | |
| 83 | ServletHolder servletHolder = new ServletHolder(new SpringServlet()); |
| 84 | servletHolder.setInitParameter("com.sun.jersey.config.property.packages", |
| 85 | rootPackages); |
| 86 | servletHolder.setInitOrder(1); |
| margaretha | ea68a0a | 2017-09-21 03:09:49 +0200 | [diff] [blame] | 87 | contextHandler.addServlet(servletHolder, config.getBaseURL()); |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 88 | |
| 89 | SocketConnector connector = new SocketConnector(); |
| 90 | connector.setPort(kargs.port); |
| 91 | connector.setMaxIdleTime(60000); |
| 92 | |
| 93 | server.setHandler(contextHandler); |
| 94 | server.setConnectors(new Connector[] { connector }); |
| 95 | try { |
| 96 | server.start(); |
| 97 | server.join(); |
| 98 | } |
| 99 | catch (Exception e) { |
| 100 | System.out.println("Server could not be started!"); |
| 101 | System.out.println(e.getMessage()); |
| 102 | System.exit(-1); |
| 103 | // e.printStackTrace(); |
| 104 | } |
| 105 | } |
| 106 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 107 | @Setter |
| 108 | public static class KustvaktArgs { |
| 109 | |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 110 | @Getter |
| 111 | private String config; |
| 112 | private int port; |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 113 | private String[] rootPackages; |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 114 | private boolean init; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 115 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 116 | |
| 117 | public KustvaktArgs () { |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 118 | this.port = -1; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 119 | this.config = null; |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 120 | this.init = false; |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 121 | } |
| Michael Hanl | 72c7b83 | 2015-09-03 08:42:15 +0200 | [diff] [blame] | 122 | |
| Michael Hanl | c444602 | 2016-02-12 18:03:17 +0100 | [diff] [blame] | 123 | } |
| 124 | } |