support external configuration of pdp groups
[policy/pap.git] / main / src / main / java / org / onap / policy / pap / main / startstop / Main.java
index 63d41a0..5918ed1 100644 (file)
@@ -1,6 +1,8 @@
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2019 Nordix Foundation.
+ *  Modifications Copyright (C) 2019, 2021 AT&T Intellectual Property.
+ *  Modifications Copyright (C) 2020 Bell Canada. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 package org.onap.policy.pap.main.startstop;
 
 import java.util.Arrays;
-
-import org.onap.policy.pap.main.PolicyPapException;
+import org.onap.policy.common.utils.resources.MessageConstants;
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.pap.main.PapConstants;
+import org.onap.policy.pap.main.PolicyPapRuntimeException;
 import org.onap.policy.pap.main.parameters.PapParameterGroup;
 import org.onap.policy.pap.main.parameters.PapParameterHandler;
-import org.slf4j.ext.XLogger;
-import org.slf4j.ext.XLoggerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This class initiates ONAP Policy Framework PAP component.
@@ -34,7 +38,8 @@ import org.slf4j.ext.XLoggerFactory;
  * @author Ram Krishna Verma (ram.krishna.verma@est.tech)
  */
 public class Main {
-    private static final XLogger LOGGER = XLoggerFactory.getXLogger(Main.class);
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);
 
     private PapActivator activator;
     private PapParameterGroup parameterGroup;
@@ -45,11 +50,11 @@ public class Main {
      * @param args the command line arguments
      */
     public Main(final String[] args) {
-        final String argumentString = Arrays.toString(args);
+        final var argumentString = Arrays.toString(args);
         LOGGER.info("Starting policy pap service with arguments - {}", argumentString);
 
         // Check the arguments
-        final PapCommandLineArguments arguments = new PapCommandLineArguments();
+        final var arguments = new PapCommandLineArguments();
         try {
             // The arguments return a string if there is a message to print and we should exit
             final String argumentMessage = arguments.parse(args);
@@ -59,33 +64,39 @@ public class Main {
             }
             // Validate that the arguments are sane
             arguments.validate();
-        } catch (final PolicyPapException e) {
-            LOGGER.error("start of policy pap service failed", e);
-            return;
-        }
 
-        // Read the parameters
-        try {
+            // Read the parameters
             parameterGroup = new PapParameterHandler().getParameters(arguments);
-        } catch (final Exception e) {
-            LOGGER.error("start of policy pap service failed", e);
-            return;
-        }
-
-        // Now, create the activator for the policy pap service
-        activator = new PapActivator(parameterGroup);
 
-        // Start the activator
-        try {
-            activator.initialize();
-        } catch (final PolicyPapException e) {
-            LOGGER.error("start of policy pap service failed, used parameters are {}", Arrays.toString(args), e);
-            return;
+            // Initialize database
+            new PapDatabaseInitializer().initializePapDatabase(
+                    parameterGroup.getDatabaseProviderParameters(),
+                    arguments.getPdpGroupsConfiguration());
+
+            // Now, create the activator for the policy pap service
+            activator = new PapActivator(parameterGroup);
+            Registry.register(PapConstants.REG_PAP_ACTIVATOR, activator);
+
+            // Start the activator
+            activator.start();
+        } catch (Exception exp) { // NOSONAR
+            /*
+             * Disabled sonar on the above line, because we want to capture the stack
+             * trace via the logger while still reporting the exception message on stdout
+             * when the JVM exits.
+             */
+            LOGGER.error("failed to start Main", exp);
+            if (null != activator) {
+                Registry.unregister(PapConstants.REG_PAP_ACTIVATOR);
+            }
+            throw new PolicyPapRuntimeException(
+                String.format(MessageConstants.START_FAILURE_MSG, MessageConstants.POLICY_PAP), exp);
         }
 
         // Add a shutdown hook to shut everything down in an orderly manner
         Runtime.getRuntime().addShutdownHook(new PolicyPapShutdownHookClass());
-        LOGGER.info("Started policy pap service");
+        var successMsg = String.format(MessageConstants.START_SUCCESS_MSG, MessageConstants.POLICY_PAP);
+        LOGGER.info(successMsg);
     }
 
     /**
@@ -100,15 +111,14 @@ public class Main {
     /**
      * Shut down Execution.
      *
-     * @throws PolicyPapException on shutdown errors
      */
-    public void shutdown() throws PolicyPapException {
+    public void shutdown() {
         // clear the parameterGroup variable
         parameterGroup = null;
 
         // clear the pap activator
         if (activator != null) {
-            activator.terminate();
+            activator.stop();
         }
     }
 
@@ -123,11 +133,15 @@ public class Main {
          */
         @Override
         public void run() {
+            if (!activator.isAlive()) {
+                return;
+            }
+
             try {
                 // Shutdown the policy pap service and wait for everything to stop
-                activator.terminate();
-            } catch (final PolicyPapException e) {
-                LOGGER.warn("error occured during shut down of the policy pap service", e);
+                activator.stop();
+            } catch (final RuntimeException e) {
+                LOGGER.warn("error occurred during shut down of the policy pap service", e);
             }
         }
     }
@@ -137,7 +151,11 @@ public class Main {
      *
      * @param args the arguments
      */
-    public static void main(final String[] args) {
+    public static void main(final String[] args) {      // NOSONAR
+        /*
+         * NOTE: arguments are validated by the constructor, thus sonar is disabled.
+         */
+
         new Main(args);
     }
 }