exchanging new version yang models on firmware upgrade
[oam/tr069-adapter.git] / netconf-server / src / main / java / org / commscope / tr069adapter / netconf / boot / NetConfServiceBooter.java
index 6394ba5..9614865 100644 (file)
 \r
 package org.commscope.tr069adapter.netconf.boot;\r
 \r
+import java.util.Arrays;\r
+import javax.jms.ConnectionFactory;\r
+import org.apache.activemq.ActiveMQConnectionFactory;\r
+import org.apache.activemq.RedeliveryPolicy;\r
+import org.apache.activemq.broker.BrokerService;\r
+import org.apache.activemq.broker.region.policy.RedeliveryPolicyMap;\r
+import org.apache.activemq.command.ActiveMQQueue;\r
 import org.commscope.tr069adapter.netconf.server.NetConfServerManagerImpl;\r
+import org.commscope.tr069adapter.netconf.server.utils.NetConfServerConstants;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
 import org.springframework.boot.SpringApplication;\r
 import org.springframework.boot.autoconfigure.SpringBootApplication;\r
 import org.springframework.boot.autoconfigure.domain.EntityScan;\r
+import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;\r
 import org.springframework.context.ApplicationContext;\r
+import org.springframework.context.annotation.Bean;\r
 import org.springframework.context.annotation.ComponentScan;\r
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;\r
+import org.springframework.jms.annotation.EnableJms;\r
+import org.springframework.jms.config.DefaultJmsListenerContainerFactory;\r
+import org.springframework.jms.config.JmsListenerContainerFactory;\r
+import org.springframework.jms.listener.MessageListenerContainer;\r
+import org.springframework.jms.support.converter.MappingJackson2MessageConverter;\r
+import org.springframework.jms.support.converter.MessageConverter;\r
+import org.springframework.jms.support.converter.MessageType;\r
 import org.springframework.retry.annotation.EnableRetry;\r
 \r
+@EnableJms\r
 @SpringBootApplication\r
-@ComponentScan({"org.commscope.tr069adapter.netconf", "org.opendaylight.netconf.test", "org.commscope.tr069adapter.common"})\r
+@ComponentScan({"org.commscope.tr069adapter.netconf", "org.opendaylight.netconf.test",\r
+    "org.commscope.tr069adapter.common"})\r
 @EnableJpaRepositories("org.commscope.tr069adapter.netconf.dao")\r
 @EntityScan("org.commscope.tr069adapter.netconf.entity")\r
 @EnableRetry\r
 public class NetConfServiceBooter {\r
 \r
+  private static final Logger LOG = LoggerFactory.getLogger(NetConfServiceBooter.class);\r
+\r
   private static ApplicationContext appContext;\r
 \r
   public static void main(String[] args) {\r
@@ -41,10 +64,72 @@ public class NetConfServiceBooter {
       appContext = SpringApplication.run(NetConfServiceBooter.class, args);\r
     NetConfServerManagerImpl serverManager =\r
         NetConfServiceBooter.getApplicationContext().getBean(NetConfServerManagerImpl.class);\r
-    serverManager.restartServers(); // restart all netconf servers during startup.\r
+    boolean isSchemaLoaded = serverManager.loadSchemas();\r
+    if (!isSchemaLoaded) {\r
+      LOG.error("Loading the schema failed while starting the container");\r
+      System.exit(1);\r
+    }\r
+    serverManager.restartServers();\r
   }\r
 \r
   public static ApplicationContext getApplicationContext() {\r
     return appContext;\r
   }\r
+\r
+  /*\r
+   * JMS Configuration Defining the connection factories used in the application Setting the\r
+   * Re-delivery configuration goes here\r
+   */\r
+  @Bean\r
+  public BrokerService broker() throws Exception {\r
+    final BrokerService broker = new BrokerService();\r
+    broker.addConnector("tcp://localhost:61616");\r
+    broker.addConnector("vm://localhost");\r
+    broker.setPersistent(false);\r
+    return broker;\r
+  }\r
+\r
+  @Bean\r
+  public ConnectionFactory jmsConnectionFactory() {\r
+    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();\r
+    connectionFactory\r
+        .setTrustedPackages(Arrays.asList("org.commscope", "org.commscope.tr069adapter"));\r
+    connectionFactory.setMaxThreadPoolSize(7);\r
+\r
+    ActiveMQQueue notificationQueue = new ActiveMQQueue(NetConfServerConstants.NETCONF_NOTIFICATION_Q);\r
+    RedeliveryPolicy notificationQueuePolicy = new RedeliveryPolicy();\r
+    notificationQueuePolicy.setInitialRedeliveryDelay(2* 60 * 1000L);\r
+    notificationQueuePolicy.setUseCollisionAvoidance(true);\r
+    notificationQueuePolicy.setRedeliveryDelay(2* 60 * 1000L);\r
+    notificationQueuePolicy.setUseExponentialBackOff(false);\r
+    notificationQueuePolicy.setMaximumRedeliveries(3);\r
+    notificationQueuePolicy.setDestination(notificationQueue);\r
+\r
+    RedeliveryPolicyMap rdMap = connectionFactory.getRedeliveryPolicyMap();\r
+    rdMap.put(notificationQueue, notificationQueuePolicy);\r
+    return connectionFactory;\r
+  }\r
+\r
+  @Bean\r
+  public JmsListenerContainerFactory<MessageListenerContainer> netConfNotificationCF(\r
+      ConnectionFactory connectionFactory,\r
+      DefaultJmsListenerContainerFactoryConfigurer configurer) {\r
+    return handleJMSCommonConfiguration(connectionFactory, configurer);\r
+  }\r
+\r
+  public JmsListenerContainerFactory handleJMSCommonConfiguration(\r
+      ConnectionFactory connectionFactory,\r
+      DefaultJmsListenerContainerFactoryConfigurer configurer) {\r
+    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();\r
+    configurer.configure(factory, connectionFactory);\r
+    return factory;\r
+  }\r
+\r
+  @Bean\r
+  public MessageConverter jacksonJmsMessageConverter() {\r
+    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();\r
+    converter.setTargetType(MessageType.TEXT);\r
+    converter.setTypeIdPropertyName("_type");\r
+    return converter;\r
+  }\r
 }\r