Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / acs / application-booter / src / main / java / org / commscope / tr069adapter / acs / booter / ACSServiceBooter.java
1 /*
2  * ============LICENSE_START========================================================================
3  * ONAP : tr-069-adapter
4  * =================================================================================================
5  * Copyright (C) 2020 CommScope Inc Intellectual Property.
6  * =================================================================================================
7  * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,
8  * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
9  * may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
14  * either express or implied. See the License for the specific language governing permissions and
15  * limitations under the License.
16  * ===============LICENSE_END=======================================================================
17  */
18
19 package org.commscope.tr069adapter.acs.booter;
20
21 import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.CR_REQ_Q;
22 import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NBI_NOTIFICATION_Q;
23 import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NBI_OP_RESULT_Q;
24 import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.TR069_NBI_REQUEST_Q;
25
26 import java.util.Arrays;
27
28 import javax.jms.ConnectionFactory;
29
30 import org.apache.activemq.ActiveMQConnectionFactory;
31 import org.apache.activemq.RedeliveryPolicy;
32 import org.apache.activemq.broker.BrokerService;
33 import org.apache.activemq.broker.region.policy.RedeliveryPolicyMap;
34 import org.apache.activemq.command.ActiveMQQueue;
35 import org.apache.catalina.connector.Connector;
36 import org.springframework.beans.factory.annotation.Value;
37 import org.springframework.boot.SpringApplication;
38 import org.springframework.boot.autoconfigure.SpringBootApplication;
39 import org.springframework.boot.autoconfigure.domain.EntityScan;
40 import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;
41 import org.springframework.boot.web.client.RestTemplateBuilder;
42 import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
43 import org.springframework.boot.web.servlet.FilterRegistrationBean;
44 import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
45 import org.springframework.context.annotation.Bean;
46 import org.springframework.context.annotation.ComponentScan;
47 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
48 import org.springframework.jms.annotation.EnableJms;
49 import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
50 import org.springframework.jms.config.JmsListenerContainerFactory;
51 import org.springframework.jms.listener.MessageListenerContainer;
52 import org.springframework.jms.support.converter.MappingJackson2MessageConverter;
53 import org.springframework.jms.support.converter.MessageConverter;
54 import org.springframework.jms.support.converter.MessageType;
55 import org.springframework.web.client.RestTemplate;
56
57 @EnableJms
58 @SpringBootApplication
59 @ComponentScan({"org.commscope.tr069adapter.acs", "org.commscope.tr069adapter.common"})
60 @EnableJpaRepositories("org.commscope.tr069adapter.acs")
61 @EntityScan("org.commscope.tr069adapter.acs.requestprocessor.entity")
62 public class ACSServiceBooter {
63
64   public static void main(String[] args) {
65     SpringApplication.run(ACSServiceBooter.class, args);
66   }
67
68   @Bean
69   public RestTemplate restTemplate(RestTemplateBuilder builder) {
70     return builder.build();
71   }
72
73
74   /*
75    * JMS Configuration Defining the connection factories used in the application Setting the
76    * Re-delivery configuration goes here
77    */
78   @Bean
79   public BrokerService broker() throws Exception {
80     final BrokerService broker = new BrokerService();
81     broker.addConnector("tcp://localhost:61616");
82     broker.addConnector("vm://localhost");
83     broker.setPersistent(false);
84     return broker;
85   }
86
87   @Bean
88   public ConnectionFactory jmsConnectionFactory() {
89     ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
90     connectionFactory
91         .setTrustedPackages(Arrays.asList("org.commscope", "org.commscope.tr069adapter"));
92     connectionFactory.setMaxThreadPoolSize(7);
93
94     ActiveMQQueue tr069nbiReqQueue = new ActiveMQQueue(TR069_NBI_REQUEST_Q);
95     RedeliveryPolicy tr069nbiReqQueuePolicy = new RedeliveryPolicy();
96     tr069nbiReqQueuePolicy.setInitialRedeliveryDelay(30000);
97     tr069nbiReqQueuePolicy.setUseCollisionAvoidance(true);
98     tr069nbiReqQueuePolicy.setRedeliveryDelay(30000);
99     tr069nbiReqQueuePolicy.setUseExponentialBackOff(false);
100     tr069nbiReqQueuePolicy.setMaximumRedeliveries(3);
101     tr069nbiReqQueuePolicy.setDestination(tr069nbiReqQueue);
102
103     ActiveMQQueue crQueue = new ActiveMQQueue(CR_REQ_Q);
104     RedeliveryPolicy crQueuePolicy = new RedeliveryPolicy();
105     crQueuePolicy.setInitialRedeliveryDelay(10 * 1000L);
106     crQueuePolicy.setUseCollisionAvoidance(true);
107     crQueuePolicy.setRedeliveryDelay(10 * 1000L);
108     crQueuePolicy.setMaximumRedeliveries(2);
109     crQueuePolicy.setDestination(crQueue);
110
111     ActiveMQQueue notificationQueue = new ActiveMQQueue(NBI_NOTIFICATION_Q);
112     RedeliveryPolicy notificationQueuePolicy = new RedeliveryPolicy();
113     notificationQueuePolicy.setInitialRedeliveryDelay(30000);
114     notificationQueuePolicy.setUseCollisionAvoidance(true);
115     notificationQueuePolicy.setRedeliveryDelay(30000);
116     notificationQueuePolicy.setUseExponentialBackOff(false);
117     notificationQueuePolicy.setMaximumRedeliveries(5);
118     notificationQueuePolicy.setDestination(notificationQueue);
119
120     ActiveMQQueue opResQueue = new ActiveMQQueue(NBI_OP_RESULT_Q);
121     RedeliveryPolicy opResQueuePolicy = new RedeliveryPolicy();
122     opResQueuePolicy.setInitialRedeliveryDelay(30000);
123     opResQueuePolicy.setUseCollisionAvoidance(true);
124     opResQueuePolicy.setRedeliveryDelay(30000);
125     opResQueuePolicy.setUseExponentialBackOff(false);
126     opResQueuePolicy.setMaximumRedeliveries(3);
127     opResQueuePolicy.setDestination(opResQueue);
128
129     RedeliveryPolicyMap rdMap = connectionFactory.getRedeliveryPolicyMap();
130     rdMap.put(tr069nbiReqQueue, tr069nbiReqQueuePolicy);
131     rdMap.put(crQueue, crQueuePolicy);
132     rdMap.put(notificationQueue, notificationQueuePolicy);
133     rdMap.put(opResQueue, opResQueuePolicy);
134
135     return connectionFactory;
136   }
137   // End
138
139   @Bean
140   public JmsListenerContainerFactory<MessageListenerContainer> tr069NBIRequestCF(
141       ConnectionFactory connectionFactory,
142       DefaultJmsListenerContainerFactoryConfigurer configurer) {
143     return handleJMSCommonConfiguration(connectionFactory, configurer, "5-10");
144   }
145
146   @Bean
147   public JmsListenerContainerFactory<MessageListenerContainer> tr069DeviceResponseCF(
148       ConnectionFactory connectionFactory,
149       DefaultJmsListenerContainerFactoryConfigurer configurer) {
150     return handleJMSCommonConfiguration(connectionFactory, configurer, "10-20");
151   }
152
153   @Bean
154   public JmsListenerContainerFactory<MessageListenerContainer> nbiNotificationCF(
155       ConnectionFactory connectionFactory,
156       DefaultJmsListenerContainerFactoryConfigurer configurer) {
157     return handleJMSCommonConfiguration(connectionFactory, configurer, "5-10");
158   }
159
160   @Bean
161   public JmsListenerContainerFactory<MessageListenerContainer> nbiOpResultCF(
162       ConnectionFactory connectionFactory,
163       DefaultJmsListenerContainerFactoryConfigurer configurer) {
164     return handleJMSCommonConfiguration(connectionFactory, configurer, "5-10");
165   }
166
167   public JmsListenerContainerFactory<MessageListenerContainer> handleJMSCommonConfiguration(
168       ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer,
169       String threadCoutRange) {
170     DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
171     configurer.configure(factory, connectionFactory);
172     factory.setConcurrency(threadCoutRange);
173     JmsListenerContainerFactory<MessageListenerContainer> result =
174         (JmsListenerContainerFactory) factory;
175     return result;
176   }
177
178   /*
179    * JMS Configuration ends here
180    */
181
182   /*
183    * JMS serializing and de-serializing used Jackson JMS message converter Serialize message content
184    * to json using TextMessage
185    */
186   @Bean
187   public MessageConverter jacksonJmsMessageConverter() {
188     MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
189     converter.setTargetType(MessageType.TEXT);
190     converter.setTypeIdPropertyName("_type");
191     return converter;
192   }
193
194   /*
195    * Exposing an addition HTTP port for Netconf mapper to access And making the default port to be
196    * TLS secured which shall be used in the hems url
197    */
198   @Value("${server.additional.http.port}")
199   private String additionalHttpPort;
200
201   @Value("${server.port}")
202   private String serverPort;
203
204   @Bean
205   public ConfigurableServletWebServerFactory tomcatEmbeddedServletContainerFactory() {
206     final TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
207     final Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
208     connector.setScheme("https");
209     connector.setPort(Integer.valueOf(this.additionalHttpPort));
210     factory.addAdditionalTomcatConnectors(connector);
211     return factory;
212   }
213
214   @Bean
215   public FilterRegistrationBean<FilterInsecuredRequests> loggingFilter() {
216     FilterRegistrationBean<FilterInsecuredRequests> registrationBean =
217         new FilterRegistrationBean<>();
218     registrationBean.setFilter(new FilterInsecuredRequests(serverPort));
219     registrationBean.addUrlPatterns("/CPEMgmt/*");
220     return registrationBean;
221   }
222
223 }