[DMAAP-48] Initial code import
[dmaap/datarouter.git] / datarouter-node / src / main / java / com / att / research / datarouter / node / NodeMain.java
1 /*******************************************************************************\r
2  * ============LICENSE_START==================================================\r
3  * * org.onap.dmaap\r
4  * * ===========================================================================\r
5  * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
6  * * ===========================================================================\r
7  * * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * * you may not use this file except in compliance with the License.\r
9  * * You may obtain a copy of the License at\r
10  * * \r
11  *  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * * \r
13  *  * Unless required by applicable law or agreed to in writing, software\r
14  * * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * * See the License for the specific language governing permissions and\r
17  * * limitations under the License.\r
18  * * ============LICENSE_END====================================================\r
19  * *\r
20  * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
21  * *\r
22  ******************************************************************************/\r
23 \r
24 \r
25 package com.att.research.datarouter.node;\r
26 \r
27 import org.eclipse.jetty.servlet.*;\r
28 import org.eclipse.jetty.util.ssl.*;\r
29 import org.eclipse.jetty.server.*;\r
30 import org.eclipse.jetty.server.nio.*;\r
31 import org.eclipse.jetty.server.ssl.*;\r
32 import org.apache.log4j.Logger;\r
33 \r
34 /**\r
35  *      The main starting point for the Data Router node\r
36  */\r
37 public class NodeMain   {\r
38         private NodeMain() {}\r
39         private static Logger   logger = Logger.getLogger("com.att.research.datarouter.node.NodeMain");\r
40         private static class wfconfig implements Runnable       {\r
41                 private NodeConfigManager ncm;\r
42                 public wfconfig(NodeConfigManager ncm) {\r
43                         this.ncm = ncm;\r
44                 }\r
45                 public synchronized void run() {\r
46                         notify();\r
47                 }\r
48                 public synchronized void waitforconfig() {\r
49                         ncm.registerConfigTask(this);\r
50                         while (!ncm.isConfigured()) {\r
51                                 logger.info("NODE0003 Waiting for Node Configuration");\r
52                                 try {\r
53                                         wait();\r
54                                 } catch (Exception e) {\r
55                                 }\r
56                         }\r
57                         ncm.deregisterConfigTask(this);\r
58                         logger.info("NODE0004 Node Configuration Data Received");\r
59                 }\r
60         }\r
61         private static Delivery d;\r
62         private static NodeConfigManager ncm;\r
63         /**\r
64          *      Reset the retry timer for a subscription\r
65          */\r
66         public static void resetQueue(String subid, String ip) {\r
67                 d.resetQueue(ncm.getSpoolDir(subid, ip));\r
68         }\r
69         /**\r
70          *      Start the data router.\r
71          *      <p>\r
72          *      The location of the node configuration file can be set using the\r
73          *      com.att.research.datarouter.node.ConfigFile system property.  By\r
74          *      default, it is "etc/node.properties".\r
75          */\r
76         public static void main(String[] args) throws Exception {\r
77                 logger.info("NODE0001 Data Router Node Starting");\r
78                 IsFrom.setDNSCache();\r
79                 ncm = NodeConfigManager.getInstance();\r
80                 logger.info("NODE0002 I am " + ncm.getMyName());\r
81                 (new wfconfig(ncm)).waitforconfig();\r
82                 d = new Delivery(ncm);\r
83                 LogManager lm = new LogManager(ncm);\r
84                 Server server = new Server();\r
85                 SelectChannelConnector http = new SelectChannelConnector();\r
86                 http.setPort(ncm.getHttpPort());\r
87                 http.setMaxIdleTime(2000);\r
88                 http.setRequestHeaderSize(2048);\r
89                 SslSelectChannelConnector https = new SslSelectChannelConnector();\r
90                 https.setPort(ncm.getHttpsPort());\r
91                 https.setMaxIdleTime(30000);\r
92                 https.setRequestHeaderSize(8192);\r
93                 SslContextFactory cf = https.getSslContextFactory();\r
94                 \r
95                 /**Skip SSLv3 Fixes*/\r
96                 cf.addExcludeProtocols("SSLv3");\r
97                 logger.info("Excluded protocols node-"+cf.getExcludeProtocols());\r
98                 /**End of SSLv3 Fixes*/\r
99 \r
100                 cf.setKeyStoreType(ncm.getKSType());\r
101                 cf.setKeyStorePath(ncm.getKSFile());\r
102                 cf.setKeyStorePassword(ncm.getKSPass());\r
103                 cf.setKeyManagerPassword(ncm.getKPass());\r
104                 server.setConnectors(new Connector[] { http, https });\r
105                 ServletContextHandler ctxt = new ServletContextHandler(0);\r
106                 ctxt.setContextPath("/");\r
107                 server.setHandler(ctxt);\r
108                 ctxt.addServlet(new ServletHolder(new NodeServlet()), "/*");\r
109                 logger.info("NODE0005 Data Router Node Activating Service");\r
110                 server.start();\r
111                 server.join();\r
112         }\r
113 }\r